使db conn全局化

时间:2013-10-11 05:56:41

标签: java java-ee

我已经从代码中的数据中获取数据库连接,现在我需要将此Db实例保持全局,并且需要在项目的其他部分中使用。

请指导我。

我有以下代码

try
    {   
        // load the DB2 Driver
        Class.forName("com.ibm.db2.jcc.DB2Driver");
        // establish a connection to DB2
        Connection db2Conn = DriverManager.getConnection
        (dbUrl,"wcsadm",dbPass);
        // use a statement to gather data from the database
        Statement st = db2Conn.createStatement();
        String myQuery=null;
        String insQuery=null;
        myQuery = "my query"
        // execute the query
        ResultSet resultSet = st.executeQuery(myQuery); 
        // cycle through the resulSet and display what was grabbed
        while (resultSet.next())
        {
        //do something
        }
        resultSet.close();
        st.close();
        db2Conn.close();
    }

3 个答案:

答案 0 :(得分:0)

a)考虑数据库连接池,请参阅http://commons.apache.org/proper/commons-dbcp/ b)如果你想要使用dbcp,那么创建一个单例,它将提供与项目部分的连接。

如果不了解您的项目(单/多用户,基于网络),很难提供更多建议。

public static class SQL {

Connection connection = null;
String connectionUrl = "jdbc:mysql://localhost:3306/bank";
String connectionUser = "admin";
String connectionPassword = "root";


public SQL(){}

public Connection getConnection () {

  if (connection != null) {
    return connection;
  }
  try{

  Class.forName("com.mysql.jdbc.Driver").newInstance();
  connection = DriverManager.getConnection(connectionUrl, connectionUser, connectionPassword);
  return connection; 
 }
  catch(Exception e){
    e.printStackTrace();
}
 return null;   
 }
  }

答案 1 :(得分:0)

这是我怎么做的,但仅用于测试项目:

public class SQL {

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;


public SQL(){

    try{
    Class.forName("com.mysql.jdbc.Driver").newInstance();

    String connectionUrl = "jdbc:mysql://localhost:3306/bank";
    String connectionUser = "admin";
    String connectionPassword = "root";

    conn = DriverManager.getConnection(connectionUrl, connectionUser,      connectionPassword);
    stmt = conn.createStatement();
    }
    catch(Exception e){
        e.printStackTrace();
    }

}

其他类扩展了SQL类:

public class Kontostand extends SQL{

public String getKontostand(String kontoNr){

    String kontostand = "";

    try {

        rs = stmt.executeQuery("SELECT * FROM konten WHERE KontoNr = '" + kontoNr + "'");


        while(rs.next()){
            kontostand = rs.getString("Kontostand");
        }

    }
    catch(Exception e){
        e.printStackTrace();
    }

    return kontostand;  
}

但它仅适用于我练习网络开发中的小项目...所以我不知道它是否适用于更大的项目

答案 2 :(得分:0)

将所有连接内容保存在静态方法中,如果为null则创建连接对象,否则返回现有连接对象。如果你想要全球第一选择是静态的。