java jdbc 连接池例子_JAVA jdbc(数据库连接池)学习笔记(一)

学习内容:

1.JDBC的含义...

JDBC想必学过JAVA的就不会陌生,JDBC到底是什么呢?其实就是由JAVA的一些类和接口构成的API,保存在java.sql和javax.sql..包中的一些API...

2.使用JDBC的原因...

那么为什么要使用,这个想必大家也是更为了解了,一个应用程序如果不和数据库进行连接,那这根本就不算是个应用程序,那么应用程序是不能直接对数据库进行操作的,那么就需要一个辅助工具去连接数据库,从而操作数据库...那这个辅助的工具就是JDBC了,这个仅限于JAVA应用程序...其实总体的规模就是这样:应用程序——>JDBC——>(mysql driver——>mysql)

JDBC——>(oracle driver——>oracle)

JDBC——>(DB2 driver——>db2)就是这么简单的事...多余的就不罗嗦了...

3.如何使用JDBC...

如何使用JDBC,才是真正的重点...使用JDBC分为几个步骤...

我这里只对链接mysql进行讲解...

i.首先注册驱动

Class.forName("com.mysql.Driver");//这种方式是最好的,不会对具体驱动产生依赖...

DriverManager.registerDriver(com.mysql.jdbc.Driver);//会产生两个相同的驱动,并会对具体驱动产生依赖...

System.setProperty("jdbc.drivers","driver1:driver2");//基本不常用,所以可以不用记,一般就使用第一种就行了...

ii.建立连接

Connection conn = DriverManager.getConnection(url, user, password);

iii.创建执行SQL语句...

Statement st =conn.createStatement();

st.executeQuery(sql);

PreparedStatement

String sql= "select * from table_name where col_name=?";

PreparedStatement ps=conn.preparedStatement(sql);

ps.setString(1, "col_value");

ps.executeQuery();

iv.处理执行结果...

ResultSet rs =statement.executeQuery(sql);

While(rs.next()){

rs.getString(“col_name”);

rs.getInt(“col_name”);

}

v.释放资源...

释放资源这是必须的,使用close()进行关闭...由于数据库的资源是非常珍贵的,因此只要我们不去使用资源的时候,一定要记得释放...

先来个例子:还是例子更加的好理解...

import java.sql.*;//1.引包是必须的...

public classJDBC_1_1 {static final String JDBC_DRIVER="com.mysql.jdbc.Driver";static final String DB_URL ="jdbc:mysql://localhost:3306/emp";//这个链接是我本机的数据库emp...emp里有个表格叫employees....

/*表格的信息

*create table employees

*(

* id int not null,

* first varchar(255) not null,

* last varchar(255) not null,

* age int not null

*);*/

static final String USER="root";//登陆数据库时的用户名...

static final String PAS="49681888";登陆时的密码...public static voidmain(String[] args) {//TODO Auto-generated method stub

Connection conn=null;

Statement stmt=null;// try{//2.注册JDBC驱动程序...

Class.forName("com.mysql.jdbc.Driver");//3.打开一个链接...

System.out.println("Connection database....");

conn=DriverManager.getConnection(DB_URL,USER,PAS);//4.执行一个操作...

System.out.println("Creating statement");

stmt=conn.createStatement();//String sql;//sql="select id,first,last,age from employees"; 这个是查询操作...//ResultSet rs=stmt.executeQuery(sql);

String sql_1="insert into employees " + "values (7, 'z', 'yh', 20)";//插入操作...

stmt.executeUpdate(sql_1);5.提取数据...//while(rs.next()){//rs用来保存sql执行后的结果...//int id=rs.getInt("id");//int age=rs.getInt("age");//String first=rs.getString("first");//String last=rs.getString("last");

//System.out.println(id+" "+age+" "+first+" "+last);//}6.清理环境//rs.close();

stmt.close();

conn.close();

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

System.out.println("no class");

}finally{if(stmt!=null){try{

stmt.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}if(conn!=null){try{

conn.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

System.out.println("Goodbye");

}

}

其他操作,比如说删除啊,更改啊,这个模式基本都差不多...就不进行解释了...

注意:如果我们使用JDBC的时候,一定要检查检查自己的的jdk的lib文件夹下有没有mysql-connector-java-5.1.18-bin.jar这个压缩文件..如果没有,那么程序运行时会出现错误...解决方法就是我们下一个mysql-connector-java-5.1.18-bin.jar这个文件,几k而已,下载完毕之后直接拷贝到jdk的lib文件夹下即可..

如果使用的是eclipse,我们还要导入这个文件...右击我们建立的项目文件,然后点击build path——>configure build path,弹出对话框以后,点击Libraries——>Add External JARs...找到这个mysql-connector-java-5.1.18-bin.jar文件导入,然后就可以了...

4.使用JDBC实现CURD操作...什么是CURD操作呢?其实就是对数据进行更新,删除等操作...

这里我们采用分层操作...这个代码很长...

首先是User实体...

packageJDBC_3;importjava.util.Date;class User{ //user类..

private intid;privateString name;privateDate birthday;private floatmoney;publicUser(){

}public User(int id,String name,Date birthday,floatmoney){this.id=id;this.name=name;this.birthday=birthday;this.money=money;

}public intgetid(){returnid;

}public void setId(intid) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicDate getBirthday() {returnbirthday;

}public voidsetBirthday(Date birthday) {this.birthday =birthday;

}public floatgetMoney() {returnmoney;

}public void setMoney(floatmoney) {this.money =money;

}

@OverridepublicString toString(){return "[id="+id+",name="+name+",birthday="+birthday+",money="+money+"]";

}

}

接着是我们的Dao层,就是接口...

packageJDBC_3;interfaceUserDao{public abstract voidaddUser(User user);public abstract User getUserById(intuserid);public abstract intupdate(User user);public abstract intdelete(User user);

}

然后是实现接口的类...

packageJDBC_3;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.sql.Date;importjava.sql.ResultSet;/** JDBC实现crud操作

* crud操作就是对数据进行增删改查...

**/

public class JDBC_3_1_server implementsUserDao{static final String DB_URL="jdbc:mysql://localhost:3306/emp";static final String user_1="root";static final String pas="49681888";static{try{

Class.forName("com.mysql.jdbc.Driver");

}catch(ClassNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}public voidaddUser(User user){

Connection cn=null;

PreparedStatement ps=null;try{

cn=DriverManager.getConnection(DB_URL,user_1,pas);

String sql="insert into userr values(2,'clearlove','1995-01-26',200)";//String sql="insert into userr values(?,?,?,?)";这句话是传参数是未知的,需要我们进行获取...

ps=cn.prepareStatement(sql);//这四个函数就是为了获取我们插入的信息...上面采用了直接在sql里写入我们要插入的数据,其实我们也可以在主函数里进行传参...见下面主函数...//ps.setInt(1,user.getid());//ps.setString(2,user.getName());//ps.setDate(3, new Date(user.getBirthday().getTime()));//ps.setFloat(4, 20);

int count=ps.executeUpdate();

System.out.println("添加的记录数"+count);

ps.close();

cn.close();

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{if(ps!=null){try{

ps.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{if(cn!=null){try{

cn.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

}public User getUserById(intuserid){

Connection cn=null;

PreparedStatement ps=null;

ResultSet rs=null;try{

cn=DriverManager.getConnection(DB_URL,user_1,pas);

String sql="select * from userr where id=1";//导入sql语句...

ps=cn.prepareStatement(sql);//保存执行sql语句后的结果对象...

rs=ps.executeQuery();

ps.close();

cn.close();

rs.close();

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{if(ps!=null){try{

ps.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}if(rs!=null){try{

rs.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}if(cn!=null){try{

cn.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}return null;

}public intupdate(User user){

Connection cn=null;

PreparedStatement ps=null;try{

cn=DriverManager.getConnection(DB_URL,user_1,pas);

String sql="update userr set name='clearlove',birthday='1994-12-19',money=60 where id=1";

ps=cn.prepareStatement(sql);int count=ps.executeUpdate();returncount;

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{

cn.close();

ps.close();

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}return 0;

}public intdelete(User user){

Connection cn=null;

PreparedStatement ps=null;try{

cn=DriverManager.getConnection(DB_URL,user_1,pas);

String sql="delete from userr where id=1";

ps=cn.prepareStatement(sql);int count=-1;

count=ps.executeUpdate();returncount;

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{

cn.close();

ps.close();

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}return 0;

}

}

接着是服务层...

packageJDBC_3;classuserserves {privateUserDao userDao;publicuserserves(){

userDao=DaoFactory.getInstance().createUserDao();//通过工厂实例化一个例子。。

System.out.println("userDao "+userDao);

}public voidregist(User user){if(user==null){

System.out.println("注册表信息无效...");

}else{

userDao.addUser(user);

}

}public User query(intuserId){

User user=userDao.getUserById(userId);if(user == null){

System.out.println("查询结果为空!!");

}else{

System.out.println(user.getid()+"\t"+user.getName()+"\t"+user.getBirthday()+"\t"+user.getMoney());

}returnuserDao.getUserById(userId);

}public voidupdate(User user){if(user.getid()<0){

System.out.println("用户id无效,重新输入");

}else{

userDao.update(user);

}

}public voiddelete(User user){if(user.getid()<0){

System.out.println("用户id无效,重新输入");

}else{

userDao.delete(user);

}

}

}

定义一个工厂模式来实例化对象UserDao。。。

packageJDBC_3;classDaoFactory{private static UserDao userdao=null;private static DaoFactory instance= newDaoFactory();privateDaoFactory(){try{

userdao=(UserDao)Class.forName("JDBC_3.JDBC_3_1_server").newInstance();

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}public staticDaoFactory getInstance(){returninstance;

}publicUserDao createUserDao(){returnuserdao;

}

}

最后是测试类...

packageJDBC_3;importjava.sql.Date;public classJDBC_3_1_ceshi {public static voidmain(String[] args) {//TODO Auto-generated method stub

userserves userse=newuserserves();

System.out.println("添加用户");

userse.regist(new User()); //这句话我们也可以这样//userse.regist(new User(1,"clearlove","1995-01-26",300));这样写我们可以固定传参...但是上面的一些代码就要进行修改了...

}

}

上面的代码估计是有点长,但是也没关系...一名优秀的程序员这点代码对于我们来说算什么呢?其实上面的例子是很好理解的...都是一些基本的东西...

我们除了上述那种方式可以对类名进行加载,我们还可以使用proprties...是一种很灵活的方式...

privateDaoFactory(){/*** 通过读取属性文件来动态的加载Dao层类*/Properties prop= newProperties();try{

FileInputStream fis= new FileInputStream("src/com/weijia/domain/daoconfig.properties");

prop.load(fis);

String className= prop.getProperty("userDaoClass");

Class> clazz =Class.forName(className);

userDao=(UserDao)clazz.newInstance();

fis.close();

}catch(Exception e){}

}

这里的数据库就是一个简单的数据库...

create tableuserr

(

idint not null,

namevarchar(255) not null,

birthday Date,money float not null);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我之前理解错了你的问题,__TimerPool并不是JDBC连接池,而是Payara Server中用于管理定时任务的线程池。而JDBC连接池是Payara Server中的另一个重要组件,用于管理和维护应用程序与数据库之间的连接。下面是关于JDBC连接池的一些信息: JDBC连接池是Payara Server中的一个重要组件,它可以帮助应用程序管理和维护与数据库之间的连接,提高应用程序的性能和可靠性。JDBC连接池可以缓存数据库连接,避免每次请求都建立新的连接,从而减少连接建立和断开的开销。 在Payara Server中,JDBC连接池连接池管理器进行管理,连接池管理器可以根据应用程序的需求自动创建和回收连接。连接池管理器还可以配置连接池的大小、最大连接数、最小连接数等参数,以满足应用程序的需求。 JDBC连接池在Payara Server中的作用如下: 1. 提高性能:JDBC连接池可以缓存数据库连接,避免每次请求都建立新的连接,从而减少连接建立和断开的开销,提高应用程序的性能。 2. 提高可靠性:JDBC连接池可以自动检测和回收失效的连接,避免应用程序因为连接失效而出现异常。 3. 管理连接:JDBC连接池可以管理和维护连接,确保连接池中的连接始终处于可用状态。 总之,JDBC连接池是Payara Server中的一个重要组件,它可以帮助应用程序管理和维护与数据库之间的连接,提高应用程序的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值