❶ java中建立数据库连接池,有哪几个步骤
配置包括3步:1.让tomcat容器启动创建数据库连接池2.在某个项目中关联数据库连接池,3.取得数据库连接池并使用。使用包括,当拿到数据库连接后,可以通过2种方式来使用,1.使用jstl的标签,2.封装成返回connection的方法。
1.让tomcat容器启动创建数据库连接池:
配置的地方很多,根据不同的需求配置在不同的位置,但原理就一个,就是要配置一个Context标签下有一个resource标签。
a.在Tomcat 6.0\conf\Catalina\localhost目录下新建一个跟项目名一样的*.xml文件
b.数据源设置的名字(JNDI) auth:表示数据源由谁管理,这儿是tomcat容器本身 type:类型
c.驱动设置,该驱动放在tomcat的lib下或者放在该站点的lib下设置连接数据库字符串,url设置连接数据库的用户名设置数据库连接的密码-->
2.在某个项目中关联数据库连接池,在web.xml添加代码:
<!--关联jndi数据库连接池 -->
3.使用jstl标签测试数据源是否配置成功
4.在jsp中通过java代码测试:
5.封装成bean对外提供得到数据库连接池连接的方式:
❷ 如何在Java代理中使用JDBC的连接池
/**
13 * 使用代理创建连接池
14 * @author ASUS
15 *
16 */
17 public class ProxyConnUtils {
18
19 private static LinkedList<Connection> pool = new LinkedList<>();
20 private static String url;
21 private static String user;
22 private static String password;
23 private static String driverClass;
24 //private static Connection conn;
25 static{
26 try {
27 Properties properties = new Properties();
28 InputStream in = ProxyConnUtils.class.getResourceAsStream("/db.properties");
29 properties.load(in);
30 url = properties.getProperty("url");
31 System.err.println(url);
32 user = properties.getProperty("user");
33 password = properties.getProperty("password");
34 driverClass = properties.getProperty("driverClass");
35 Class.forName(driverClass);
36 for(int i = 0;i<3;i++){
37 final Connection conn = DriverManager.getConnection(url, user, password);
38 //对connection做代理
39 Object connProxy = Proxy.newProxyInstance(ProxyConnUtils.class.getClassLoader(),
40 new Class[]{Connection.class},
41 new InvocationHandler() {
42
43 @Override
44 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
45 //判断是否是close方法 回收连接
46 if(method.getName().equals("close")){
47 synchronized (pool) {
48 System.err.println("不能关闭");
49 pool.addLast((Connection) proxy);
50 pool.notify();
51 return null;
52 }
53 }else{
54 //若果调用的不是close方法 直接放行
55 return method.invoke(conn, args);
56 }
57 }
58 });
59 // 将代理对象添加到池中去
60 pool.add((Connection) connProxy);
61 }
62 } catch (Exception e) {
63 e.printStackTrace();
64 throw new RuntimeException(e);
65 }
66 }
67
68 //获取connection连接
69 public static Connection getConnection(){
70 synchronized (pool) {
71 if(pool.size() == 0){
72 try {
73 pool.wait();
74 } catch (Exception e) {
75 e.printStackTrace();
76 throw new RuntimeException(e);
77 }
78 }
79 Connection connection = pool.removeFirst();
80 return connection;
81 }
82 }
83 }
❸ jdbc连接数据库的几个步骤
创建一个以JDBC连接数据库的程序,包含7个步骤:
1、加载JDBC驱动程序:
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),
这通过java.lang.Class类的静态方法forName(String className)实现。
例如:
try{
//加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驱动程序类 ,加载驱动失败!");
e.printStackTrace() ;
}
成功加载后,会将Driver类的实例注册到DriverManager类中。
2、提供JDBC连接的URL
•连接URL定义了连接数据库时的协议、子协议、数据源标识。
•书写形式:协议:子协议:数据源标识
协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:(MySql的连接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为
gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。
3、创建数据库的连接
•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,
该对象就代表一个数据库的连接。
•使用DriverManager的getConnectin(String url , String username ,
String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和
密码来获得。
例如:
//连接MySql数据库,用户名和密码都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("数据库连接失败!");
se.printStackTrace() ;
}
4、创建一个Statement
•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3
种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
5、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate
和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句
,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或
DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的
语句。
具体实现的代码:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、处理结果
两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些
行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比较高效
}
(列是从左到右编号的,并且从列1开始)
7、关闭JDBC对象
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声
明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象
if(rs != null){ // 关闭记录集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 关闭声明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 关闭连接对象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
❹ hadoop怎么用java jdbc连接池
连接池只是管理一堆的 "连接 ",而不是管理怎么样去连接
,像odbc,jdbc说的只是如何与数据库连接.连接管理 "连接 ",
并不是每次要与数据库连接就创建一次服务器去数据的连接,
而是从连接 "池 "里取一个连接出来,用完后就放回连接池里,这个连接差没有
❺ jdbc连接数据库步骤都有哪些
JDBC连接数据库
•创建一个以JDBC连接数据库的程序,包含7个步骤:
1、加载JDBC驱动程序:
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),
这通过java.lang.Class类的静态方法forName(String className)实现。
例如:
try{
//加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驱动程序类 ,加载驱动失败!");
e.printStackTrace() ;
}
成功加载后,会将Driver类的实例注册到DriverManager类中。
2、提供JDBC连接的URL
•连接URL定义了连接数据库时的协议、子协议、数据源标识。
•书写形式:协议:子协议:数据源标识
协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:(MySql的连接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为
gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。
3、创建数据库的连接
•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,
该对象就代表一个数据库的连接。
•使用DriverManager的getConnectin(String url , String username ,
String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和
密码来获得。
例如:
//连接MySql数据库,用户名和密码都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("数据库连接失败!");
se.printStackTrace() ;
}
4、创建一个Statement
•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3
种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
5、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate
和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句
,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或
DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的
语句。
具体实现的代码:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、处理结果
两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些
行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比较高效
}
(列是从左到右编号的,并且从列1开始)
7、关闭JDBC对象
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声
明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象
if(rs != null){ // 关闭记录集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 关闭声明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 关闭连接对象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
❻ 如何创建jdbc链接池,怎样的链接池才是好的连接池
要创建数据库连接池: (1)你必须有数据库连接池的实现,使用比较多的是dbcp,这是apache的开源项目。(当然你也可以自己实现) (2)数据库连接信息(用户名称和密码、数据库、测试方法、必要的其他选项等等)(3)连接池的连接使用完后,一定要还给连接池
❼ JDBC连接池配置及域的配置
1.新建一个 .xml 文件,内容如下所示
[提示] 此xml文件名可以自己定,写好后放置到%TOMCAT_HOME%\con\conf\Catalina目录下即可
(* 其中myapp是目录是建立在%tomcat%/webapps/目录下的)
[“JDBC/Server2000”即连接池的名字可以由自己设定,不过该设置要保持一致]
<Context path="/myapp" docBase="myapp" debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt" timestamp="true"/>
<Resource name="JDBC/Server2000" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="JDBC/Server2000">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>net.sourceforge.jtds.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=project</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>kkf</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
</ResourceParams>
</Context>
❽ 如何用jdbc实现连接池
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
❾ 如何实现连接池
要实现连接池,一般要首先在web服务器上配置一个数据源dataSource,这个数据源中对数据库连接池连接的数据库、数据库连接驱动、连接池中最大的连接数、开始默认的连接数等各项进行设置,这样配置好以后我们就可以在项目中通过此数据源的名字进行调用。
在项目中调用连接池时,要让我们的项目跟数据源进行关联,就要在web.xml中对数据源进行注册,然后在我们的代码中就可以调用了,在调用时基于JNDI(java命名服务)来获取数据源,也就是通过查找我们配置的数据源名称找到我们配置好的数据源,数据源就能为我们提供它所表示的物理数据源的连接。
❿ 如何在tomcat里面配置jdbc连接池
一、连接池配置<bean class="org.apache.tomcat.jdbc.pool.PoolProperties">
<property name="url" value="${jdbcUrl}"/>
<!--数据库驱动-->
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<!--用户名-->
<property name="username" value="mysql"/>
<!--密码-->
<property name="password" value="123456"/>
<!--注册池JMX,默认:true-->
<property name="jmxEnabled" value="false"/>
<!--检查连接死活的时间间隔,单位:毫秒-->
<property name="validationInterval" value="30000"/>
<!--指定连接进入空闲状态时是否经过空闲对象驱逐进程的校验,如果校验未通过,则该连接被连接池断掉
值为true,则validationQuery参数必须为一个非空字串---->
<property name="testWhileIdle" value="false"/>
<!--指定连接返回到池中是时是否经过校验
值为true,则validationQuery参数必须为一个非空字串---->
<property name="testOnReturn" value="false"/>
<!--指定连接被调用时是否经过校验,如果校验未通过,则该连接被连接池断掉,并由连接池尝试调用另一个连接
值为true,则validationQuery参数必须为一个非空字串-->
<property name="testOnBorrow" value="true"/>
<!--在连接返回给调用者前用于校验连接是否有效的SQL语句,如果指定了SQL语句,则必须为一个SELECT语句,且至少有一行结果-->
<property name="validationQuery" value="select 1"/>
<!--连接池处于活动状态的数据库连接的最大数目,0表示不限制,表示最大并发-->
<property name="maxActive" value="1000"/>
<!--初始化连接数-->
<property name="initialSize" value="10"/>
<!--连接池中连接用完时,新的请求的等待时间(即等待别的连接空闲),超时返回异常,毫秒-->
<property name="maxWait" value="100000"/>
<!--以毫秒表示空闲对象驱逐进程由休眠状态进入运行状态的数值,值为非正整时表示不运行任何空闲对象驱逐进程
运行判断连接超时任务的时间间隔-->
<property name="timeBetweenEvictionRunsMillis" value="30000"/>
<!--以毫秒表示连接被空闲对象驱逐进程驱逐前在池中保持空闲状态的最小时间,连接的超时时间,默认为半小时-->
<property name="minEvictableIdleTimeMillis" value="30000"/>
<!--连接池检查每个空闲对象驱逐进程的对象数量
<property name="numTestPerEvictionRun" value="3"/>
-->
<!--连接池处于空闲状态的数据库连接的最小数目,低于此数值将会创建所欠缺的连接,设0无限制-->
<property name="minIdle" value="10"/>
<!--连接池处于空闲状态的数据库连接的最大数目,取非正整数表示不受限制,超过此数值时多余的空闲连接将会被释放-->
<property name="maxIdle" value="200"/>
<!--当清除无效连接时是否在日志中记录清除信息的标志-->
<property name="logAbandoned" value="false"/>
<!--是否清除已经超过 removeAbandonedTimeout 设置的无效连接,自动回收超时连接
启动机制:getNumActive() > getMaxActive() - 3 和 getNumIdle() < 2
假设maxActive=20,而当前18个活动连接,1个空闲连接,机制将会启动
但是只有在活动连接没有使用的时长超过“removeAbandonedTimeout”(默认300秒),的连接将被清除-->
<property name="removeAbandoned" value="true"/>
<!--以秒表示清除无效连接的时限,自我中断时间,单位秒-->
<property name="removeAbandonedTimeout" value="60"/>
<!--设置拦截器,默认为空
ConnectionState:跟踪自动提交,只读目录和事务隔离级别
StatementFinalizer:跟踪打开的语句,并关闭连接时的返回到池中
-->
<property name="jdbcInterceptors" value="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"/>
</bean>