JDBC连接数据库_通过连接池连接
2018-03-01 00:40
633 查看
import org.apache.commons.dbcp.BasicDataSource;通过导入该包实现
package cn.tedu.jdbc.day02;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;import org.apache.commons.dbcp.BasicDataSource;/*
* 连接池基本用法
*/
public class Demo01 {
public static void main(String[] args) throws Exception{
String driver = "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
String username = "zqk";
String password = "zqk123";
//设置必须的参数
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
//设置连接池的管理策略参数
ds.setInitialSize(2);
ds.setMaxActive(100);
//使用连接池中的数据库连接
Connection conn = ds.getConnection();
//执行sql
Statement st = conn.createStatement();
String sql = "select 'hello' as a "
+ "from dual";
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
String str = rs.getString("a");
//如果执行的结果是hello,说明我们的sql
//语句成功的发送到了数据库,并且成功的返回了数据
System.out.println(str);
}
//归还连接到数据库连接池
conn.close();
/*
* 运行没有问题以后我们,我们需要把连接的过程封装成一个DbUtils
* 这个DbUtils可以用在并发的环境下,昨天的DbUtils也是可以使用的
* 但是只能用在单线程的情况下,并发需要我们这个类里面的连接池
*/
}
}
——————————————————————————————————————————————————————————————
创建一个可以处理并发情况下的一个连接管理方法,包括创建连接池并初始化,获取连接,归还连接,回退这几个方法。
package cn.tedu.jdbc.day02;import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;import org.apache.commons.dbcp.BasicDataSource;/*
* 连接池版本的 数据库 连接管理工具类
* 适合于并发场合
* 封装数据源连接池
*/
public class DBUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
private static int initSize;
private static int maxActive;
private static BasicDataSource ds;
/*
* 创建连接池,读值赋值
*/
static {
//创建连接池
ds = new BasicDataSource();
Properties cfg = new Properties();
try {
InputStream in = DBUtils.class
.getClassLoader().getResourceAsStream("db.properties");
//通过流打开文件
cfg.load(in);
//初始化参数
driver = cfg.getProperty("jdbc.driver");
url = cfg.getProperty("jdbc.url");
username = cfg.getProperty("jdbc.username");
password = cfg.getProperty("jdbc.password");
//initSize是一个整数,但是key这个里面存的是字符串,那么
//怎么把整数变成字符串呢?
initSize = Integer.parseInt(cfg.getProperty("initSize"));
maxActive = Integer.parseInt(cfg.getProperty("maxActive"));
in.close();
//初始化连接池
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
ds.setInitialSize(initSize);
ds.setMaxActive(maxActive);
}catch(Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
public static Connection getConnection() {
try {
//getConnection()从连接池中获取重用的连接
//如果连接池满了,则等待
//如果有连接归还则获取重用的连接
Connection conn = ds.getConnection();
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static void close(Connection conn) {
if(conn!=null) {
try{
//将用过的连接归还到连接池
conn.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
public static void rollback(Connection conn) {
try {
if(conn!=null) {
conn.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}——————————————————————————————————————————————————————————————————
package cn.tedu.jdbc.day02;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class Demo02 { public static void main(String[] args) {
Connection conn = null;
try {
conn = DBUtils.getConnection();
Statement st = conn.createStatement();
String sql = "select 'HELLO' as a "
+ "from dual";
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
String str = rs.getString("a");
System.out.println(str);
}
rs.close();
st.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.close(conn);
}
}
/*
* 搞完这个以后我们搞点并发出来
*
* 看图:多线程连接数据库,反映线程池的并发管理
* 连接总数控制成两个,
* 写一个线程类
*
*/
————————————————————————————————————————————————————
package cn.tedu.jdbc.day02;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class Demo03 {
public static void main(String[] args) {
Thread t1 = new DemoThread(5000);
Thread t2 = new DemoThread(6000);
Thread t3 = new DemoThread(2000);
t1.start();
t2.start();
t3.start();
}
}
class DemoThread extends Thread{
int wait;
public DemoThread(int wait) {
this.wait = wait;
}
public void run() {
Conne
a91d
ction conn = null;
try {
conn = DBUtils.getConnection();
System.out.println("获取了连接:"+conn);
Thread.sleep(wait);
String sql = "select 'Hello' as a "
+ "from dual";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getString("a"));
}
System.out.println(wait+"结束");
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.close(conn);
}
}
}
执行以后的结果如下:(不固定)
获取了连接:jdbc:oracle:thin:@127.0.0.1:1521:XE, UserName=ZQK, Oracle JDBC driver
获取了连接:jdbc:oracle:thin:@127.0.0.1:1521:XE, UserName=ZQK, Oracle JDBC driver
Hello
5000结束
获取了连接:jdbc:oracle:thin:@127.0.0.1:1521:XE, UserName=ZQK, Oracle JDBC driver
Hello
6000结束
Hello
2000结束
package cn.tedu.jdbc.day02;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;import org.apache.commons.dbcp.BasicDataSource;/*
* 连接池基本用法
*/
public class Demo01 {
public static void main(String[] args) throws Exception{
String driver = "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
String username = "zqk";
String password = "zqk123";
//设置必须的参数
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
//设置连接池的管理策略参数
ds.setInitialSize(2);
ds.setMaxActive(100);
//使用连接池中的数据库连接
Connection conn = ds.getConnection();
//执行sql
Statement st = conn.createStatement();
String sql = "select 'hello' as a "
+ "from dual";
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
String str = rs.getString("a");
//如果执行的结果是hello,说明我们的sql
//语句成功的发送到了数据库,并且成功的返回了数据
System.out.println(str);
}
//归还连接到数据库连接池
conn.close();
/*
* 运行没有问题以后我们,我们需要把连接的过程封装成一个DbUtils
* 这个DbUtils可以用在并发的环境下,昨天的DbUtils也是可以使用的
* 但是只能用在单线程的情况下,并发需要我们这个类里面的连接池
*/
}
}
——————————————————————————————————————————————————————————————
创建一个可以处理并发情况下的一个连接管理方法,包括创建连接池并初始化,获取连接,归还连接,回退这几个方法。
package cn.tedu.jdbc.day02;import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;import org.apache.commons.dbcp.BasicDataSource;/*
* 连接池版本的 数据库 连接管理工具类
* 适合于并发场合
* 封装数据源连接池
*/
public class DBUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
private static int initSize;
private static int maxActive;
private static BasicDataSource ds;
/*
* 创建连接池,读值赋值
*/
static {
//创建连接池
ds = new BasicDataSource();
Properties cfg = new Properties();
try {
InputStream in = DBUtils.class
.getClassLoader().getResourceAsStream("db.properties");
//通过流打开文件
cfg.load(in);
//初始化参数
driver = cfg.getProperty("jdbc.driver");
url = cfg.getProperty("jdbc.url");
username = cfg.getProperty("jdbc.username");
password = cfg.getProperty("jdbc.password");
//initSize是一个整数,但是key这个里面存的是字符串,那么
//怎么把整数变成字符串呢?
initSize = Integer.parseInt(cfg.getProperty("initSize"));
maxActive = Integer.parseInt(cfg.getProperty("maxActive"));
in.close();
//初始化连接池
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
ds.setInitialSize(initSize);
ds.setMaxActive(maxActive);
}catch(Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
public static Connection getConnection() {
try {
//getConnection()从连接池中获取重用的连接
//如果连接池满了,则等待
//如果有连接归还则获取重用的连接
Connection conn = ds.getConnection();
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static void close(Connection conn) {
if(conn!=null) {
try{
//将用过的连接归还到连接池
conn.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
public static void rollback(Connection conn) {
try {
if(conn!=null) {
conn.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}——————————————————————————————————————————————————————————————————
package cn.tedu.jdbc.day02;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class Demo02 { public static void main(String[] args) {
Connection conn = null;
try {
conn = DBUtils.getConnection();
Statement st = conn.createStatement();
String sql = "select 'HELLO' as a "
+ "from dual";
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
String str = rs.getString("a");
System.out.println(str);
}
rs.close();
st.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.close(conn);
}
}
/*
* 搞完这个以后我们搞点并发出来
*
* 看图:多线程连接数据库,反映线程池的并发管理
* 连接总数控制成两个,
* 写一个线程类
*
*/
————————————————————————————————————————————————————
package cn.tedu.jdbc.day02;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class Demo03 {
public static void main(String[] args) {
Thread t1 = new DemoThread(5000);
Thread t2 = new DemoThread(6000);
Thread t3 = new DemoThread(2000);
t1.start();
t2.start();
t3.start();
}
}
class DemoThread extends Thread{
int wait;
public DemoThread(int wait) {
this.wait = wait;
}
public void run() {
Conne
a91d
ction conn = null;
try {
conn = DBUtils.getConnection();
System.out.println("获取了连接:"+conn);
Thread.sleep(wait);
String sql = "select 'Hello' as a "
+ "from dual";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getString("a"));
}
System.out.println(wait+"结束");
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.close(conn);
}
}
}
执行以后的结果如下:(不固定)
获取了连接:jdbc:oracle:thin:@127.0.0.1:1521:XE, UserName=ZQK, Oracle JDBC driver
获取了连接:jdbc:oracle:thin:@127.0.0.1:1521:XE, UserName=ZQK, Oracle JDBC driver
Hello
5000结束
获取了连接:jdbc:oracle:thin:@127.0.0.1:1521:XE, UserName=ZQK, Oracle JDBC driver
Hello
6000结束
Hello
2000结束
相关文章推荐
- 通过jdbc创建连接池连接数据库
- JDBC:通过 Driver 接口获取数据库连接
- JDBC通过配置文件连接数据库
- 2.通过原始的Driver接口通过读取Properties属性文件获取JDBC数据库连接Connection
- 通过dbcp连接池连接数据库的操作
- Matlab R2012a 通过JDBC方式连接Sqlserver 2005数据库
- Java程序通过JDBC-ODBC连接本地数据库
- java通过JDBC连接数据库
- 配置eclipse通过JDBC连接SQl Server 2008R2数据库
- java通过jdbc连接数据库并在前端实现增删查改
- JDBC:通过 DriverManager 获取数据库连接
- jdbc基础 (二) 通过properties配置文件连接数据库
- powerdesigner 通过jdbc连接数据库mysql 逆向工程带图详解
- PowerDesigner 在通过jdbc连接数据库时 Could not Initialize JavaVM!
- java通过JDBC_获取数据库连接
- JSP中通过JDBC连接数据库mysql
- java通过jdbc连接数据库
- JAVA通过JDBC连接数据库
- 通过JDBC-ODBC连接数据库,读取数据库信息并显示
- java JDBC 通过物理连接数据库和通过获取数据库连接池进行链接