通过连接池连接数据库--JAVA

最近在学校接触了一个招投标的项目,代码全是老师写好了的,我们拿过来学习学习,修改一下在自己机器上跑一跑。在连接数据库的时候遇到点小问题,后来到处搜了搜总算解决了。

问题是这样的,代码拿过来后,由于数据库相关信息的变化,连接池的这个java文件需要修改重新编译,在编译过程中出现找不到包的问题,提示如下:

database.java:10: package org.apache.commons.pool does not exist
import org.apache.commons.pool.ObjectPool;
                               ^
database.java:11: package org.apache.commons.pool.impl does not exist
import org.apache.commons.pool.impl.GenericObjectPool;
                                    ^
database.java:12: package org.apache.commons.dbcp does not exist
import org.apache.commons.dbcp.ConnectionFactory;
                               ^
database.java:13: package org.apache.commons.dbcp does not exist
import org.apache.commons.dbcp.PoolingDriver;
                               ^
database.java:14: package org.apache.commons.dbcp does not exist
import org.apache.commons.dbcp.PoolableConnectionFactory;
                               ^
database.java:15: package org.apache.commons.dbcp does not exist
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
                               ^
database.java:36: cannot resolve symbol
symbol  : class ObjectPool
location: class edu.zjgsu.struts.database.DataBase
        private static ObjectPool connectionPool = null;
                       ^
database.java:34: package oracle.jdbc.driver does not exist
        private static Class driverClass = oracle.jdbc.driver.OracleDriver.class
;
                                                             ^
database.java:87: cannot resolve symbol
symbol  : class GenericObjectPool
location: class edu.zjgsu.struts.database.DataBase
                connectionPool = new GenericObjectPool(null);
                                     ^
database.java:89: cannot resolve symbol
symbol  : class ConnectionFactory
location: class edu.zjgsu.struts.database.DataBase
                ConnectionFactory connectionFactory =
                ^
database.java:90: cannot resolve symbol
symbol  : class DriverManagerConnectionFactory
location: class edu.zjgsu.struts.database.DataBase
                                new DriverManagerConnectionFactory(connectURI, s
qlUser, sqlPwd);
                                    ^
database.java:92: cannot resolve symbol
symbol  : class PoolableConnectionFactory
location: class edu.zjgsu.struts.database.DataBase
                PoolableConnectionFactory poolableConnectionFactory =
                ^
database.java:93: cannot resolve symbol
symbol  : class PoolableConnectionFactory
location: class edu.zjgsu.struts.database.DataBase
                        new PoolableConnectionFactory( connectionFactory , conne
ctionPool , null ,      null , false , true );
                            ^
database.java:97: cannot resolve symbol
symbol  : class PoolingDriver
location: class edu.zjgsu.struts.database.DataBase
                PoolingDriver driver =
                ^
database.java:98: cannot resolve symbol
symbol  : class PoolingDriver
location: class edu.zjgsu.struts.database.DataBase
                                (PoolingDriver) DriverManager.getDriver(
                                 ^
database.java:106: cannot resolve symbol
symbol  : class PoolingDriver
location: class edu.zjgsu.struts.database.DataBase
                PoolingDriver driver =
                ^
database.java:107: cannot resolve symbol
symbol  : class PoolingDriver
location: class edu.zjgsu.struts.database.DataBase
                                (PoolingDriver) DriverManager.getDriver(
                                 ^
database.java:109: cannot resolve symbol
symbol  : class ObjectPool
location: class edu.zjgsu.struts.database.DataBase
                ObjectPool connectionPool = driver.getConnectionPool("auxdbpoll"
);
                ^
18 errors

连接池的java文件源代码如下:

/*the class is used to connect to database(Oracle) throught DBCP(database connection pool)
 * that enable dealing with lots of connect in tomcat
 * the basic source code is designed by chun lai chai
 * yemin edit on 05-05-22
 */
package edu.zjgsu.struts.database;

import java.sql.*;

import org.apache.commons.pool.ObjectPool;
import org.apache.commons.pool.impl.GenericObjectPool;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.PoolingDriver;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;

/*the class connect to oracle with thin methord*/
public class DataBase
{
 //the orcale jdbc dirver
 static String driver = "oracle.jdbc.driver.OracleDriver";
 //the connection is used to connect to database or dbcp
 private Connection conn = null;
 //the statement is used to execute SQL statement in database
 private Statement stmt = null;
 //the exact database URI locate in database
 private static String sqlJdbc = "jdbc:oracle:thin:@192.168.0.77:1521:OEMTEP";
 //use name
 
 private static String sqlUser = "PURCHASE";
 //password
 private static String sqlPwd = "yp123456";
 //the class file of oracle jdbc make it get .class file dynamiclly
 private static Class driverClass = oracle.jdbc.driver.OracleDriver.class;
 //the pointer which presents DBPC
 private static ObjectPool connectionPool = null;
 
 //the construct methord is automaticlly connect to the database for user
 public DataBase()
 {
  initDataSource();
  
 }
 //connect to oracle and print some information about it
 //and synchronized make the pool used a user one time
 private synchronized static void initDataSource()
 {
  if (driverClass == null)
  {
   try
   {
    //load the orcale jdbc
    driverClass = Class.forName(driver);
   }
   catch (ClassNotFoundException e)
   {
    e.printStackTrace();
   }
  }

  if (connectionPool == null)
  {
   try
   {
    setupDriver(sqlJdbc);
   }
   catch (Exception e)
   {
    e.printStackTrace();
   }
  }

   // Display some pool statistics
   try
   {
    printDriverStats();
   }
   catch (Exception e)
   {
    e.printStackTrace();
   }
 }
 
 private static void setupDriver(String connectURI) throws Exception
 {
  //get pool connection of DBPC   
  connectionPool = new GenericObjectPool(null);
  
  ConnectionFactory connectionFactory =
    new DriverManagerConnectionFactory(connectURI, sqlUser, sqlPwd);
    
  PoolableConnectionFactory poolableConnectionFactory =
   new PoolableConnectionFactory( connectionFactory , connectionPool , null ,  null , false , true );
        
  Class.forName("org.apache.commons.dbcp.PoolingDriver");
  
  PoolingDriver driver =
    (PoolingDriver) DriverManager.getDriver(
     "jdbc:apache:commons:dbcp:");
  //   
  driver.registerPool("auxdbpoll", connectionPool);
 }
 
 private static void printDriverStats() throws Exception
 {
  PoolingDriver driver =
    (PoolingDriver) DriverManager.getDriver(
     "jdbc:apache:commons:dbcp:");
  ObjectPool connectionPool = driver.getConnectionPool("auxdbpoll");
  System.out.println("active connection: " + connectionPool.getNumActive());
  System.out.println("idle connection:  " + connectionPool.getNumIdle());
 }
 //the a connection from the pool
 public Connection getDbPollConnection()
 {
  try
  {
   conn =
    DriverManager.getConnection(
      "jdbc:apache:commons:dbcp:auxdbpoll");
  }
  catch (SQLException e)
  {
   e.printStackTrace();
  }
  return conn;
 }
 //use for some SQL statement such as select then return the result set
 public ResultSet executeQuery(String SQL)
 {
  try
  {
   stmt = getDbPollConnection().createStatement();
   ResultSet rs = stmt.executeQuery(SQL);
   return rs;
  }catch (Exception e)
  {
   e.printStackTrace();
   return null;
  }  
 }
 //use for SQL statement that will change the table in database actions
 public boolean executeUpdate(String SQL)
 {
  try
  {
    stmt = getDbPollConnection().createStatement();
    stmt.executeUpdate(SQL);
    return true;
  }
  catch (Exception e)
  {
   e.printStackTrace();
   return false;
  }
 }
 
 public void close()
 {
  if (stmt != null)
  {
   try
   {
    stmt.close();
    stmt = null;
   } catch (Exception e)
   {
    e.printStackTrace();
   }
  }
  if (conn != null)
  {
   try
   {
    conn.close();
    conn = null;
   } catch (Exception e)
   {
    e.printStackTrace();
   }
  }
 }  

在环境变量中我已经添加过如下内容:

D:/glkx/WEB-INF/lib/classes12.jar;D:/glkx/WEB-INF/lib/commons-beanutils.jar;D:/glkx/WEB-INF/lib/commons-pool-1.2.jar;D:/glkx/WEB-INF/lib/commons-collections.jar;D:/glkx/WEB-INF/lib/commons-dbcp-1.2.1.jar

后来在命令行下输入:

set classpath=%classpath%;D:/glkx/WEB-INF/lib/classes12.jar;D:/glkx/WEB-INF/lib/commons-beanutils.jar;D:/glkx/WEB-INF/lib/commons-pool-1.2.jar;D:/glkx/WEB-INF/lib/commons-collections.jar;D:/glkx
/WEB-INF/lib/commons-dbcp-1.2.1.jar

终于解决了问题,编译成功!

对于java我实在不怎么懂,入门水平都还不到,整个系统的源代码也看不大懂,还在一边学习一边看,遇到点问题就记录下来了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值