從Hibernate中獲得Connection,進行Jdbc操作的注意事項和樣例


從Hibernate中獲得Connection,進行Jdbc操作的注意事項:

一定要進行事務處理,或hibernate事務處理或手工進行事務處理

//===============================================================================

 樣例一:hibernate事務處理

//===============================================================================

public void creatNewTable(String name){
  String sql = "CREATE TABLE " + name + " (oid bigint NOT NULL ,flow_inc_code bigint NULL)";
  Session session = HibernateSessionFactory.getSession();
     Transaction tx = null;
     Connection conn = null;
     Statement stmt = null;
     try{
      tx = session.beginTransaction();
      conn=session.connection();
   stmt=conn.createStatement();
   stmt.execute(sql);
   
   tx.commit(); //使用 Hibernate事務處理邊界
     }
     catch (Exception he){
      tx.rollback();
     }
     finally{
      if (conn != null) {
    try {
     conn.close();
    }
    catch(SQLException sqlex){
     System.err.println(this.getClass().getName() + ".mymethod - 不能關閉數據庫連接: " + sqlex.toString());
    }
   }
      if (stmt != null) {
    try {
     stmt.close();
    }
    catch(SQLException sqlex){
     System.err.println(this.getClass().getName() + ".mymethod - 不能關閉數據庫連接: " + sqlex.toString());
    }
   }
   session.close();
     }
 }

 

//===============================================================================

 樣例二:手工進行事務處理

//===============================================================================

 public String createFormPhyTable(PubTableDef pubTableDef,
   HttpServletRequest request) {
  // 獲得創建表單物理表sql:
  String createTablesql = this
    .createFormPhyTableSql(pubTableDef, request);

  System.out
    .println("DictionaryBOImpl.createFormPhyTable() -->>  創建表單物理表 00000 "
      + "      createTablesql == " + createTablesql);

  //Session session = HibernateSessionFactory.getSession();
    // Transaction tx = null;
     Connection conn = null;
     Statement stmt = null;
  
  try {
   //tx = session.beginTransaction();
      //conn=session.connection();
   
    // conn = new JdbcUtil().getConnection();
    // conn = new JdbcUtil().getJdbcConnection();
     conn = new JdbcUtil().getHbmConnection();
      
    conn.setAutoCommit(false);

    System.out
    .println("DictionaryBOImpl.createFormPhyTable() -->>  創建表單物理表 11111 "
      + "      conn == " + conn);
    
    java.sql.Statement   statement = conn.createStatement();
     
    statement.executeUpdate(createTablesql);// 創建表單物理表
    
    conn.commit();  //此處一定要手工進行事務處理
    
    statement.close();
    //tx.commit(); //使用 Hibernate事務處理邊界
    
    conn.close(); 
   

  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   // No matter what, close the session
   // statement.close();
  }
  return createTablesql;

 };

//----------------------  JdbcUtil類的getHbmConnection方法 ----------------------------

 public Connection getHbmConnection() throws Exception {
  conn = HibernateSessionFactory.getSession().connection();
  
  return conn;
 }

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com