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连接。
解决方案 »
- 这是什么问题啊?
- JCreator4.5自动退出
- getdocumentbase getcodebase似乎区别不大
- applet 中使用 java communication api 20出现ClassNotFoundException: com.sun.comm.Win32Driver异常
- session取得用户名问题
- 小小女有一个JAVA程序涉及到连ACCESS数据库的,出了问题, 大虾能不能帮我改改,先谢谢了!
- Applet问题
- 关于日期的一个问题,请各位帮忙
- 关于java的wait()的问题
- 100分求书:Java Thread Programming
- 表达能力不好,只能笼统地说是J2SE连接数据库的问题 麻烦大家帮我解决一下 谢谢
- 如何修改myeclipse里面的${time}格式
这样可以连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。
不知道怎么用去Google
可以使用数据库池连接。 连接不会关闭,只是保存起来,
如果需要一直保持连接就不要关闭,如果需要间隔一段时间再连接最好使用个连接池
每一次DML操作结束后,就应该关闭你的数据库连接。因为在用户访问你的某页时,显示完毕数据之后,这个时候就应该把你的数据库的连接关闭掉,否则会影响其他的访问数据库的效率和是否成功的问题。
而且你根本不知道用户何时会进行下一步操作
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();
} }
}
我之前也有想过用连接池不过这样还是会占用系统资源 而且我这个小应用程序只需要一个Conncetion连接就够了
如果这个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;
}
}