JDBC学习-Statement

来源:互联网 发布:javascript 表格并排放 编辑:程序博客网 时间:2024/06/02 13:33

简介

Statement对象用来执行一条SQL语句并且返回产生的结果集。

默认状态下,一个statement对象在同一时刻只能开启一个结果集。因此,如果对不同结果集的读取交织在一起,那么每一个读取必须由不同的statement对象组成。所有Statement接口的执行方法暗中会关闭当前statement的结果集对象(如果存在一个开启的结果集)。

创建Statement对象

可以通过Connection对象的createStatement来得到一个statement对象

Statement stmt = conn.createStatement();

创建了一个向数据库发送SQL语句的Statement对象。不带参数的SQL语句通常使用Statement对象来执行。如果相同的SQL语句会被执行若干次的话,使用PreparedStatement对象会更有效率。

使用返回的Statement对象创建的结果集合默认是TYPE_FORWARD_ONLY类型,并且具有CONCUR_READ_ONLY的并发级别。创建的结果集的可保存性可以通过调用getHoldability()来决定。

调用执行方法SQL语句方法:



executeQuery:

语法:ResultSet executeQuery(String sql):

说明:执行给定的SQL语句,返回单一的结果集。只能进行查询操作,不能执行操作语句。否则会报异常“java.sql.SQLException: Can not issue data manipulation statements with executeQuery().”

参数说明:String sql:用于查询的SQL语句

返回:查询结果集

示例:

ResultSet rs = stmt.executeQuery(" SELECT * FROM user ");while(rs.next()) {System.out.println(rs.getString("name"));}

如果要传递参数,则必须手动拼接字符串

例如

String sql = " SELECT * FROM user WHERE name='" + name = "'";ResultSet rs = stmt.executeQuery(sql);



executeUpdate

语法:int executeUpdate(sql);

说明:执行给定的SQL语句,可以是INSERT、UPDATE、DELETE语句或者什么也不返回的语句,例如SQL DDL语句

这个方法不能够被PreparedStatement或者CallableStatement对象调用

返回:受影响的行数或者或者0(什么也不返回的语句)

例如:

String sql = " INSERT INTO user(name) VALUES('sy') ";int count = stmt.executeUpdate(sql);

语法:int executeUpdate(String sql,int autoGeneratedKeys)

执行给定的SQL语句,并且指定是否将生成的主键绑定到该Statement对象。如果不是INSERT的SQL语句或者不是返回主键的SQL语句,那么驱动将会忽略flag标志。


autoGeneratedKeys:代表是否返回主键的标志,可从以下2个值中二选一

1、Statement.RETURN_GENERATED_KEYS,表示把主键绑定到statement对象

2、Statement.NO_GENERATED_KEYS,表示不把主键绑定到statement对象

示例:

<span style="font-size: 14px;">String sql = " INSERT INTO user(name) VALUES('sy') ";stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);ResultSet rs = stmt.getGeneratedKeys();if (rs.next()) {System.out.println(rs.getInt(1));}</span>

其中如果flag赋值Statement.NO_GENERATED_KEYS或者只调用stmt.executeUpdate(sql)方法,将不会得到主键值,取而代之会报异常Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().







0 0
原创粉丝点击