1、概念
Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句(用于执行静态 SQL 语句并返回它所生成结果的对象。
jdbc示例
10 public class javaTest {
11
12 public static void main(String[] args) throws ClassNotFoundException, SQLException {
13 String URL="jdbc:mysql://127.0.0.1:3306/imooc?useUnicode=true&characterEncoding=utf-8";
14 String USER="root";
15 String PASSWORD="tiger";
16 //1.加载驱动程序
17 Class.forName("com.mysql.jdbc.Driver");
18 //2.获得数据库链接
19 Connection conn=DriverManager.getConnection(URL, USER, PASSWORD);
20 //3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
21 Statement st=conn.createStatement();
22 ResultSet rs=st.executeQuery("select * from user");
23 //4.处理数据库的返回结果(使用ResultSet类)
24 while(rs.next()){
25 System.out.println(rs.getString("user_name")+" "
26 +rs.getString("user_password"));
27 }
28
29 //关闭资源
30 rs.close();
31 st.close();
32 conn.close();
33 }
34 }
2、常用方法
-
-
Modifier and Type Method and Description void
addBatch(String sql)
将给定的SQL命令的命令的当前列表这Statement
对象。void
cancel()
如果取消这Statement
对象数据库和驱动支持中止一个SQL语句。void
clearBatch()
把这Statement
SQL命令对象的当前列表。void
clearWarnings()
清除所有的警告报道这Statement
对象。void
close()
此次发布的Statement
对象的数据库和JDBC资源,而不是等待这种情况发生时,它立刻自动关闭。void
closeOnCompletion()
指定该Statement
将会关闭所有依赖于它的结果集是封闭的。boolean
execute(String sql)
执行给定的SQL语句,可以返回多个结果。boolean
execute(String sql, int autoGeneratedKeys)
执行给定的SQL语句,可以返回多个结果,和信号的驱动程序,任何自动生成的键应提供检索。boolean
execute(String sql, int[] columnIndexes)
执行给定的SQL语句,可以返回多个结果,和信号驱动程序,自动生成给定阵列应提供检索显示键。boolean
execute(String sql, String[] columnNames)
执行给定的SQL语句,可以返回多个结果,和信号驱动程序,自动生成给定阵列应提供检索显示键。int[]
executeBatch()
向数据库提交一个命令到执行,如果所有的命令都成功执行,则返回一个更新计数的数组。default long[]
executeLargeBatch()
向数据库提交一个命令到执行,如果所有的命令都成功执行,则返回一个更新计数的数组。default long
executeLargeUpdate(String sql)
执行给定的SQL语句,这可能是一个INSERT
,UPDATE
,或DELETE
语句或SQL语句不返回值,例如SQL DDL语句。default long
executeLargeUpdate(String sql, int autoGeneratedKeys)
执行给定的SQL语句和信号与给定的标志是否自动生成的Statement
物体产生的钥匙应提供检索的司机。default long
executeLargeUpdate(String sql, int[] columnIndexes)
执行给定的SQL语句和信号驱动程序,自动生成给定阵列应提供检索显示键。default long
executeLargeUpdate(String sql, String[] columnNames)
执行给定的SQL语句和信号驱动程序,自动生成给定阵列应提供检索显示键。ResultSet
executeQuery(String sql)
执行给定的SQL语句,返回一个ResultSet
对象。int
executeUpdate(String sql)
执行给定的SQL语句,这可能是一个INSERT
,UPDATE
,或DELETE
语句或SQL语句不返回值,例如SQL DDL语句。int
executeUpdate(String sql, int autoGeneratedKeys)
执行给定的SQL语句和信号与给定的标志是否自动生成的Statement
物体产生的钥匙应提供检索的司机。int
executeUpdate(String sql, int[] columnIndexes)
执行给定的SQL语句和信号驱动程序,自动生成给定阵列应提供检索显示键。int
executeUpdate(String sql, String[] columnNames)
执行给定的SQL语句和信号驱动程序,自动生成给定阵列应提供检索显示键。Connection
getConnection()
产生这一Statement
检索对象的Connection
对象。int
getFetchDirection()
从数据库表中检索,结果默认从这个Statement
对象生成集取行的方向。int
getFetchSize()
检索结果集的行,是默认取ResultSet
对象从这Statement
对象生成的数。ResultSet
getGeneratedKeys()
检索任何自动生成的创建作为一个结果,执行这Statement
对象键。default long
getLargeMaxRows()
检索,ResultSet
对象的Statement
对象可以包含的最大行数。default long
getLargeUpdateCount()
检索当前结果为更新计数;如果结果是ResultSet
对象或没有结果,返回- 1。int
getMaxFieldSize()
检索字节可以返回字符和二进制在ResultSet
对象的Statement
物体产生的列值的最大数量。int
getMaxRows()
检索,ResultSet
对象的Statement
对象可以包含的最大行数。boolean
getMoreResults()
这Statement
移动对象的下一个结果,返回true
如果是ResultSet
对象,和隐式关闭任何电流ResultSet
对象(S)的方法得到的getResultSet
。boolean
getMoreResults(int current)
这Statement
移动对象的下一个结果,与任何现有的ResultSet
交易对象(S)根据给定的标志指定的指令,并返回true
如果接下来的结果是一个ResultSet
对象。int
getQueryTimeout()
检索数秒,司机将等待Statement
对象执行。ResultSet
getResultSet()
检索当前结果作为一个ResultSet
对象。int
getResultSetConcurrency()
检索对象的ResultSet
Statement
对象生成的结果集的并发。int
getResultSetHoldability()
检索对象的ResultSet
Statement
对象生成的结果集的保持性。int
getResultSetType()
检索对象的ResultSet
Statement
对象生成的结果集的类型。int
getUpdateCount()
检索当前结果为更新计数;如果结果是ResultSet
对象或没有结果,返回- 1。SQLWarning
getWarnings()
获取第一个警告,这Statement
对象调用的报道。boolean
isClosed()
这是否Statement
检索对象已关闭。boolean
isCloseOnCompletion()
返回一个值,指示此Statement
将会关闭所有依赖于它的结果集是封闭的。boolean
isPoolable()
返回一个值,指示是否Statement
是poolable或不。void
setCursorName(String name)
设置SQL游标到给定的String
,这将在后续的Statement
对象execute
方法。void
setEscapeProcessing(boolean enable)
设置或关闭的逃避处理。void
setFetchDirection(int direction)
给司机一个提示的方向,行将在ResultSet
处理对象的使用这个Statement
对象创建。void
setFetchSize(int rows)
给JDBC驱动程序提示的行数,应该从数据库中取出的时候,更多的行为ResultSet
对象的生成需要Statement
。default void
setLargeMaxRows(long max)
设置该对象的任何ResultSet
Statement
对象生成可以包含一定数量的最大行数限制。void
setMaxFieldSize(int max)
字节集可以返回字符和二进制在ResultSet
对象的对象产生Statement
列值的最大数量的限制。void
setMaxRows(int max)
设置该对象的任何ResultSet
Statement
对象生成可以包含一定数量的最大行数限制。void
setPoolable(boolean poolable)
要求一个Statement
被合并或不合并。void
setQueryTimeout(int seconds)
集数秒,司机将等待Statement
对象执行给定的秒数。
-
在JDBC应用中,应该尽可能的以PreparedStatement代替Statement,而不是用一味的使用Statement,下面从三个方面分析原因:代码的可读性和可维护性(第一个方面),虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次:
- 可读性好
stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");
perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
perstmt.setString(1,var1);
perstmt.setString(2,var2);
perstmt.setString(3,var3);
perstmt.setString(4,var4);
perstmt.executeUpdate();
- 性能提升
PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,执行速度要快于 Statement 对象。