JAVA辅导:JDBC基础教程之语句
摘要
语句对象用于向数据库发送SQL语句。实际上,有三种Statement对象,它们都充当在给定连接上执行SQL语句的包容器:Statement、PreparedStatement(继承自Statement)和CallableStatement(继承自PreparedStatement)。它们都专用于发送特定类型的SQL语句:语句对象用于执行不带参数的简单SQL语句;PreparedStatement对象用于执行带或不带IN参数的预编译SQL语句;CallableStatement对象用于执行对数据库存储过程的调用。
语句接口提供了执行语句和获得结果的基本方法。PreparedStatement接口添加了处理in参数的方法;并且CallableStatement添加了一个处理OUT参数的方法。
1.创建语句对象。
一旦建立了与特定数据库的连接,就可以使用该连接来发送SQL语句。语句对象是用连接的createStatement方法创建的,如下面的代码片段所示:
connection con = driver manager . get connection(URL," sunny "," ");
Statement stmt = con . create Statement();
为了执行语句对象,发送到数据库的SQL语句将作为参数提供给语句的方法:
ResultSet rs = stmt.executeQuery("从表2中选择a,b,c ");
2.使用语句对象执行语句。
语句接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和execute。使用哪种方法取决于SQL语句的内容。
executeQuery方法用于生成单个结果集的语句,如SELECT语句。
executeUpdate方法用于执行INSERT、Update或DELETE语句和SQL DDL(数据定义语言)语句,如CREATE TABLE和DROP TABLE。INSERT、UPDATE或DELETE语句的作用是修改表中零行或多行中的一列或多列。executeUpdate的返回值是一个整数,表示受影响的行数(即更新计数)。对于不操作行的语句,如CREATE TABLE或DROP TABLE,executeUpdate的返回值始终为零。
execute方法用于执行返回多个结果集、多个更新计数或两者组合的语句。因为大多数程序员不需要这个高级特性,所以将在本概述的后面的单独章节中介绍它。
执行该语句的所有方法将关闭被调用语句对象的当前打开的结果集(如果有)。这意味着在重新执行语句对象之前,需要完成当前ResultSet对象的处理。
需要注意的是,prepared Statement接口继承了Statement接口中的所有方法,有自己的executeQuery、executeUpdate和execute方法。语句对象本身不包含SQL语句,因此您必须以SQL语句作为参数提供Statement.execute方法。PreparedStatement对象不提供SQL语句作为这些方法的参数,因为它们已经包含预编译的SQL语句。CallableStatement对象继承这些方法的PreparedStatement形式。对于这些方法的PreparedStatement或CallableStatement版本,使用查询参数将引发SQLException。
3.语句完成。
当连接处于自动提交模式时,在其中执行的语句将在完成时自动提交或恢复。当语句被执行并返回所有结果时,该语句被视为已完成。对于返回结果集的executeQuery方法,当检索到结果集对象的所有行时,语句完成。对于executeUpdate方法,该语句在执行时完成。但是,在调用execute方法的少数情况下,直到检索到该语句生成的所有结果集或更新计数,该语句才完成。
有些DBMS将存储过程中的每个语句都视为一个独立的语句;也有人把整个过程看成一个复合语句。当启用自动提交时,这种差异变得非常重要,因为它会影响何时调用提交方法。在前一种情况下,每份报表单独提交;在后一种情况下,所有报表同时提交。
4.关闭语句对象。
Java垃圾收集器将自动关闭语句对象。作为一种好的编程风格,您应该在不需要语句对象时显式关闭它们。这将立即释放DBMS资源,并有助于避免潜在的内存问题。
5。语句对象中的SQL转义语法
语句可以包含使用SQL转义语法的SQL语句。转义语法告诉驱动程序,其中的代码应该以不同的方式处理。驱动程序将扫描任何转义语法,并将其转换为特定数据库可以理解的代码。这使得转义语法独立于DBMS,并允许程序员使用没有转义语法就无法使用的函数。
转义子句由花括号和关键字定义:
{关键词。。。参数。。。}
该关键字指示转义子句的类型,如下所示。
逃避意味着像逃避性格。
字符“%”和“_”类似于SQL LIKE子句中的通配符(“%”匹配零个或多个字符,而“_”匹配一个字符)。要正确解释它们,应该在它们前面加上反斜杠(" \ "),这是字符串中的特殊转义字符。通过在查询末尾包含以下语法,可以指定用作转义符的字符:
{escape 'escape-character'}
例如,以下查询使用反斜杠字符作为转义字符来查找以下划线开头的标识符名称:
stmt . execute query(" SELECT name FROM Identifiers
WHERE Id LIKE ` \ _ % ' { escape ` \ ' };
Fn代表标量函数
几乎所有的DBMS都有数值、字符串、时间、日期、系统和带标量值的转换函数。要使用这些函数,可以使用以下转义语法:关键字fn,后跟所需的函数名及其参数。例如,下面的代码调用函数concat将两个参数连接在一起:
{fn concat("Hot "," Java ")};
使用以下语法获取当前数据库用户名:
{ fn user()};
DBMS可能支持标量函数,但语法略有不同,但并非所有驱动程序都支持它们。各种DatabaseMetaData方法将列出支持的函数。例如,getNumericFunctions方法返回以逗号分隔的数字函数列表,而getStringFunctions方法返回字符串函数,依此类推。
驱动程序将转义函数调用映射到相应的语法,或者直接实现函数。
d、T和ts代表日期和时间字符。
DBMS用于日期、时间和时间戳文本的语法是不同的。使用JDBC转义子句来支持这些单词语法的ISO标准格式。驱动程序必须将转义子句转换为DBMS表示形式。
位律师回复
0条评论