JDBC常用接口详解

DriverManager

该类的主要作用就是创建连接,在上一节的代码中使用了反射的机制注册了驱动,这里需要注意的是不同的数据库,在forName中的参数写法不同,MySQL的写法:com.mysql.jdbc.Driver。新版MySQL驱动的写法是:com.mysql.cj.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);

该方法的作用就是获取数据库的连接,上面前三个中最终都调用了第4个方法并将数据库连接的一些信息传了过去。其中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作为参数传递过去。

Statement

该接口的作用是操作sql语句,并返回相应结果的对象。
常用的方法如下:

  • ResultSet executeQuery(String sql) 根据查询语句返回结果集。只能执行select语句。
  • int executeUpdate(String sql) 根据执行的DML(insert update delete)语句,返回受影响的行数。
  • boolean execute(String sql) 此方法可以执行任意sql语句。返回boolean值,表示是否返回ResultSet结果集。仅当执行select语句,且有返回结果时返回true, 其它语句都返回false;

如果执行增删改操作时,使用executeUpdate方法即可:

package com.monkey1024.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import org.junit.Test;

public class CRUD_Test01 {

    @Test
    public void testInsert() 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语句,并返回结果
        int flag = stmt.executeUpdate("insert into t_user(name,password,email,birthday) values('cat','123456','cat@163.com','1993-11-11')");

        //处理结果 
        if(flag > 0){
            System.out.println("成功");
        }

        //关闭资源
        stmt.close();
        conn.close();
    }

    @Test
    public void testUpdate() 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语句,并返回结果
        int flag = stmt.executeUpdate("update t_user set password=123 where name='cat'");

        //处理结果 
        if(flag > 0){
            System.out.println("成功");
        }

        //关闭资源
        stmt.close();
        conn.close();
    }

    @Test
    public void testDelete() 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语句,并返回结果
        int flag = stmt.executeUpdate("delete from t_user where name='cat';");

        //处理结果 
        if(flag > 0){
            System.out.println("成功");
        }

        //关闭资源
        stmt.close();
        conn.close();
    }
}

ResultSet

该接口的作用主要用来封装结果集。
常用的封装数据的方法:

getObject(String ColomnName); 根据列名取值。

除了上的方法之外还有:

getObject(int columnIndex); 根据序号取值,索引从1开始

只不过该方法在使用起来可读性不强,不建议使用。
在做查询操作时,可能会返回多条数据结果,此时可以定义一个JavaBean类,将数据封装到该JavaBean中,多条数据的话将此JavaBean放到集合中。
创建一个JavaBean:

package com.monkey1024.jdbc;

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放入到集合里面:

@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);
}