posts - 5, comments - 14, trackbacks - 0, articles - 11

我的DBConnection

Posted on 2007-02-08 14:41 东舟 阅读(1203) 评论(2)  编辑  收藏 所属分类: J2EE

 

  1 import  org.apache.log4j.Logger;
  2 import  JAVA.sql. * ;
  3 import  javax.sql.DataSource;
  4 import  javax.naming.Context;
  5
  6 import  config.ConfigBundle;
  7
  8 public   class  DBConnection  {
  9
 10   private   static   final  Logger logger  =  Logger.getLogger(DBConnection. class );
 11
 12   private   static  DBConnection instance  =   null ;
 13  
 14   public  JAVA.sql.Connection conn  =   null //  connection object
 15
 16   public  ResultSet rs  =   null //  resultset object
 17
 18   public  Statement stmt  =   null //  statement object
 19
 20   public  PreparedStatement prepstmt  =   null //  preparedstatement object
 21
 22   private  String drivers  =   null //  connection parameter:drivers
 23
 24   private  String url  =   null //  connection parameter:url
 25
 26   private  String user  =   null //  connection parameter:user
 27
 28   private  String password  =   null //  connection parameter:password
 29  
 30   private  String conMode  =   null ;
 31  
 32   public  DataSource ds  =   null ;
 33
 34   public  CallableStatement callstmt  =   null ;
 35  
 36 /**
 37  * 单实例
 38   */

 39   public   static   synchronized  DBConnection getInstance()  {
 40    if  (instance == null )
 41    instance = new  DBConnection();
 42   
 43    return  instance;
 44  }

 45
 46   private  DBConnection()  {
 47   conMode  =  ConfigBundle.getString( " connction_mode " );
 48   init(conMode);
 49
 50    // 使用xa协议的连接池驱动时, AutoCommit缺省为false, 造成多处数据未提交
 51    try   {
 52    setAutoCommit( true );
 53   }
  catch  (Exception ex)  {
 54    logger.error( " Set auto commit error! " );
 55   }

 56  }

 57  
 58   /**
 59   * 原来是采用配置文件确定构造方式,这里我只用一种构造方式,即conMode没有起作用
 60   *  @param  conMode String
 61    */

 62   private   void  init(String conMode)  {
 63   drivers  =  ConfigBundle.getString( " drivers " );
 64   url  =  ConfigBundle.getString( " url " );
 65   user  =  ConfigBundle.getString( " user " );
 66   password  =  ConfigBundle.getString( " password " );
 67   jndiRoot  =  ConfigBundle.getString( " jndi_root " );
 68   jndiName  =  ConfigBundle.getString( " jndi_name " );
 69   
 70    try   {
 71     Class.forName(drivers);
 72     conn  =  DriverManager.getConnection(url, user, password);
 73     stmt  =  conn.createStatement();
 74   }
  catch  (Exception ex)  {
 75    logger.error( " Initialize data connection error! " );
 76   }

 77  }

 78  
 79   /**
 80   * @function executeQuery
 81   *  @param  sql  String
 82   *  @throws  SQLException
 83   *  @return  ResultSet
 84    */

 85   public  ResultSet executeQuery(String sql)  throws  SQLException  {
 86    if  (stmt  !=   null {
 87     return  stmt.executeQuery(sql);
 88   }
  else   {
 89     return   null ;
 90   }

 91  }

 92
 93   /**
 94   * @function executeUpdate
 95   *  @param  sql  String
 96   *  @throws  SQLException
 97    */

 98   public   void  executeUpdate(String sql)  throws  SQLException  {
 99    if  (stmt  !=   null {
100    stmt.executeUpdate(sql);
101   }

102  }

103
104 /**
105   * @function setAutoCommit
106   *  @param  value boolean
107   *  @throws  SQLException
108    */

109   public   void  setAutoCommit( boolean  value)  throws  SQLException  {
110    this .conn.setAutoCommit(value);
111  }

112
113   /**
114   * @function commit
115   *  @throws  SQLException
116    */

117   public   void  commit()  throws  SQLException  {
118    this .conn.commit();
119  }

120
121   /**
122   * @function rollback
123   *  @throws  SQLException
124    */

125   public   void  rollback()  throws  SQLException  {
126    this .conn.rollback();
127  }

128
129   /**
130   * @function close
131   *  @throws  Exception
132    */

133   public   void  close()  {
134    try   {
135     if  (rs  !=   null {
136     rs.close();
137     rs  =   null ;
138    }

139   }
  catch  (Exception e)  {
140    logger.error( " DBConnection close rs error! " );
141   }
  finally   {
142     try   {
143      if  (stmt  !=   null {
144      stmt.close();
145      stmt  =   null ;
146     }

147    }
  catch  (Exception e)  {
148     logger.error( " DBConnection close stmt error! " );
149    }
  finally   {
150      try   {
151       if  (prepstmt  !=   null {
152       prepstmt.close();
153       prepstmt  =   null ;
154      }

155     }
  catch  (Exception e)  {
156      logger.error( " DBConnection close prepstmt error! " );
157     }
  finally   {
158       try   {
159        if  (conn  !=   null {
160        conn.close();
161        conn  =   null ;
162       }

163      }
  catch  (Exception e)  {
164       logger.error( " DBConnection close conn error! " );
165      }

166     }

167    }

168   }

169  }

170 }

171
172
173

这是个最简单的,当然还可以添加其他内容,比如事务处理一组SQL...
欢迎大家批评指正。

Feedback

# re: 我的DBConnection  回复  更多评论   

2007-02-08 15:23 by 马嘉楠
....
Connection ,ResultSet , Statement

这三个每次使用之后你都不进行关闭么?

# re: 我的DBConnection  回复  更多评论   

2007-02-10 12:04 by 东舟
谢谢 马嘉楠 的批评。

但是调用程序里是这样写的:
DBConnection db = DBConnection.getInstance();
String strTitle = "";
try {
ResultSet rs = db.executeQuery("select name from TB_PAGEFRAME where type = '1'");
while(rs.next()){
strTitle = rs.getString("name");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
db.close();
}

只有注册用户登录后才能发表评论。


网站导航: