当前位置:Gxlcms > 数据库问题 > dbcp连接池的一些方法

dbcp连接池的一些方法

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

  1. // 简写版: <br>Connection conn =<span style="color: #0000ff">null</span><span style="color: #000000">;
  2. Statement st </span>=<span style="color: #0000ff">null</span><span style="color: #000000">;
  3. conn </span>=<span style="color: #000000"> DBCP.getConnection();
  4. st</span>=conn.createStatement();

 

1.批处理 addBatch()

  可以将多个操作数据库的字符串集中处理

    String sql1="select ..... ";

    String sql2="select ..... ";

    ..............

    st.addBatch(sql1);

    st.addBatch(sql2);

    ..............

    st.executeBatch(); //集中处理

    st.clearBatch();// 最好及时清理,否则字符串仍留在addBatch里面

2.事物管理 setAutoCommit(boolean);

  某些逻辑必须在一个是事务完成:通过事务管理可以让多个逻辑在一个事务完成。

  事物特性: ACID

    Atomicty 原子性:事务必须是原子工作单元,数据的修改要么完全执行,要么全都不执行。

     Consistency 一致性: 事务完成时,必须所有数据都保持一致的状态。

    Isolation 隔离性 :由并发事务所作修改必须与其他并发事务所作修改隔离。
     Durability 持久性: 事务完成后,它对系统的影响是永久性的。

  conn.setAutoCommit( false ); //关闭自动提交,默认是true

    st.executeUpdate(sql1);

    st.executeUpdate(sql2);

      conn.commit(); //手动提交,作用是操作sql1和sql2都执行,或者都不执行

3.preparedStatement :预编译的,可以有效防止注入式攻击

  String sql="select * from emp_xx where ename = upper(?) and sal > ?";

    Connection conn=DBCP.getConnection();
    PreparedStatement p=conn.prepareStatement(sql);
    p.setString(1, "scott");
    p.setDouble(2, 1000.0);
    ResultSet rs=p.executeQuery();

4.结果集

  1. <span style="color: #000000">@Test
  2. </span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> test8(){
  3. String sql </span>="select * from emp_xx"<span style="color: #000000">;
  4. Connection conn</span>=<span style="color: #0000ff">null</span><span style="color: #000000">;
  5. ResultSet rs</span>=<span style="color: #0000ff">null</span><span style="color: #000000">;
  6. </span><span style="color: #0000ff">try</span><span style="color: #000000"> {
  7. conn</span>=<span style="color: #000000">DBCP.getConnection();
  8. PreparedStatement ps </span>=<span style="color: #000000"> conn.prepareStatement(sql);
  9. rs</span>=<span style="color: #000000">ps.executeQuery();
  10. ResultSetMetaData meta </span>=rs.getMetaData(); <span style="color: #008000">//</span><span style="color: #008000">获取元数据集</span>
  11. <span style="color: #0000ff">int</span> number= meta.getColumnCount();<span style="color: #008000">//</span><span style="color: #008000">获取结果集里的列的数量</span>
  12. System.out.println(meta.getColumnTypeName(1));<span style="color: #008000">//</span><span style="color: #008000">获取某一列的类型 列的序号从1开始数</span>
  13. <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 1; i <=number; i++<span style="color: #000000">) {
  14. String columName</span>=meta.getColumnName(i);<span style="color: #008000">//</span><span style="color: #008000">遍历获取结果集里的所有列名</span>
  15. <span style="color: #000000"> System.out.println(columName);
  16. }
  17. } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (SQLException e) {
  18. </span><span style="color: #008000">//</span><span style="color: #008000"> TODO Auto-generated catch block</span>
  19. <span style="color: #000000"> e.printStackTrace();
  20. }
  21. }</span>

5.可滚动结果集

  1. <span style="color: #000000">@Test
  2. </span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> test9(){
  3. String sql </span>="select ename,sal from emp_xx order by sal"<span style="color: #000000">;
  4. Connection conn</span>=<span style="color: #0000ff">null</span><span style="color: #000000">;
  5. ResultSet rs</span>=<span style="color: #0000ff">null</span><span style="color: #000000">;
  6. </span><span style="color: #0000ff">try</span><span style="color: #000000"> {
  7. conn</span>=<span style="color: #000000">DBCP.getConnection();
  8. </span><span style="color: #008000">//</span><span style="color: #008000">如果要创建可滚动结果集,statement 或者prepareStatement 创建有所不同:
  9. </span><span style="color: #008000">//</span><span style="color: #008000"> Statement stmt = conn.createStatement(type,concurrney);
  10. </span><span style="color: #008000">//</span><span style="color: #008000"> PreparedStatement ps = conn.prepareStatement(sql,type,concurrney);</span>
  11. <span style="color: #008000">/**</span><span style="color: #008000">
  12. * 其中 type 取值:
  13. * TYPE_FORWARD_ONLY: 默认,只能向下读取
  14. * TYPE_SCROLL_INSENSTIVE : 可滚动,不感知数据变化
  15. * TYPE_SCROLL_SENSTIVE :可滚动,感知数据变化
  16. * 其中 concurrency:
  17. * CONCUR_READ_ONLY: 只读,不能更新
  18. * CONCUR_UPDATABLE: 可以更新的结果集
  19. </span><span style="color: #008000">*/</span><span style="color: #000000">
  20. Statement stmt </span>=<span style="color: #000000"> conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
  21. ResultSet.CONCUR_UPDATABLE);
  22. rs</span>=<span style="color: #000000">stmt.executeQuery(sql);
  23. </span><span style="color: #008000">/**</span><span style="color: #008000">
  24. * 移动指针的常用方法 :
  25. * first :指针移动到第一条
  26. * last :指针移动到最后一条
  27. * beforeFirst:
  28. * afterLast:
  29. * isFirst: 判断是否指向第一条
  30. * isLast:是否是最后一条
  31. * isbeforeFirst:
  32. * isafterLast:
  33. * relative :移动到当前指针的相对位置
  34. * next :移动到下一条
  35. * previous:移动到前一条
  36. * absolute:移动到绝对位置
  37. </span><span style="color: #008000">*/</span>
  38. <span style="color: #008000">//</span><span style="color: #008000">更新结果集数据:</span>
  39. rs.absolute(3);<span style="color: #008000">//</span><span style="color: #008000"> 指针移到第3条记录</span>
  40. rs.updateDouble(2, 2000);<span style="color: #008000">//</span><span style="color: #008000">更新第二列数据 变成1555
  41. </span><span style="color: #008000">//</span><span style="color: #008000"> rs.updateRow();</span><span style="color: #008000">//</span><span style="color: #008000">更新数据源数据</span>
  42. <span style="color: #000000"> rs.first();
  43. </span><span style="color: #0000ff">while</span><span style="color: #000000">(rs.next()){
  44. System.out.print(rs.getString(</span>"ename")+" "<span style="color: #000000">);
  45. System.out.println(rs.getString(</span>"sal"<span style="color: #000000">));
  46. }
  47. } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (SQLException e) {
  48. e.printStackTrace();
  49. }</span><span style="color: #0000ff">finally</span><span style="color: #000000"> {
  50. </span><span style="color: #0000ff">if</span>(conn!=<span style="color: #0000ff">null</span><span style="color: #000000">){
  51. </span><span style="color: #0000ff">try</span><span style="color: #000000"> {
  52. conn.close();
  53. } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (SQLException e) {
  54. </span><span style="color: #008000">//</span><span style="color: #008000"> TODO Auto-generated catch block</span>
  55. <span style="color: #000000"> e.printStackTrace();
  56. }
  57. }
  58. }
  59. }</span>

 

dbcp连接池的一些方法

标签:并发   span   逻辑   最好   stat   字符串   try   while   isa   

人气教程排行