package webgame.db;import java.sql.*;
import java.util.*;
public class DataBase{  private static int maxConnectNum = 20;
  private java.sql.Connection conn[]=new Connection[maxConnectNum];
  private static ArrayList connectPool = new ArrayList();
  private static int flag = 0;
  public DataBase() {
    if(flag == 0){
      init();
    }
  }  private Connection getConnectionFromDatabase(){
    Connection trueConn = null;
    try {
      //Class.forName("org.gjt.mm.mysql.Driver").newInstance();
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      String url ="jdbc:mysql://localhost:3306/webgame?user=root&password=&useUnicode=true&characterEncoding=GBK";
      trueConn= DriverManager.getConnection(url);
    }
    catch (Exception ex) {
      System.out.println("数据连接出错了:" + ex.toString());
    }
    return trueConn;
  }  //这里建立所有的连接;
  private void init(){
    for(int i=0;i<maxConnectNum;i++){
      conn[i] = getConnectionFromDatabase();
      connectPool.add(i,conn[i]);
    }
    flag = 1;
  }
  //从连接池中取得一个可用的连接
  public Connection getConnection(){
    Connection conn = null;
    if(connectPool.size()==0){
      try {
        java.lang.Thread.sleep(1000);
        getConnection();
      }
      catch (InterruptedException ex) {
        System.out.println("连接全部用光,这里sleep出错了.");
      }
    }else{
      conn =  (Connection)connectPool.remove(0);
    }    return conn;
  }  //提供给外部程序调用,不用的连接放回连接池当中...
  public boolean release(Connection conn){
    return connectPool.add(conn);
  }
  public static void main(String[] args)
  {
  }
}

解决方案 »

  1.   

    用openSTA 20并发10000次,没有问题....
      

  2.   

    50并发一万次也没有问题..查看mysql连接状态只有20个...应该没有什么问题吧.
      

  3.   

    package webgame.db;import java.sql.*;
    import java.util.*;
    public class DataBase{  private static int maxConnectNum = 20;
      private static java.sql.Connection conn[]=new Connection[maxConnectNum];
      private static ArrayList connectPool = new ArrayList();
      private static int flag = 0;
      private static Connection getConnectionFromDatabase(){
        Connection trueConn = null;
        try {
          //Class.forName("org.gjt.mm.mysql.Driver").newInstance();
          Class.forName("com.mysql.jdbc.Driver").newInstance();
          String url ="jdbc:mysql://localhost:3306/webgame?user=root&password=&useUnicode=true&characterEncoding=GBK";
          trueConn= DriverManager.getConnection(url);
        }
        catch (Exception ex) {
          System.out.println("数据连接出错了:" + ex.toString());
        }
        return trueConn;
      }  //这里建立所有的连接;
      private static void init(){
        for(int i=0;i<maxConnectNum;i++){
          conn[i] = getConnectionFromDatabase();
          connectPool.add(i,conn[i]);
        }
        flag = 1;
      }
      //从连接池中取得一个可用的连接
      public static Connection getConnection(){
        if(flag==0){
          flag=1;
          init();
        }
        Connection conn = null;
        if(connectPool.size()==0){
          try {
            java.lang.Thread.sleep(1000);
            getConnection();
          }
          catch (InterruptedException ex) {
            System.out.println("连接全部用光,这里sleep出错了.");
          }
        }else{
          conn =  (Connection)connectPool.remove(0);
        }    return conn;
      }  //提供给外部程序调用,不用的连接放回连接池当中...
      public static boolean release(Connection conn){
        try {      conn.setAutoCommit(true);
        }
        catch (SQLException ex) {    }
        return connectPool.add(conn);
      }
      public static void main(String[] args)
      {
        java.sql.Connection c = DataBase.getConnection();
        String sql = "(select * from hero_info where user_id=0) limit 10,10";
        java.sql.ResultSet rs = null;
        java.sql.PreparedStatement ps = null;
        try {
          ps = c.prepareStatement(sql);
          rs = ps.executeQuery();
          while(rs.next()){
            System.out.println(rs.getInt(1));
          }
        }
        catch (SQLException ex) {
        }finally{
          try {
            rs.close();
            ps.close();
          }
          catch (SQLException ex) {
          }finally{
            DataBase.release(c);
          }    }
      }
    }