Connection conn= DirverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:demo","username","password");
4.语句接口
SQL语言由从一个关系数据库中创建、表示和抽取数据的语句组成。JDBC提供的这些SQL语句的面向对象的表示用以封装其文本、执行状态和结果。这种表示称为java.sql.Statement接口。使用预编译SQL的PreparedStatement和调用存储过程的CallableStatement这两个子接口扩展了Statement的功能,示例如下:
Statement stmt=conn.createStatement();
5.获得结果集
一个结果集是表格行的排序列表,使用JDBC中的java.sql.ResultSet接口表示。结果集由Statement接口的executeQuery()方法或一些元数据方法调用产生,示例如下:
ResultSet rs=stmt.executeQuery(sql);
利用连接池优化访问效率
在本实例中,应用层使用WebLogic 6.1,数据库层采用Oracle8.1.6,客户端使用Navigate浏览器。
实例
在本实例中建立一个命名为ConnectionPool的连接池。ConnectionPool的基本属性如下:
m_ConnectionPoolSize 连接池中连接数量下限;
m_ConnectionPoolMax 连接池中连接数量上限;
m_ConnectionUseCount 一个连接的最大使用次数;
m_ConnectionTimeout 一个连接的最长空闲时间;
m_MaxConnections = -1 同一时间的最大连接数;
m_timer 定时器。
这些属性定义了连接池与其中的每个连接的有效状态值。
连接池的自我管理,实际上就是通过定时地对每个连接的状态和连接的数量进行判断而进行相应操作。
这里可以定义出ConnectionPool要完成管理所需要的基本接口,具体见下:
public class ConnectionPool implements TimerListener{
public boolean initialize() //连接池初始化
public void destroy() //连接池的销毁
public synchronized java.sql.Connection getConnection() //取一个连接
public synchronized void close() //关闭一个连接
private synchronized void removeFromPool() //把一个连接从连接池中删除
private synchronized void fillPool() //维护连接池大小
public synchronized void TimerEvent() //定时器事件处理函数
}
通过这几个接口,已经可以完成连接池的基本管理。在TimeEvent()函数中完成连接池的状态检验工作,fillPool()时连接池至少保持最小连接数。因为用户要保存每一个连接的状态,所以还需要一个数据库连接对象见下:
class ConnectionObject{
public java.sql.Connection con; public boolean inUse; //是否被使用标志
public long lastAccess; //最近一次开始使用时间
public int useCount; //被使用次数
}
加入了ConnectionObject对象后,在ConnectionPool中操作的应该只是ConnectionObject,而其它进程需要的只是ConnectionObject的con属性。因此这里再加入如下一个类,作为其它进程获得与返回连接的接口:
CLASS Conn{
GetConnection(); //从连接池中取出一个有效连接
CloseConnection(); //返回连接,此时并没有关闭连接,只是放回了连接池
DestroyPool(); //销毁连接池
}
目前采用JSP技术构建B/S结构的Web数据库系统是比较流行的方式,同时采用数据库连接池的系统在效率和稳定性上比采用传统的其它方式的系统要好得多。数据库连接池是一种对整个系统中比较复杂的问题的一种可行的解决办法。但在实际应用中,JDBC连接只是大型Web应用系统的一小部分,数据库连接池管理程序与Web服务器、JSP引擎和RDBMS引擎的管理策略都有可能发生冲突。用户应该全面考虑系统中的各个部分,这样才能充分发挥其高效性
本文地址:http://com.8s8s.com/it/it30827.htm