JDBC的操作步骤

JDBC的操作步骤

一、什么是JDBC

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成。 其实,JDBC就是一套规范(接口),让各大服务器厂商自己去实现这个规范(实现接口),从而可以使得java编写的程序可以去访问。JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

img

二、常用的API

  • Statement接口:

    执行静态SQL语句并返回它所生成结果.

    int executeUpdate(String sql): 执行DDL/DML语句. 若当前SQL是DDL语句,则返回0. 若当前SQL是DML语句,则返回受影响的行数.

    ResultSet executeQuery(String sql):执行DQL语句,返回结果集.

    close():释放资源

  • Connection接口

    Statement createStatement():创建一个静态的语句对象.

    PreparedStatement prepareStatement(String sql):创建一个预编译语句对象. 此时参数sql:表示带有占位符(?)的SQL语句的模板.

    close():释放资源

  • PreparedStatement接口

    是Statemen接口的子接口,表示预编译的 SQL 语句的对象.

    void setXxx(int parameterIndex,Xxx value):设置第几个占位符的真正参数值.

    int executeUpdate():执行DDL/DML语句. 注意:没有参数 若当前SQL是DDL语句,则返回0. 若当前SQL是DML语句,则返回受影响的行数.

    ResultSet executeQuery():执行DQL语句,返回结果集.

    close():释放资源

  • ResultSet接口

    执行SQL语句会返回一个结果集,开始光标位于第一行的前,调用next方法会返回一个boolean类型,判断下一行是否还有结果集并且光标会想下一行移动。

    boolean next():判断当前光标是否能向下移动,如果能向下移动返回true,并同时将光标移动到下一行.

    Xxx getXxx(int columnIndex):取出当前光标所在行的第columnIndex列的数据(columnIndex从1开始算).

    Xxx getXxx(String columnName):取出当前光标所在行的列名为columnName列的数据,columnName可以是别名.

    close():释放资源

    Xxx表示的是数据类型

三、怎么用JDBC

有五个铁定的步骤,一个一个来说:

1.加载注册驱动

先加载驱动包,驱动包就是服务器厂商实现了JDBC接口的一个jar包,比如mysql的驱动包。先build path ,mysql的jar包。用java加载注册驱动代码:

1
Class.forName("驱动类名称");

一些数据库的驱动类名称:

mysql: com.mysql.jdbc.Driver

oracle: oracle.jdbc.driver.OracleDriver

DB2: com.ibm.db2.jcc.DB2Driver

加载过程就是 把驱动类这一份字节码加载进JVM,会立刻执行类中的静态代码块,而在这些类中的静态代码块就是在注册驱动。

Java6开始,JDBC4.0有一个新特性,无需加载注册驱动。不提倡,因为JavaWeb也是要手动加载

2.获取连接对象

1
Connection conn = DriverManager.getConnection(url,username,password);

url是也是各个数据库不相同:

mysql的是 jdbc:mysql://主机名:3306/数据库

username和password是数据库的账号和密码

3.获取语句对象

1
2
Statement st = conn.createStatement();
PreparedStatement ps = conn.prepareStatement(sql);

4.执行SQL语句

在数据库管理系统上执行完sql语句返回结果,DML语句会返回影响的行数,DDL语句不返回,DQL会返回一个结果集

1
2
st.executeUpdate(sql);//DML,DDL
ResultSet rs = execumentQuery();//DQL

对于DQL语句要进行处理结果集

1
while(rs.next){//TODO}

5.释放资源

正确关闭资源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static void close(Connection conn, Statement st, ResultSet rs){
try {
if(rs != null){
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(st != null){
st.close();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(conn != null){
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}finally{

}
}
}
}

四、JDBC的DML,DDL,DQL操作

  • 创建表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public void testCreateTab() throws Exception {
    String sql = "CREATE TABLE s_student(id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10) NOT NULL UNIQUE,age INT)";
    //1.记载注册驱动/
    Class.forName("com.mysql.jdbc.Driver");
    //2.获取连接对象
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo",
    "root", "admin");
    //3.创建语句对象
    Statement st = conn.createStatement();
    //4.执行SQL语句
    st.executeUpdate(sql);
    //5.释放资源
    st.close();
    conn.close();
    }
  • 增删改

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    public class DMLTest {
    @Test //向表中添加行数据
    public void testInsert() throws Exception {
    String sql = "INSERT INTO s_student(name,age) VALUES('西门吹雪',18),('王熙凤',19)";
    //1.加载注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //2.获取连接对象
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
    //3.获取语句对象
    Statement st = conn.createStatement();
    //4.执行sql语句
    int ret = st.executeUpdate(sql);
    System.out.println("受影响的行数"+ret);
    //5.关闭资源
    st.close();
    conn.close();
    }
    @Test
    public void testDelete() throws Exception {
    String sql = "DELETE FROM s_student WHERE name = '西门吹雪'";
    //1.记载注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //2获取连接对象
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
    //3获取语句对象
    Statement st = conn.createStatement();
    //4.执行sql语句
    st.executeUpdate(sql);
    //5.释放资源
    st.close();
    conn.close();
    }
    @Test
    public void testUpdate() throws Exception {
    String sql = "UPDATE s_student SET age = 99 WHERE id = 3";
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
    Statement st = conn.createStatement();
    st.executeUpdate(sql);
    st.close();
    conn.close();
    }
    }
  • 查询

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    public class DQLTest {
    @Test
    public void testQuerySigle() throws Exception {
    String sql = "SELECT * FROM s_student WHERE id = 1";
    //加载驱动
    Class.forName("com.mysql.jdbc.Driver");
    //获取连接对象
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
    //获取语句对象
    Statement st = conn.createStatement();
    //执行sql语句
    ResultSet rs = st.executeQuery(sql);
    if(rs.next()){
    long id = rs.getLong("id");
    long age = rs.getLong("age");
    String name = rs.getString("name");
    System.out.println(id + "," + age +"," + name);
    }
    rs.close();
    st.close();
    conn.close();
    }

    @Test
    public void testAll() throws Exception {
    String sql = "SELECT * FROM s_student";
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","admin");
    Statement st = conn.createStatement();
    ResultSet rs = st.executeQuery(sql);
    while(rs.next()){
    String name = rs.getString("name");
    long id = rs.getLong("id");
    long age = rs.getLong("age");
    System.out.println(name + "," + id +"," + age);
    }
    rs.close();
    st.close();
    conn.close();
    }
    }

五、总结

JDBC的CUID操作就是严格按照上述步骤完成的,可以发现基本操作都很相同,也很容易理解。

文章目录
  1. 1. JDBC的操作步骤
    1. 1.1. 一、什么是JDBC
    2. 1.2. 二、常用的API
    3. 1.3. 三、怎么用JDBC
      1. 1.3.1. 1.加载注册驱动
      2. 1.3.2. 2.获取连接对象
      3. 1.3.3. 3.获取语句对象
      4. 1.3.4. 4.执行SQL语句
      5. 1.3.5. 5.释放资源
    4. 1.4. 四、JDBC的DML,DDL,DQL操作
    5. 1.5. 五、总结