本文主要是介绍【JDBC4.2】三、Statements,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
数据库localhost:3306
DBname: test
表:student
本编博客包括Statement接口,以及它的子接口PreparedStatement和CallableStatement
Statement接口
Statement的获取
public class StatementTest {public static void main(String[] args) throws SQLException {Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC", "root", "123456");Statement statement = connection.createStatement();}
}
Statement的执行方法
如果是SQL查询语句,使用executeQuery()方法,返回一个ResultSet对象。
如果是DDL语句,修改性质的DML语句,使用executeUpdate(),返回修改的行数。
如果SQL语句未知,则使用execute()方法。
SQL语句类型 | 备注 | Statement方法 |
---|---|---|
查询语句 | SELECT | executeQuery |
修改语句 | INSERT、UPDATE或DELETE以及SQL DDL语句 | executeUpdate |
返回多个ResultSet或多个UpdateCount或二者组合 | 存储过程或未知SQL | execute |
executeQuery方法
用法如下:
//...获取statement省略...ResultSet resultSet = statement.executeQuery("SELECT id,name,age FROM student");while (resultSet.next()){//todo ...
}
如果executeQuery执行的Sql没有返回一个ResultSet 对象,比如statement.executeQuery("INSERT INTO student('ABC123','Jack',12)");
,则会抛出SQLException
executeUpdate方法
int rows1 = statement.executeUpdate("UPDATE student SET age=17 WHERE name='Li'");
int rows2 = statement.executeUpdate("DELETE FROM student WHERE name='Sam'");
//...
如果executeUpdate返回一个ResultSet 对象,则会抛出SQLException
execute方法
execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。当执行某个已存储过程或动态执行未知 SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况。
某些驱动可能不支持多个ResultSet,可以使用Connection#getMetaData()#supportsMultipleResultSets()查看是否支持。
关闭Statement
关闭Connection虽然会关闭它创建的所有Statement,但是一个良好的编程习惯是手动关闭Statement
关闭Statement则不会关闭它创建的ResultSet所持有的资源(ResultSet会关闭),直到GC。
最好的做法是依次关闭ResultSet,Statement,Connection
resultSet.close();
statement.close();
connection.close();
//完美!
PreparedStatement
PreparedStatement继承自Statement,具有设置SQL参数的能力。SQL语句能够被预编译,并且使用多次。它可以在SQL语句中使用“?”代替参数,执行的时候再指定。
创建一个PreparedStatement,并设置参数
String sql= "insert into student(id,name,age) values(?,?,?)";
ps=conn.prepareStatement(sql);
ps.setString(1, "1234ABCD");
ps.setString(2, "Mary");
ps.setInt(3, 13);
使用setObject
ps.setObject(1,21,java.sql.Types.SHORT)//转换为SHORT
ps.setObject(1,21)//转换为默认的java.sql.Types.INTEGER
设置NULL参数
ps.setNull(2,java.sql.Types.VARCHAR)//设置varchar类型的参数威null
输出和输入数据描述
使用prepareStatement#getMetaData获取输出信息
使用prepareStatement#getParameterMetaData获取参数信息
CallableStatement
CallableStatement继承自PreparedStatement,用来执行存储过程并获取结果。
这篇关于【JDBC4.2】三、Statements的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!