这本书看了差不多.但都没有讲与数据库链接的优化功能??

05-01-28 摆渡人
(我没看书的光盘源程序)

想请教你的这些系统.你是怎么更好的处理与数据库的链接呢.

我平时是用下面网上找了方法.但我总觉得在我的系统会出现一些问题,请问可否介绍个更好的链接方法,谢谢:

import javax.sql.*;

import java.sql.*;

import javax.naming.*;

public class SingletonConnection {

private static SingletonConnection instance;

private static Connection conn=null;

private static Context ctx=null;

private static DataSource ds = null;

private SingletonConnection() {

try {

ctx = new InitialContext();

ds=(DataSource)ctx.lookup("java:comp/env/jdbc/DBcon");

try {

conn = ds.getConnection();

}

catch (SQLException ex1) {

System.out.println("获取数据库连接失败");

}

}

catch (NamingException ex) {

System.out.println("初始化系统环境失败");

}

}

public boolean connIsClosed(){

if(conn==null){

return true;

}

else{

return false;

}

}

public static SingletonConnection getInstance(){

if(instance==null){

instance=new SingletonConnection();

}

try {

if (conn.isClosed()) {

conn=ds.getConnection();

}

}

catch (SQLException ex) {

}

return instance;

}

public Connection getConnection(){

return conn;

}

}

banq
2005-01-29 11:16
使用连接池是数据库连接优化的成熟基础选择。

第二章介绍了如何使用连接池。连接池原理和它是如何实现优化的,这些是J2EE应用开发者无需必须关心的细节,正如Socket处理也是J2EE开发者无需关心的细节一样。

摆渡人
2005-01-29 16:09
但你的第二章节讲了很少.让我这样的新手,无从下手.

我平时是这样用了:

public void elite(String user) {

Connection conn = DBConnectionManager.getInstance().getConnection();

.....................

finally {

try {

if (conn != null) conn.close();

/*在这里close.按你的第二章节上说虽然用了close,但并没有真正的关闭链接.而是将连接归返到链接池中.但这样的地址池tomcat默认配置最大是4个链接.......

*/

}

catch (SQLException ex1) {

}

++++++++++++++++++++++++++++++++++++++++++++++++++++++

原先是下面的代码,有时会出现...池用尽....也就是说池没有很好的回收吧..........这是我的哪一环节出了问题.我现在把下面的代码改为第一贴的代码.不知是否得到的优化.

...

private final static Logger logger = Logger.getLogger(DBConnectionManager.class);

public static DBConnectionManager getInstance() {

if (dbc == null) {

dbc = new DBConnectionManager();

}

try {

if (conn.isClosed()) {

conn = ds.getConnection();

}

}

catch (SQLException ex) {

}

return dbc;

}

// /**.

// * 获取连接

// */

public Connection getConnection() {

try {

ctx = new InitialContext();

ds = (DataSource) ctx.lookup("java:comp/env/jdbc/DBcon");

conn = ds.getConnection();

return conn;

}

catch (Exception ex) {

System.out.println(ex.getMessage());

//logger.error("get sql Connection failure : " + ex.getMessage());

}

// return null;

// }

banq
2005-01-31 19:46
连接池涉及多线程和死锁等问题。我一直反复强调新手不要自己做连接池,很多给初学者看的文章在这方面误导了。多线程和单态问题很复杂,看看最近这个话题:

http://www.jdon.com/jive/article.jsp?forum=91&thread=18694

对于初学者,J2EE这样面向容器编程的系统,很多概念细节不必追究,我觉得有句话说得好:以前汇编语言相当于机器码,关心的人比较少;现在java代码就象机器码,我们只要掌握在某些框架下应用开发我们的业务逻辑就可以。

猜你喜欢