JDBC中三个重要接口


这里介绍一下JDBC API中最重要的三个接口:Connection、Statement和ResultSet。

一、Connection接口

java.sql.Connection接口的实现对象代表与数据库的连接,也就是在Java程序和数据库之间建立连接。Connection接口中常用的方法:

  • Statement createStatement():创建一个语句对象,语句对象用来将SQL语句发送到数据 库。
  • PreparedStatement prepareStatement(String sql):创建一个预编译的语句对象,用来将参数 化的SQL语句发送到数据库,参数包含一个或者多个问号“?”占位符。
  • CallableStatement prepareCall(String sql):创建一个调用存储过程的语句对象,参数是调用 的存储过程,参数包含一个或者多个问号“?”为占位符。
  • close():关闭到数据库的连接,在使用完连接后必须关闭,否则连接会保持一段比较长的 时间,直到超时。
  • isClosed():判断连接是否已经关闭。

二、Statement接口

java.sql.Statement称为语句对象,它提供用于向数据库发出SQL语句,并且访问结果。

有三种Statement接口::java.sql.Statement、java.sql.PreparedStatement和 java.sql.CallableStatement

PreparedStatement继承Statement接口,CallableStatement继承 PreparedStatement接口。
Statement实现对象用于执行基本的SQL语句,PreparedStatement实现对 象用于执行预编译的SQL语句,CallableStatement实现对象用于用来调用数据库中的存储过程。

Statement提供了许多方法,最常用的方法如下:

  • executeQuery():运行查询语句,返回ResultSet对象。
  • executeUpdate():运行更新操作,返回更新的行数。
  • close():关闭语句对象。
  • isClosed():判断语句对象是否已经关闭。

Statement对象用于执行不带参数的简单SQL语句,语法格式如下:

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/JAVA",“user”,"password");
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery("select userid, name from user");

一般情况下可以通过connection.createStatement()方 法就可以得到Statement对象。

PreparedStatement对象用于执行带参数的预编译SQL语句,语法格式如下:

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/JAVA",“user”,"password");
PreparedStatement pstmt = conn.prepareStatement("insert into user values(?,?)");
pstmt.setInt(1,10); //绑定第一个参数 
pstmt.setString(2,"guan"); //绑定第二个参数 
//执行SQL语句
pstmt.executeUpdate(); 

绑定参数时需要注意两个问题:绑定参数顺序和绑定参数的类型,绑定参数索引是 从1开始的,而不是从0开始的。根据绑定参数的类型不同选择对应的set方法。

CallableStatement对象用于执行对数据库已存储过程的调用,语法格式如下:

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/JAVA",“user”,"password");
strSQL = "{call proc_userinfo(?,?)}";
java.sql.CallableStatement sqlStmt = conn.prepaleCall(strSQL); sqlStmt.setString(1"tony"); sqIStmt.setString(2"tom"); 
//执行存储过程 
int i = sqlStmt.exeCuteUpdate();

分析预编译SQL语句的优点:预编译SQL语句是在程序编译的时一起进行编译,这样的语句在数据库中执行时 候,不需要编译过程,直接执行SQL语句,所以速度很快。在预编译SQL语句会有一些程 序执行时才能确定的参数,这些参数采用“?”占位符,直到运行时再用实际参数替换。

三、ResultSet接口

在Statement执行SQL语句时,如果是SELET语句会返回结果集,结果集通过接口 java.sql.ResultSet描述的,它提供了逐行访问结果集的方法,通过该方法能够访问结果集中不同 字段的内容。
ResultSet最常用的方法介绍如下:

  • close():关闭结果集对象。
  • isClosed():判断结果集对象是否已经关闭。
  • next():将结果集的光标从当前位置向后移一行。
  • getString():获得在数据库里是CHAR 或 VARCHAR等字符串类型的数据,返回值类型是 String。
  • getFloat():获得在数据库里是浮点类型的数据,返回值类型是float。
  • getDouble():获得在数据库里是浮点类型的数据,返回值类型是double。
  • getDate():获得在数据库里是日期类型的数据,返回值类型是java.sql.Date
  • getBoolean():获得在数据库里是布尔数据的类型,返回值类型是boolean。
  • getBlob():获得在数据库里是Blob(二进制大型对象)类型的数据,返回值类型是Blob类 型。
  • getClob():获得在数据库里是Clob(字符串大型对象)类型的数据,返回值类型是Clob。

这些方法要求有列名或者列索引,如getString()方法的两种情况:

public String getString(int columnlndex) throws SQLException 
//可以填列名也可以填列索引
public String getString(String columnName) throws SQLException

注意:columnlndex列索引是从1开始的,而不是从0开始的。这个顺序与select语句有关,如 果select使用*返回所有字段,如select * from user语句,那么列索引是数据表中字段的顺 序;如果select指定具体字段,如select userid, name from user或select name,userid from user, 那么列索引是select指定字段的顺序。

ResultSet示例代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * @author : 蔡政洁
 * @email :[email protected]
 * @date : 2020/3/2
 * @time : 1:04 下午
 */
public class HelloWorld {
    public static void main(String[] args) {
//        加载驱动程序
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("驱动程序加载成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("驱动程序加载失败");
            return;
        }

        String url = "jdbc:mysql://localhost:3306/JAVA";

        Properties info = new Properties();
        try {
//            获得config.properties配置文件的输入流对象,需要自己创建在src文件里
            InputStream inputStream = 数据库编程.建立数据库连接.HelloWorld.class.getClassLoader().getResourceAsStream("config.properties");
//            从流中加载信息到properties对象中
            info.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
//这里采用自动资源管理系统
        try (Connection conn = DriverManager.getConnection(url,info);
             Statement stmt = conn.createStatement();
             ResultSet rst = stmt.executeQuery("select * from xinxi_tb")
        ){
            System.out.println("数据库连接成功"+conn);
            while (rst.next()){
//                这里指列的索引,查找的列,从1开始索引
                System.out.printf("id:%d ,name:%s, age:%d\n", rst.getInt(1),rst.getString("name"),rst.getInt(3));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

config.properties文件:

user=root
password=199911
useSSL=false
verifyServerCertificate=false

运行结果:

驱动程序加载成功
数据库连接成功com.mysql.cj.jdbc.ConnectionImpl@7ca48474
id:1 ,name:aaa, age:21
id:2 ,name:bbb, age:32
id:4 ,name:ccc, age:43
id:5 ,name:ddd, age:56
id:6 ,name:eee, age:49

以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!

发布了93 篇原创文章 · 获赞 10 · 访问量 5203

猜你喜欢

转载自blog.csdn.net/weixin_45366499/article/details/104621278