1、没有同步原语,多线程并发时会有问题。
2、conn是成员,每调用一次getconnection就被覆盖一次,而且如果数据库失败,会莫名其妙的获得上一次的连接。

解决方案 »

  1.   

    就是synchronizedpublic   static  synchronized  ServiceLocator   getInstance() 
      

  2.   

    if(conn == null){
      Context   ctx   =   new   InitialContext(); 
      DataSource   ds=(DataSource)ctx.lookup( "java:comp/env/jdbc/tongxuelu "); 
      conn   =   ds.getConnection();   
    }
      

  3.   

    package com.serviceLocator;import java.sql.Connection;
    import java.sql.SQLException;import javax.sql.DataSource;import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    public class ServiceLocator 
    {
    public  static Connection getConnection()throws NamingException, SQLException
    {
    Context ctx = new InitialContext();
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/tongxuelu");
    Connection conn = ds.getConnection();
    return conn;
    }
    }
    我把它改成这样,还有什么错吗?
      

  4.   

    getConnection()方法不要写成静态的
      

  5.   

    这样行不??
    //p157
    package system.module.db;
    import java.sql.*;
    public class DBconn{
    String DBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
    //设置数据库连接字符?
    String ConnStr=""java:comp/env/jdbc/tongxuelu";
    Connection conn=null;
    ResultSet rs=null;
    public DBconn(){
    try{
    Class.forName(DBDriver);
    //加载驱动
    }catch(java.lang.ClassNotFoundException e){
    System.err.println("DBconn():"+e.getMessage());
    }
    }

    public ResultSet executeQuery(String sql){
    rs=null;
    try{
    //连接数据库
    conn=DriverManager.getConnection(ConnStr);
    //创建SQL语句对象
    Statement stmt=conn.createStatement();
    rs=stmt.executeQuery(sql);
    }catch(SQLException ex){
    System.err.println("aq.executeQuery:"+ex.getMessage());
    }
    return rs;
    }


    public int executeUpdate(String sql){//数据库的更新操作
    int result=0;
    try{
    conn=DriverManager.getConnection(ConnStr);
    Statement stmt=conn.createStatement();
    result=stmt.executeUpdate(sql);
    }catch(SQLException ex){
    System.err.println(ex.getMessage());
    }
    return result;
    }

    public void close(){
    try{
    if(conn!=null)
    conn.close();
    }catch(Exception e){
    System.out.print(e);
    }try{
    if(rs!=null)
    rs.close();

    }catch(Exception e){
    System.out.println(e);
    }

    }
    }
      

  6.   

    球不是这么踢地,连接池不是这么写地
    http://www.10zhizui.cn
      

  7.   

    要是连接池这么 好写的话  就用不着那些第三方jar包 了可以看看 PROXCOOL   很有用的数据库连接池 架包