# 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 "%");