当前位置:Gxlcms > 数据库问题 > sql语句的进化

sql语句的进化

时间:2021-07-01 10:21:17 帮助过:3人阅读

创建Statement对象 2 Statement sm=conn.createStatement(); 3 4 执行数据查询语句(select) 5 sm.executeQuery(sql); 6 7 执行数据更新语句(delete、update、insert、drop等) 8 sm.executeUpdate(sql);

2)prepatedStatement

 1 创建PreparedStatement对象
 2 String sql="INSERT INTO user (id,name) VALUES (?,?)";
 3 PreparedStatement ps=conn.prepareStatement(sql);
 4 ps.setInt(1,1);
 5 ps.setString(2,"admin");
 6 
 7 执行数据查询语句
 8 ResultSet rs=ps.executeQuery();
 9 
10 执行数据更新语句
11 int c=ps.executeUpdate();

PreparedStatement与Statement比较

  • 使用PreparedStatement,代码的可读性和可维护性比Statement高
  • Statement不安全,PreparedStatement比较安全,能有效解决Sql注入的问题。
  • PreparedStatement能最大可能提高性能。

     DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。 在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配,没有缓存语句的意义。事实是没有数据库会对普通语句编译后的执行代码缓存。这样每执行一次都要对传入的语句编译一次。

 

3)CallableStatement

当不直接使用SQL语句,而是调用数据库中的存储过程时,要用到Callable Statement.

CallableStatement从PreparedStatement继承。

创建CallableStatement对象
String sql="{call insert_users(?,?)}";
调用存储过程 CallableStatement st
=conn.prepareCall(sql); st.setInt(1,1); st.setString(2,"admin"); 执行 st.execute();

 

5.处理执行结果

查询语句,返回记录集ResultSet

更新语句,返回数字,表示该更新影响的记录数。

 

ResultSet对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet接口由数据库厂商实现。

ResultSet对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过ResultSet对象的next()方法移动到下一行。

ResultSet接口常用的方法:

next():将游标往后移动一行,如果成功返回true;否则返回false。

getXXX(String name):返回当前游标下某个字段的值。

 

6.JDBC事务处理

在JDBC中,事务默认是自动提交的,每次执行一个SQL语句时,如果执行成功,就会向数据库自己提交,而不能回滚。

为了让多个SQL语句作为一个事物执行,需调用Connection对象的setAutoCommit(false);以取消自动提交事务:conn.setAutoCommit

 

sql语句的进化

标签:

人气教程排行