连接池是一种数据库连接管理技术
连接池是具有容器功能的的对象,当应用加载时,自动创建若干数据库连接对象并放入连接池中
当需要访问数据库时,从连接池中取出连接对象,而非自行创建连接对象,使用完毕后放入连接池,而非关闭。
连接池优点:1、减少创建连接时间,提高系统性能,
2、资源使用集约化:使用有限数量的数据库连接,降低资源占用,重复利用数据库连接,提高了资源的利用率
3、简化的编程模式,提高开发效率
常用的连接池:DBCP、,c3p0,proxool,
常用的连接池参数:连接池名称,数据库驱动名,url,账户,密码,连接池最大连接,连接池最小连接,连接超时
=======================================================================================================================
JNDI(Java Naming and Directory Interface)即Java程序命名和目录接口。
JNDI的作用
为对象命名,实现名称和对象的对应。
应用开发者需要对象时,通过名称就能够查找到对象,进而调用这个对象的方法。
JavaEE服务器提供了JNDI的功能,即提供了Java命名和目录服务。
=====================================================================================================================
public class TestPool
{
public static void main (String[] args)
{
DataSource ds = null;
//PrintWriter log = null; //uncomment to turn on logging
try
{
//log = new PrintWriter(new FileWriter("dblog"), true); //uncomment to turn on logging
Properties p = new Properties();
p.setProperty("logLevel", "1"); //debug = 4, info = 3, warn = 2, error = 1, fatal = 0 日志标准
p.setProperty("autoCommit", "false"); 自动提交
p.setProperty("description", "Oracle"); 数据库名
p.setProperty("driverClass", "oracle.jdbc.driver.OracleDriver"); 驱动类
p.setProperty("maxCount", "2");最大连接
p.setProperty("minCount", "1");最小连接
p.setProperty("user", "test");
p.setProperty("password", "test");
p.setProperty("url", "jdbc:oracle:thin:@127.0.0.1 :1565:test"); url
p.setProperty("loginTimeout", "0"); //in seconds
p.setProperty("holdTimeout", "1000"); //in seconds 持续超时
p.setProperty("waitTimeout", "10000"); //in milliseconds 最大等待超时时间
p.setProperty("checkQuery", "select SYSDATE from dual");
p.setProperty("statementCacheSize", "10"); 缓存大小
//ds = new RPDataSource(p, log); //use this instead of the next line to turn on logging
ds = new RPDataSource(p);
Connection con = ds.getConnection();
Statement s = con.createStatement();
ResultSet rs = s.executeQuery("select SYSDATE from dual");
if (rs.next())
{
System.out.println (rs.getString(1));
}
rs.close();
s.close();
con.close();
con = ds.getConnection();
s = con.createStatement();
rs = s.executeQuery ("select SYSDATE from dual");
if (rs.next())
{
System.out.println (rs.getString(1));
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
RPDataSource rp = (RPDataSource)ds;
rp.destroy();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}