关于JDBC(二)--- 执行SQL语句
2012-11-14 23:32
183 查看
上一篇我们得到Connection对象conn,之后我们可以用conn生成一个Statement对象来执行SQL语句。
Statement stat = conn.createStatement();
Statement接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute,使用哪一个方法由 SQL 语句所产生的内容决定。
方法executeQuery
用于产生单个结果集的语句,例如 SELECT 语句。 这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。
方法executeUpdate
用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP
TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
方法execute:
可以执行任意的SQL语句,返回多个结果集、多个更新计数或二者组合,此方法通常只用于用户提供的交互式查询。(先放一放,还没用到)
executeQuery方法返回一个结果集ResultSet对象,
ResultSet
rs = stat.executeQuery(sql);
ResultSet类的迭代方法与java.util.Iterator接口稍有不同。对于ResultSet类,迭代器初始化时被设定在第一行之前的位置,必须调用next方法将它移动到第一行。另外,它没有hasNext方法,我们需要不断的调用next,直至该方法返回false。
对于返回的数据行,不同的数据类型有不同的访问器,每个访问器都有两种形式,一种接受数字参数,是指数字参数所对应的列;(与数组的索引不同,数据库的列序号是从1开始计算的)另一种使用字符串参数,是指结果集中以该字符串为列名的列。(列名是SQL的AS字句中指定的名,在没有使用AS时,它就是列名)使用数字参数效率更高一些,但是使用字符串参数可以使代码易于阅读和维护。
当get方法的类型和列的数据类型不一致时,每个get方法都会进行合理的类型装换。
每个Connection对象都可以创建一个或一个以上的Statement对象。同一个Statement对象可以用于多个不相关的命令和查询。但是,一个Statement对象最多只能打开一个结果集。如果要执行多个查询操作,且需要同时分析查询结果,那么就必须创建多个Statement对象。但实际上,我们通常并不需要同时处理多个结果集,如果结果集相互关联,我们就可以使用组合查询,这样就需要分析一个结果。对数据库使用组合查询比用java程序遍历多个结果集要高效率的多。
当使用完ResultSet、Statement和Connection对象时,应立即调用close方法。这些对象都使用了规模较大的数据结构,所以我们不应该等垃圾回收器来处理它们。关闭的原则,后打开的先关闭。(我们可以使用try/finally块关闭连接,而使用一个单独的try/catch块处理异常,分割try程序块可以提高代码的可读性和可维护性)
Statement stat = conn.createStatement();
Statement接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute,使用哪一个方法由 SQL 语句所产生的内容决定。
方法executeQuery
用于产生单个结果集的语句,例如 SELECT 语句。 这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。
方法executeUpdate
用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP
TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
方法execute:
可以执行任意的SQL语句,返回多个结果集、多个更新计数或二者组合,此方法通常只用于用户提供的交互式查询。(先放一放,还没用到)
executeQuery方法返回一个结果集ResultSet对象,
ResultSet
rs = stat.executeQuery(sql);
ResultSet类的迭代方法与java.util.Iterator接口稍有不同。对于ResultSet类,迭代器初始化时被设定在第一行之前的位置,必须调用next方法将它移动到第一行。另外,它没有hasNext方法,我们需要不断的调用next,直至该方法返回false。
对于返回的数据行,不同的数据类型有不同的访问器,每个访问器都有两种形式,一种接受数字参数,是指数字参数所对应的列;(与数组的索引不同,数据库的列序号是从1开始计算的)另一种使用字符串参数,是指结果集中以该字符串为列名的列。(列名是SQL的AS字句中指定的名,在没有使用AS时,它就是列名)使用数字参数效率更高一些,但是使用字符串参数可以使代码易于阅读和维护。
当get方法的类型和列的数据类型不一致时,每个get方法都会进行合理的类型装换。
每个Connection对象都可以创建一个或一个以上的Statement对象。同一个Statement对象可以用于多个不相关的命令和查询。但是,一个Statement对象最多只能打开一个结果集。如果要执行多个查询操作,且需要同时分析查询结果,那么就必须创建多个Statement对象。但实际上,我们通常并不需要同时处理多个结果集,如果结果集相互关联,我们就可以使用组合查询,这样就需要分析一个结果。对数据库使用组合查询比用java程序遍历多个结果集要高效率的多。
当使用完ResultSet、Statement和Connection对象时,应立即调用close方法。这些对象都使用了规模较大的数据结构,所以我们不应该等垃圾回收器来处理它们。关闭的原则,后打开的先关闭。(我们可以使用try/finally块关闭连接,而使用一个单独的try/catch块处理异常,分割try程序块可以提高代码的可读性和可维护性)
相关文章推荐
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题 .
- weblogic hibernate关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题(www.50xiao.com)
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题
- 使用MyBatis一次执行多条SQL语句,需要配置jdbc连接串
- 关于oracle 12c SQL语句执行结果与11g不一致的问题
- 关于Hibernate获取JDBC连接 直接执行SQL - 客观,辩证,务实,创新 - JavaEye技术网站
- 关于sql条件语句where id in (@参数)执行报错问题(转换成数据类型 int 时失败)(
- 关于Hibernate获取JDBC连接 直接执行SQL
- JDBC执行SQL语句
- 关于PHP执行SQL语句乱码的解决办法-5DZ.IN
- Jmeter JDBC request执行多条sql语句
- 关于sqlmap执行sql语句 二,关于sqlmap执行语句的前后台相关参数的传递
- JDBC之数据库的连接与简单的sql语句执行
- 关于 sql server 客户端执行多条sql语句事务的问题
- 关于在delphi中通过tquery执行带冒号\":\"的sql语句
- 开发中遇到的一个关于 SQL 语句执行的问题
- CDatabase类和CRecordset类关于执行Sql语句的用法区别