这里介绍一下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 :caizhengjie888@icloud.com
* @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
以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!