JDBC——常见接口详解
2019-06-22 本文已影响0人
BeaconCao
1. DriverManager
该类的主要作用就是创建连接,在《JDBC——解惑及使用方法》的代码中使用了反射的机制注册了驱动,这里需要注意的是不同的数据库,在forName中的参数写法不同,MySQL的写法:com.mysql.jdbc.Driver。
获取连接Connection时,调用了DriverManager类中的getConnection方法,该方法在DriverManager类中有几个重载方法
getConnection(String url);
getConnection(String url,String user, String password);
getConnection(String url,java.util.Properties info);
getConnection(String url, java.util.Properties info, Class<?> caller);
getConnection()方法的作用就是获取数据库的连接,上面前三个中最终都调用了第4个getConnection()方法并将数据库连接的一些信息传了过去。其中java.util.Properties该类是一个跟配置文件相关的类,继承了HashTable类。
java.util.Properties info = new java.util.Properties();
info.setProperty("user", "root");
info.setProperty("password","monkey1024");
上面将用户名和密码封装到了info对象中,此时可以调用getConnection(String url,java.util.Properties info);这个方法将info作为参数传递过去。
2. Statement
该接口的作用是操作sql语句,并返回相应结果的对象。
常用的方法如下:
//根据查询语句返回结果集。只能执行select语句。
ResultSet executeQuery(String sql);
//根据执行的DML(insert update delete)语句,返回受影响的行数。
int executeUpdate(String sql) ;
//此方法可以执行任意sql语句。返回boolean值,表示是否返回ResultSet结果集。
//仅当执行select语句,且有返回结果时返回true, 其它语句都返回false;
boolean execute(String sql) ;
代码演示
@Test
public void testInsert() throws Exception{
//1-注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2-获取连接Connection
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/monkey1024", "root", "monkey1024");
//3-得到执行sequel语句的对象Statement
Statement stmt = conn.createStatement();
//4-执行sql语句,并返回结果,以下三选一构成代码。
1-int flag = stmt.executeUpdate("insert into t_user(name,password,email,birthday) values('cat','123456','cat@163.com','1993-11-11')");
2-int flag = stmt.executeUpdate("delete from t_user where name='cat';");
3-int flag = stmt.executeUpdate("update t_user set password=123 where name='cat'");
//5-处理结果
if(flag > 0){
System.out.println("成功");
}
//6-关闭资源
stmt.close();
conn.close();
}
3. ResultSet
该接口的作用主要用来封装结果集。
使用ResultSet接收的数据使用起来比较麻烦,这个时候我们可以定义一个JavaBean类,然后将数据保存到List中,这样数据方便使用。
- 思路:创建一个JavaBean类➡创建一个JavaBean类的集合➡将ResultSet中数据通过setXxx方法设置给JavaBean实例➡集合调用add()将数据储存到集合中。
- 创建JavaBean
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;
}
}
- 执行一个JDBC查询操作,将多条查询结果封装到JavaBean中并将JavaBean放入到集合里。
执行一个JDBC查询操作,将多条查询结果封装到JavaBean中并将JavaBean放入到集合里面:
@Test
public void testSelect() throws Exception{
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接Connection
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/monkey1024", "root", "monkey1024");
//得到执行sequel语句的对象Statement
Statement stmt = conn.createStatement();
//执行sql语句,并返回结果
ResultSet rs = stmt.executeQuery("select id,name,password,email,birthday from t_user");
List<User> userList = new ArrayList<>();
//处理结果
while(rs.next()){
User u = new User();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setPassword(rs.getString("password"));
u.setEmail(rs.getString("email"));
u.setBirthday(rs.getDate("birthday"));
userList.add(u);
}
//关闭资源
stmt.close();
conn.close();
System.out.println(userList);
}