一、java.sql.DriverManager类:创建连接
1.注册驱动
注意:DriverManager.registerDriver(new com.mysql.jdbc.Driver()); -- 此方法不建议使用
原因:
☞ 导致驱动被注册两次
☞ 强烈依赖数据库的驱动 jar
解决办法:
☞ Class.forName("com.mysql.jdbc.Driver");
2.与数据库建立连接
方式一:
//获取connection链接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_demo", "root", "wingzhe");
方式二:
//获取connection链接对象
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "wingzhe");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_demo", info);
方式三:
//获取connection链接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_demo?user=root&password=123");
二、java.sql.Connection接口:一个连接
接口的实现在数据库驱动中。所有与数据库交互都是基于连接对象的。
三、java.sql.Statement接口:操作sql语句,并返回相应结果的对象
1.接口的实现在数据库驱动中,用于执行静态sql语句并返回他所生成结果的对象
2.主要方法:
☞ ResultSet executeQuery( String sql ) :根据查询语句返回结果集,只能执行 select 语句☞ int executeUpdate( String sql ) :根据执行的DML(insert 、update 、delete )语句,返回受影响的行数
//执行insert
int i = statement.executeUpdate("INSERT INTO users(NAME,PASSWORD,email,birthday) VALUES ('zl','123456','zl@qq.com','1991-09-21')");
if(i > 0){
System.out.println("insert成功");
}
//执行update
int i = statement.executeUpdate("UPDATE users SET PASSWORD='654321' WHERE NAME='zl'");
if(i > 0){
System.out.println("update成功");
}
//执行delete
int i = statement.executeUpdate("DELETE FROM users WHERE id='2'");
if(i > 0){
System.out.println("delete成功");
}
☞ boolean execute( String sql ) :此方法可以执行任意sql语句。返回boolean值,表示是否返回ResultSet的结果集,仅当执行select语句,且有返回结果时返回true,其余语句都返回false
四、java.sqlResultSet 接口:结果集,客户端存表数据的对象
1.封装结果集
提供一个游标,默认游标指向结果集第一行之前
调用一次 next() ,游标向下移动一行
提供一些 get() 方法
☞ 获取某条记录的某列数据的方法
Object getObject(String columName) : 按照列名来取
Object getObject(int columCount) : 按照列的顺序来取,第一列为1
☞ 数据库类型、java类型以及 resultSet 中对应类型的获取
int getInt() :获取int数据
String getString() :获取String类型的数据
long getLong() :获取long类型的数据
Double getDouble() :获取double类型的数据
package com.jdcb.entity;
import java.util.Date;
public class User {
private int id;
private String name;
private String password;
private String email;
private Date birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password
+ ", email=" + email + ", birthday=" + birthday + "]";
}
}
package com.jdcb.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
import com.jdcb.entity.User;
public class JdbcTest {
@Test
public void selectTest() throws Exception {
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取连接
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jdbc_demo", "root", "123");
// 获取statement
Statement statement = connection.createStatement();
// 执行sql
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
// 处理结果集
while (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt(1));
user.setName(resultSet.getString("name"));
user.setPassword(resultSet.getString(3));
user.setEmail(resultSet.getString("email"));
user.setBirthday(resultSet.getDate("birthday"));
System.out.println(user);
}
// 释放资源
resultSet.close();
statement.close();
connection.close();
}
}
2.可移动游标的方法
boolean next(): 向下滚动。返回有无记录
boolean provious(): 向上滚动。返回有无记录
boolean absolute(int rowCount): 定位到某条记录。第一条为1
void beforeFirst(): 滚动到第一条的前面
void afterLast(): 滚动到最后一条的后面