博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JDBC4.2】三、Statements
阅读量:4290 次
发布时间:2019-05-27

本文共 2365 字,大约阅读时间需要 7 分钟。

数据库localhost:3306

DBname: test
表:student
这里写图片描述


本编博客包括Statement接口,以及它的子接口PreparedStatement和CallableStatement

Statement接口

Statement的获取

public class StatementTest {    public static void main(String[] args) throws SQLException {        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC",                                                             "root", "123456");        Statement statement = connection.createStatement();    }}

Statement的执行方法

如果是SQL查询语句,使用executeQuery()方法,返回一个ResultSet对象。

如果是DDL语句,修改性质的DML语句,使用executeUpdate(),返回修改的行数。
如果SQL语句未知,则使用execute()方法。

SQL语句类型 备注 Statement方法
查询语句 SELECT executeQuery
修改语句 INSERT、UPDATE或DELETE以及SQL DDL语句 executeUpdate
返回多个ResultSet或多个UpdateCount或二者组合 存储过程或未知SQL execute

executeQuery方法

用法如下:

//...获取statement省略...ResultSet resultSet = statement.executeQuery("SELECT id,name,age FROM student");while (resultSet.next()){   //todo ...}

如果executeQuery执行的Sql没有返回一个ResultSet 对象,比如statement.executeQuery("INSERT INTO student('ABC123','Jack',12)");,则会抛出SQLException

executeUpdate方法

int rows1 = statement.executeUpdate("UPDATE student SET age=17 WHERE name='Li'");int rows2 = statement.executeUpdate("DELETE FROM student WHERE name='Sam'");//...

如果executeUpdate返回一个ResultSet 对象,则会抛出SQLException

execute方法

execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。当执行某个已存储过程或动态执行未知 SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况。

某些驱动可能不支持多个ResultSet,可以使用Connection#getMetaData()#supportsMultipleResultSets()查看是否支持。

关闭Statement

关闭Connection虽然会关闭它创建的所有Statement,但是一个良好的编程习惯是手动关闭Statement

关闭Statement则不会关闭它创建的ResultSet所持有的资源(ResultSet会关闭),直到GC。
最好的做法是依次关闭ResultSet,Statement,Connection

resultSet.close();statement.close();connection.close();//完美!

PreparedStatement

PreparedStatement继承自Statement,具有设置SQL参数的能力。SQL语句能够被预编译,并且使用多次。它可以在SQL语句中使用“?”代替参数,执行的时候再指定。

创建一个PreparedStatement,并设置参数

String sql= "insert into student(id,name,age) values(?,?,?)"; ps=conn.prepareStatement(sql);ps.setString(1, "1234ABCD"); ps.setString(2, "Mary"); ps.setInt(3, 13);

使用setObject

ps.setObject(1,21,java.sql.Types.SHORT)//转换为SHORTps.setObject(1,21)//转换为默认的java.sql.Types.INTEGER

设置NULL参数

ps.setNull(2,java.sql.Types.VARCHAR)//设置varchar类型的参数威null

输出和输入数据描述

使用prepareStatement#getMetaData获取输出信息

使用prepareStatement#getParameterMetaData获取参数信息

CallableStatement

CallableStatement继承自PreparedStatement,用来执行存储过程并获取结果。

你可能感兴趣的文章
HttpClient详解(一)
查看>>
httpclient 请求http数据,json转map
查看>>
git 常用命令
查看>>
用递归方法建立二叉树
查看>>
用递归方法对二叉树进行先序、中序和后序遍历
查看>>
翻转二叉树
查看>>
逆序链表
查看>>
epoll 使用详解
查看>>
stl 中 set容器用法
查看>>
有序数组求交集
查看>>
文字常量区与栈
查看>>
非阻塞connect 编写方法
查看>>
epoll 边沿触发
查看>>
String类 默认生成的函数
查看>>
Linux 软连接与硬链接
查看>>
视音频数据处理入门:H.264视频码流解析
查看>>
视音频数据处理入门:AAC音频码流解析
查看>>
视音频数据处理入门:UDP-RTP协议解析
查看>>
视音频数据处理入门:FLV封装格式解析
查看>>
最简单的基于FFMPEG的封装格式转换器(无编解码)
查看>>