执行SQL语句对象
📄字数 2.2K
👁️阅读量 加载中...
Statement
Statement对象用于执行静态SQL语句并返回其生成的结果的对象
Statement对象通过Connection类的createStatement()方法创建。
java
//创建执行SQL语句对象Statement
Statement stm = conn.createStatement();
PreparedStatement
PreparedStatement对象使用时,数据库系统对执行SQL语句进行预编译处理,预编译SQL语句将在未来的使用中被重用。与 Statement对象相比,PreparedStatement对象操作多条SQL语句的效率更高。
经过预编译并存储在PreparedStatement对象中的SQL语句,通过Connection类的prepareStatement()方法创建。
java
//创建执行预编译SQL语句对象PreparedStatement
PreparedStatement preStatement = conn.prepareStatement("预编译SQL语句");
预处理PreparedStatement对象相对于静态Statement对象的优势:
- PreparedStatement可以动态传入参数值
- PreparedStatement比Statement更快 PreparedStatement会将SQL语句预编译在数据库系统中,执行计划同样会被缓存起来,它允许数据库做参数化查询。使用预处理语句比普通的Statement查询更快,因做的工作更少(数据库对 SQL 语句的分析、编译、优化已经在第一次查询前完成了)
- PreparedStatement可以防止SQL注入式攻击 PreparedStatement在使用参数化查询的情况下,数据库系统不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有破坏性的指令,也不会被数据库所运行。
CallableStatement
CallableStatement对象实现了从Java应用程序中调用数据库存储过程。但此调用过程并不包含存储过程本身,因为存储过程存储在数据库中。
CallableStatement对象为所有的数据库提供了一种以标准形式调用存储过程的方法,通过Connection类的prepareCall()方法创建。
java
//创建执行存储过程对象CallableStatement
CallableStatement cstmt= conn.prepareCall("{call 存储过程名(参数表列)}");
执行SQL语句对象属性扩充
在创建执行SQL语句对象时,可通过构造方法的不同参数设置ResultSet对象属性,属性包括:
类型 | 属性 | 描述 |
---|---|---|
结果类型 | ResultSetType | 默认为ResultSet.TYPE_SCROLL_INSENSITIVE:支持结果集 backforward、last、first 等操作,对数据库中其它 session 进行的数据更改不敏感 |
结果集并发类型 | ResultSetConcurrency | 默认为ResultSet.CONCUR_READ_ONLY: 不可更新结果集;该属性亦可更改为 ResultSet.CONCUR_UPDATABLE,支持在ResultSet中对记录进行修改,修改后记录更新到数据库,修改操作可包含插入、删除或更新。 |
结果集持久类型 | ResultSetHoldability | 默认为ResultSet.HOLD_CURSORS_OVER_COMMIT: 在事务commit或rollback后,ResultSet仍然可用。 |
Connection类创建Statement对象构造方法:
java
//Statement对象扩展结果类型、结果集并发类型构造方法
createStatement(int resultSetType,int resultSetConcurrency);
//Statement对象扩展结果类型、结果集并发类型、结果集持久类型构造方法
createStatement(int resultSetType,int resultSetConcurrency, int resultSetHoldability);
Connection类创建PreparedStatement对象构造方法:
java
//PreparedStatement对象扩展结果类型、结果集并发类型构造方法
prepareStatement(String sql, int resultSetType,int resultSetConcurrency);
//PrepareStatment对象扩展结果类型、结果集并发类型、结果集持久类型构造方法
prepareStatement(String sql, int resultSetType,int resultSetConcurrency, int resultSetHoldability);
Connection类创建CallableStatement对象构造方法:
java
//CallableStatement对象扩展结果类型、结果集并发类型构造方法
prepareCall(String sql, int resultSetType,int resultSetConcurrency);
//CallableStatement对象扩展结果类型、结果集并发类型、结果集持久类型构造方法
prepareCall(String sql, int resultSetType,int resultSetConcurrency, int resultSetHoldability);