JDBC(c3p0)

Posted ltjava

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC(c3p0)相关的知识,希望对你有一定的参考价值。

# JDBC

Java Database Connectivity,java数据库连接

JDBC的本质是java对所有关系型数据库连接操作所制定的一套规则,就是接口。

不同的数据库针对这套规则制定了相对应的实现类,我们需要使用这些已经做好的实现类,来使用java对数据库进行连接和操作。

步骤:

1、导入jar包

在项目的根目录中创建lib文件夹,将mysql-connector-java-5.1.37-bin复制到lib中
右键点击该jar包选择 build path 点击 Add to build path

try {
//2、注册驱动
Class.forName("com.mysql.jdbc.Driver");

//3、获取连接对象
//参数: 1、要访问的数据库,2、用户名 3、密码
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/school", "root", "root");

//4、SQL语句的编写
String sql = "insert into student values(1007,‘LOP‘,22,‘女‘,98)";

//5、获取执行对象
state = conn.createStatement();


//6、执行SQL语句
int row = state.executeUpdate(sql);

//7、处理执行结果
if(row > 0){
System.out.println("添加成功");
}else{
System.out.println("添加失败");
}

} catch (ClassNotFoundException e) {
System.out.println("Driver类未找到");
}catch (SQLException e) {
System.out.println("访问的数据库有问题");
}finally {
//8、释放资源
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(state != null){
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

 

7、处理执行结果:

如果是增删改,判断是否成功

executeUpdate方法返回int ,用于判断增删改影响的行数

如果是查询:

executeQuery方法返回ResultSet结果集。查询得到的结果封装在集合中,

需要遍历集合来获取所有查询结果


方法:

1、next(): 判断是否有下一个可以获取的结果集,返回布尔值
2、getxxx(int):在指定的记录中,通过字段的位置获取字段值
3、getxxx(String):在指定记录中通过字段名获得字段值


代码:
Result Set = state.executeQuery();
while(set.next()){
set.getxxx(int/String);s
}


## 二、 PrepareStatement

预编译的SQL

作用:在拼接SQL语句字符串时,可以根据SQL语句的拼接时,在数据有误的情况下,完成功能的执行

例如: xxx‘ or ‘1‘ = ‘1,完成登录时

使用步骤:

1、获取对象,并传入要执行的 SQL语句

String sql = “ xxxxxxx”

PrepareStatement state = conn.prepareStatement(sql)

2、向SQL语句的占位符中添加数据

state.setxxx(位置,数据)
例如:

sql = "select * from 表名 where username = ? and password = ?"

state.setString(1,username)
state.setString(2,password)


3、执行SQL语句,不需要传入SQL语句

state.executeQuery()或者state.executeUpdate()


## 三、 数据库连接池

概念:数据库连接池的本质是一个存储若干数据库连接对象的容器(集合),用户在访问数据库时,可以直接从该容器中获取连接对象,对数据库进行操作,在使用完毕后,将此连接对象归还到池中。


好处:

1、节省资源

2、提高访问效率


DataSource连接池接口

1、getConnection():获取连接
2、close():释放连接

一般这个接口不会由我们自己去实现,都由第三方做好的jar包

1、c3p0:Apache的

步骤:

1、导入c3p0-0.9.5.2.jar 和mchange-commons-java-0.2.12.jar

2、配置c3p0-config.xml文件

3、获取连接池

DataSource ds = new ComboPooledDataSource("连接池名称");

4、获取连接对象

ds.getConnection();

5、归还连接(归还连接对象)

ds.getConnection().close();

 


dbUtils工具包:

查询所有记录(对象的集合):

BeanListHandler<实体类名>(实体类.class)

例如:
String sql = "select * from user";

List<User> user = queryRunner.query(sql, new BeanListHandler<User>(User.class));

查询单个记录(对象):

BeanHandler<实体类名>(实体类.class),?的值)
例如:
String sql = "select * from user where id = ?";
User user = queryRunner.query(sql, new BeanHandler<User>(User.class), id);

查询聚合函数:

ScalarHandler<实体类名>(实体类.class),?的值)
例如:
sql = "select count(*) from user where username like ?""
long row = queryRunner.query(sql,new ScalarHandler<>(), x+"%");

 

以上是关于JDBC(c3p0)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring、hibernate 和 C3P0 的设置重现 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

使用 C3P0 的 JDBC 连接池

使用 JDBC / c3p0 连接到 MariaDB

JDBC(c3p0)

JDBC连接池之C3P0

jdbc c3p0连接mysql 失败 原因汇总,求助