数据库 JDBC:Statement 查询
本文基于PostgreSQL创建一个shop数据库,
再创建一个Product表插入一些数据,为后面JDBC的Statement执行创建数据:
下面可以开始创建JDBC连接,然后执行查询语句。
上述代码,在断开连接阶段,若不断开连接,可能会引起内存泄漏(memory leak)问题,虽然Java的垃圾回收功能可以自动释放掉无用连接以及对象占用的内存,防止发生内存不足的问题,但是,该功能还是无法百分之百地防止内存泄漏,所以显式地通过编码断开连接很重要。
JDBC提供了三种Statement接口来执行SQL语句,分别是executeQuery、executeUpdate、execute,在实际的使用中使用哪种方法取决于SQL语句生成的内容。
查询单个结果集
executeQuery
用于产生单个结果集(ResultSet)的语句,例如常见的SELECT语句。
查看结果集
ResultSet接口中含有几十种从当前行获取数据的方法,每个可能的数据类型都有一个 get 方法,并且每个 get 方法需要列名和列索引两个版本,假设数据列包含int类型,ResultSet可以调用getInt()方法:
例如,实现查询Product表中sale_price列的值。
光标移动
在实际执行过程中,我们也可以移动光标的位置实现对查看不同行的结果,ResultSet也提供了一系列移动光标的位置的相关接口。
假设我们将光标位置移动到最后一行,查询改行的数据,之后再实现对所有的sale_price列数据的查询。
执行的结果如下:
更新结果集
ResultSet 接口包含了一系列不同数据类型的更新方法,该方法用于更新结果集中的数据,有需要列名和需要列索引的两种更新方法来更新任一数据类型,以int类型为例:
更新结果集中的行将改变当前行的列中的 ResultSet 对象,而不是基础数据库中的数据。要更新数据库中一行的数据,你需要调用以下的任一方法-
现在,假设实现将第三行的sale_price的值更新为1800,并查新更改后的值,相关实现如下:
执行结果为:
修改零或多行中的一列或多列
executeUpdate
的返回值是一个整数,指示受影响的行数(即更新计数)。用于执行 INSERT、UPDATE 或 DELETE 语句以及DDL语句,例如 CREATE TABLE 和 DROP TABLE等不操作行语句,返回值总为0;
INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。
例如,向Product表中最后一行插入数据,并进行查询。
执行结果:
通用执行语句
execute
方法可用于执行任何SQL语句,并返回一个boolean
值,表明执行该SQL语句是否返回了ResultSet。如果执行后第一个结果是ResultSet,则返回true,否则返回false。通常使用executeQuery或executeUpdate就可以,如果不清楚SQL语句的类型时,可以使用便可以使用execute方法来执行该SQL语句,使用示例如下:
执行结果:
参考资料
版权声明: 本文为 InfoQ 作者【大规模数据处理学习者】的原创文章。
原文链接:【http://xie.infoq.cn/article/327db6b69c43fbf556f2e6258】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论