您的位置:首页 > 编程语言 > Java开发

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

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

问题是这样的,代码拿过来后,由于数据库相关信息的变化,连接池的这个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我实在不怎么懂,入门水平都还不到,整个系统的源代码也看不大懂,还在一边学习一边看,遇到点问题就记录下来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: