public class StaticConn {
public static void main(String[] args) throws SQLException {
// .....
// 我现在在做一个桌面应用程序,需要连接数据库。
String url = "";
String user = "";
String password = "";
Connection conn = DriverManager.getConnection(url, user, password);
new MainJFrame(conn);//登陆界面创建Connection传给主界面 }
}//进入主界面
class MainJFrame {
public static Connection conn;//这样做的后果是什么? public MainJFrame(Connection conn) {
this.conn = conn;

}

}//按钮的事件类
class TestListener implements ActionListener{ public void actionPerformed(ActionEvent e) {
Connection conn = MainJFrame.conn;
Statement stmt = conn.createStatement();
//....
}}
我这样想是因为 界面中查询和插入内容都要创建Conncetion对象
而创建Conncetion对象又比较耗时 所以我把它放在静态变量中,其它界面可以直接得到
在程序退出的时候关闭它.这个程序只需要用到一个Connction连接。

解决方案 »

  1.   

    用 连接池 或者用 proxool等连接池获得链接
    这样可以连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。 
    不知道怎么用去Google
      

  2.   

    如果这个Connection因为什么原因断了,  那么大家都用不成了
      

  3.   

    用 连接池 或者用 proxool等连接池获得链接
      

  4.   

    如果你的层分得好的话,连接数据库可以自己写个类,封装起来。那样方便。
    可以使用数据库池连接。 连接不会关闭,只是保存起来, 
    如果需要一直保持连接就不要关闭,如果需要间隔一段时间再连接最好使用个连接池 
    每一次DML操作结束后,就应该关闭你的数据库连接。因为在用户访问你的某页时,显示完毕数据之后,这个时候就应该把你的数据库的连接关闭掉,否则会影响其他的访问数据库的效率和是否成功的问题。   
      而且你根本不知道用户何时会进行下一步操作 
      

  5.   

    用 oop 思想:添加一个连接管理类 。在那里写获得连接的方法。和关闭方法 。 一般用连接都是:获得连接-->打开连接-->执行操作-->关闭
      

  6.   

    package common.xr;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;public class ConnectionManager {
    private static final String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    private static final String url = "jdbc:sqlserver://localhost:1433;databaseName=news";
    private static final String user = "sa";
    private static final String password = "sa"; public static Connection getConnection() throws ClassNotFoundException,
    SQLException {
    Class.forName(driverName);
    Connection conn = DriverManager.getConnection(url, user, password);
    return conn; } public static void clostAll(PreparedStatement pmt, ResultSet rs,
    Connection conn) {
    try {
    if(rs!=null)
    rs.close();
    if(pmt!=null)
    pmt.close();
    if(conn!=null)
    conn.close();
    } catch (SQLException e) { 
    e.printStackTrace();
    } }
    }
      

  7.   

    你的问题就是连接池的设计初衷,参见dbcp等
      

  8.   


    我之前也有想过用连接池不过这样还是会占用系统资源 而且我这个小应用程序只需要一个Conncetion连接就够了
      

  9.   

    总结:
    如果这个Connection因为什么原因断了, 那么大家都用不成了
    你的问题就是连接池的设计初衷,参见dbcp等package test;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Vector;public class DBCPTest {
    public static void main(String[] args)  {
    ConnectionPool pool;
    try {
    pool = ConnectionPool.getInstance();
    System.out.println(pool.getConn());
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }class ConnectionPool{
    static
    {
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }

    private final static String url="jdbc:oracle:thin:@127.0.0.1:1521:oracle";
    private final static String user="scott";
    private final static String pwd ="tiger";
    private static ConnectionPool instance;
    private Vector<Connection> pool;

    private ConnectionPool() throws SQLException{
    init();
    }

    private void init() throws SQLException{
    pool = new Vector<Connection>();

    for(int i=0;i<3;i++){ //长度3
    Connection conn = DriverManager.getConnection(url,user,pwd);
    pool.add(conn);
    }

    }

    /**单例创建连接池对象
     * @throws SQLException */
    public static ConnectionPool getInstance() throws SQLException{
    if(instance == null){
    synchronized(ConnectionPool.class){
    if(instance == null){
    instance = new ConnectionPool();
    }
    }
    }
    return instance;
    }

    public Connection getConn(){
    if(pool.size() > 0){
    Connection conn = pool.get(0);
    pool.remove(0);
    return conn;
    }
    return null;
    }
    }