连接池javabeanConnPool.java
package kjda;
import java.io.PrintStream;
import java.sql.*;
import java.util.Hashtable;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class ConnPool
{
    private Connection conn;
    private Statement stm;
    private static String weblogic_url = "";
    private String sdriver;
    private String surl;
    private String suid;
    private String spwd;
    public ConnPool()
    {
        conn = null;
        stm = null;
        try
        {
            Context initial = getInitialContext();
            DataSource ds = (DataSource)initial.lookup("whzhgl_ds");
            System.out.println("DataSource... OK");
            conn = ds.getConnection();
            System.out.println("Connection... OK");
        }
        catch(Exception ex)
        {
            System.out.println("Exception happened in ConnPool.ConnPool():".concat(String.valueOf(String.valueOf(ex))));
        }
    }
    public ResultSet execResult(String strSql)
    {
        try
        {
            stm = conn.createStatement();
            ResultSet resultset = stm.executeQuery(strSql);
            ResultSet resultset1 = resultset;
            return resultset1;
        }
        catch(Exception ex)
        {
            System.out.println("Exception happenedinConnPool.execResult(sql):".concat(String.valueOf(String.valueOf(ex))));
            ResultSet resultset2 = null;
            return resultset2;
        }
    }    public int execTotal(String strSql)
    {
        try
        {
            stm = conn.createStatement();
            int i = stm.executeUpdate(strSql);
            int j = i;
            return j;
        }
        catch(Exception ex)
        {
             System.out.println("Exception happened in ConnPool.execTotal(sql):".concat(String.valueOf(String.valueOf(ex))));
            int k = 0;
            return k;
        }
    }
    public void clearStatementAndResultSet()
    {
        try
        {
            if(stm != null)
                stm.close();
        }
        catch(Exception ex)
        {
            System.out.println("ConnPool.clearStatementAndResultSet():".concat(String.valueOf(String.valueOf(ex))));
        }
    }    public void closeDB()
    {
        try
        {
            if(stm != null)
                stm.close();
            if(conn != null)
                conn.close();
        }
        catch(Exception ex)
        {
            System.out.println("ConnPool.closeDB():".concat(String.valueOf(String.valueOf(ex))));
        }
    }    private static Context getInitialContext()
        throws Exception
    {
        String url = "t3://localhost:80";
        String user = null;
        String password = null;
        Properties properties = null;
        try
        {
            properties = new Properties();
            properties.put("java.naming.factory.initial", "weblogic.jndi.WLInitialContextFactory");
            properties.put("java.naming.provider.url", url);
            if(user != null)
            {
                properties.put("java.naming.security.principal", user);
                properties.put("java.naming.security.credentials", password == null ? "" : ((Object) (password)));
            }
            InitialContext initialcontext = new InitialContext(properties);
            InitialContext initialcontext1 = initialcontext;
            return initialcontext1;
        }
        catch(Exception e)
        {
            System.err.println("1 Caught an exception:");
            throw e;
        }
    }
    
    public Connection getConn()
    {
        return conn;
    }    public void setAuto()
    {
        try
        {
            if(!conn.getAutoCommit())
                conn.setAutoCommit(true);
        }
        catch(Exception ex3)
        {
             System.out.println("set auto commit eror:".concat(String.valueOf(String.valueOf(ex3))));
        }
    }    public void setNonAuto()
    {
        try
        {
            if(conn.getAutoCommit())
                conn.setAutoCommit(false);
        }
        catch(Exception ex3)
        {
            System.out.println("set non_auto commit eror:".concat(String.valueOf(String.valueOf(ex3))));
        }
    }    public void setCommit()
    {
        try
        {
            if(!conn.getAutoCommit())
                conn.commit();
        }
        catch(Exception ex3)
        {                          
            System.out.println("set commit eror:".concat(String.valueOf(String.valueOf(ex3))));
        }
    }    public void setRollBack()
    {
        try
        {
            ///if(!conn.getAutoCommit())
                conn.rollback();
        }
        catch(Exception ex3)
        {
            System.out.println("set roll back eror:".concat(String.valueOf(String.valueOf(ex3))));
        }
    }    public static void main(String args[])
    {
        ConnPool connectionProxy = new ConnPool();
        if(connectionProxy != null)
            try
            {
                String sql = "select * from tab";
                ResultSet rs = connectionProxy.execResult(sql);
                if(rs.next())
                    System.out.println("--------------".concat(String.valueOf(String.valueOf(rs.getString(1)))));
                rs.close();
                connectionProxy.closeDB();
            }
            catch(Exception ex)
            {
                connectionProxy.closeDB();
                System.err.println(ex);
                ex.printStackTrace();
            }
    }
}

解决方案 »

  1.   

    连接池可以通过配置应用服务器实现,不必编写,自己编写的再好也没有人家现成的好吧...也许有人有哪个实力,但我估计我没有,你也没有.
    启动事务的时候要con.setAutoCommit(false);
    出错要rollback;
    把连接放回连接池的时候要con.setAutoCommit(true);
      

  2.   

    是不是strSql1插入了而strSql2没插入,有可能和你共用statement有关,你试着只执行strSql1试试,看看是不是正常
      

  3.   

    那个bean也不是我写的 我是套用而已 的确比较乱
    情况是这样的
    第一次访问页面 后台出错 rollback不成功 连接已经关闭(搞不清是什么时候关闭的)
    这时候查数据库 没有插入纪录
    第二次把 strSql2改成 正确的日期 插入成功 
    但是第一次插入的第一条(strSql1)的纪录也插入进去(应该在第一次回滚的)
    我的目的是如果两条语句都插入成功就提交 否则回滚
    但是没有实现大家用连接池 都是怎么在页面上访问连接的 ?