
/
数据库连接池
模块说明
getInstance()返回POOL唯一实例,第一次调用时将执行构造函数
构造函数Pool()调用驱动装载loadDrivers()函数;连接池创建createPool()函数
loadDrivers()装载驱动
createPool()建连接池
getConnection()返回一个连接实例
getConnection(long time)添加时间限制
freeConnection(Connection con)将con连接实例返回到连接池
getnum()返回空闲连接数
getnumActive()返回当前使用的连接数
/
import javasql;
public class Pool {
static private Pool instance = null; //定义唯一实例
private int maxConnect = 100;//最大连接数
private int normalConnect = 10;//保持连接数
private String password = "";//密码
private String url = "jdbc:mysql://localhost:3306/DB";//连接URL
private String user = "";//用户名
private String driverName = "";//驱动类
Driver driver = null;//驱动变量
DBConnectionPool pool = null;//连接池实例变量
/
返回唯一实例
@return
/
static synchronized public Pool getInstance() {
if (instance == null) {
instance = new Pool();
}
return instance;
}
/
将构造函数私有,不允许外界访问
/
private Pool() {
loadDrivers(driverName);
createPool();
}
/
装载和注册所有JDBC驱动程序
@param dri
/
private void loadDrivers(String dri) {
String driverClassName = dri;
try{
driver = (Driver) ClassforName(driverClassName)newInstance();
DriverManagerregisterDriver(driver);
Systemoutprintln("成功注册JDBC驱动程序" + driverClassName);
}catch (Exception e) {
Systemoutprintln("无法注册JDBC驱动程序:" + driverClassName + ",错误:" + e);
}
}
/
创建连接池
/
private void createPool() {
pool = new DBConnectionPool(password, url, user, normalConnect, maxConnect);
if (pool != null) {
Systemoutprintln("创建连接池成功");
}else {
Systemoutprintln("创建连接池失败");
}
}
/
获得一个可用的连接,如果没有则创建一个连接,且小于最大连接限制
@return
/
public Connection getConnection() {
if (pool != null) {
return poolgetConnection();
}
return null;
}
/
获得一个连接,有时间限制
@param time
@return
/
public Connection getConnection(long time) {
if (pool != null) {
return poolgetConnection(time);
}
return null;
}
/
将连接对象返回给连接池
@param con
/
public void freeConnection(Connection con) {
if (pool != null) {
poolfreeConnection(con);
}
}
/
返回当前空闲连接数
@return
/
public int getnum(){
return poolgetnum();
}
/
返回当前连接数
@return
/
public int getnumActive(){
return poolgetnumActive();
}
/
关闭所有连接,撤销驱动注册
/
public synchronized void release() {
poolrelease();
try {
DriverManagerderegisterDriver(driver);//撤销驱动
Systemoutprintln("撤销JDBC驱动程序 " + drivergetClass()getName());
}catch (SQLException e) {
Systemoutprintln("无法撤销JDBC驱动程序的注册:" + drivergetClass()getName());
}
}
}
//生成数据连接池
import javasql;
import javautil;
import javautilDate;
public class DBConnectionPool {
private int checkedOut;
private Vector<Connection> freeConnections = new Vector<Connection>();
private int maxConn;
private String password;
private String url;
private String user;
private static int num=0;//空闲的连接数
private static int numActive=0;//当前的连接数
public DBConnectionPool(String password, String url, String user,int normalConn, int maxConn) {
thispassword = password;
thisurl = url;
thisuser = user;
thismaxConn = maxConn;
for (int i = 0; i < normalConn; i++) { //初始normalConn个连接
Connection c = newConnection();
if (c != null)
{freeConnectionsaddElement(c);num++;}
}
}
/
释放不用的连接到连接池
/
public synchronized void freeConnection(Connection con) {
freeConnectionsaddElement(con);
num++;
checkedOut--;
numActive--;
notifyAll();
}
/
获取一个可用连接
@return
/
public synchronized Connection getConnection() {
Connection con = null;
if (freeConnectionssize() > 0) { //还有空闲的连接
num--;
con = (Connection) freeConnectionsfirstElement();
freeConnectionsremoveElementAt(0);
try {
if (conisClosed()) {
Systemoutprintln("从连接池删除一个无效连接");
con = getConnection();
}
}catch (SQLException e) {
Systemoutprintln("从连接池删除一个无效连接");
con = getConnection();
}
}
else if (maxConn == 0 || checkedOut < maxConn) { //没有空闲连接且当前连接小于最大允许值,最大值为0则不限制
con = newConnection();
}
if (con != null) { //当前连接数加1
checkedOut++;
}
numActive++;
return con;
}
/
获取一个连接,并加上等待时间限制,时间为毫秒
@param timeout
@return
/
public synchronized Connection getConnection(long timeout) {
long startTime = new Date()getTime();
Connection con;
while ((con = getConnection()) == null){
try {
wait(timeout);
}catch (InterruptedException e) {}
if((new Date()getTime() - startTime) >= timeout) {
Systemoutprintln("超时了!!");
return null; //超时返回
}
}
return con;
}
/
关闭所有连接
/
@SuppressWarnings("unchecked")
public synchronized void release() {
Enumeration allConnections = freeConnectionselements();
while (allConnectionshasMoreElements()) {
Connection con = (Connection) allConnectionsnextElement();
try {
conclose();
num--;
}catch (SQLException e) {
Systemoutprintln("无法关闭连接池中的连接");
}
}
freeConnectionsremoveAllElements();
numActive=0;
}
/
创建一个新连接
@return
/
private Connection newConnection() {
Connection con = null;
try {
if (user == null) { //用户,密码都为空
con = DriverManagergetConnection(url);
}else {
con = DriverManagergetConnection(url, user, password);
}
Systemoutprintln("连接池创建一个新的连接");
}catch (SQLException e) {
Systemoutprintln("无法创建这个URL的连接" + url);
return null;
}
return con;
}
/
返回当前空闲连接数
@return
/
public int getnum(){
return num;
}
/
返回当前连接数
@return
/
public int getnumActive(){
return numActive;
}
}
什么是SQL呢
SQL就是专门用来做数据库的一门语言
和C语言差不多
(当然功能不紧紧是做数据了
编程啊
都可以
这里就不多说了)z这道题用ACCESS
就可以完成了
1
首先
用Access
2000(数据库
)做一个数据库
打开设计器创建表
在点菜单
另存为
名为班级名+自己名字英文简写
最后点保存啦
(每完成系统都是有提示的啦)
第一问
解决
2
打开设计器
上面做的表下面下
创建数据表
名字都是在最后完成时做的
先不用管
然后在输入sID,sName,sSex,sAge,sClass
注意根据后面的要求填写字段
及数据类型
以及
在做其他的问题了将T_Student表的sID字段设置为标识列,种子为1,增量为2。
为T_Student表的sSex(性别)字段设置其默认值为“男”。
为T_Student表的sAge(年龄)字段设置检查约束,规定年龄在0到30岁之间。
为T_KC表的cName(课程名称)字段设置唯一性约束。,规定课程名称不得重复。
生成一个规则t_rule,限制数据的取值范围在(0---100)之间,然后将这个规则绑定到T_CJ表的cj(成绩)字段。
为T_KC表的cName字段创建索引。
最后
当然主键当然是SID了
一定要标好哦~~·先不管作业其他要求
在依次做其他2个表;
T_KC(cID,cName,sBianhao,sXuefen)
T_CJ(sID,cID,cj)
注意主键是SID
3
做好了三个表后退出设计器
在打开以一个个表
在按要求输入(在每个表中添加3-5条记录。)
好了
基本就完成了
当然用SQL
也能完成
这些问题
并且要快
但涉及到TQL语言
编程问题
很难说清楚
就不一一解释了···
SQL Server
CREATE DATABASE部分,需要指定数据库文件与日志文件的名称、文件名、初始大小、递增方式。
CREATE DATABASE [Test] ON PRIMARY
( NAME = N'Test',
FILENAME = N'E:\Microsoft SQL Server\MSSQL1\MSSQL\DATA\Testmdf' ,
SIZE = 3072KB ,
FILEGROWTH = 1024KB )
LOG ON
( NAME = N'Test_log',
FILENAME = N'E:\Microsoft SQL Server\MSSQL1\MSSQL\DATA\Test_logldf' ,
SIZE = 1024KB ,
FILEGROWTH = 10%)
GO
建表
1> CREATE TABLE test_create_tab (
2> id INT,
3> val VARCHAR(10)
4> );
5>
6> go
以上就是关于C# 求一个简单的数据库连接池的例子,要求是有30个连接,一个函数只要调用可以随时返回一个可用连接全部的内容,包括:C# 求一个简单的数据库连接池的例子,要求是有30个连接,一个函数只要调用可以随时返回一个可用连接、如何创建数据库实例、SQL 中怎么创建数据库和表初学不会,谁能给个详细简单点的例子等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)