目录
一 JDBC
1. 什么是jdbc?
Jdbc就是数据库连接
Jdbc核心类: driverManager , Connection ,Statement , ResultSet
(1) DriverManager (驱动管理者):
1.注册驱动:可以知道jdbc要使用哪个驱动
2.获取Connection:可以获取到Connection,说明已经和数据库连接上
(2) Connection(数据库连接对象)
1. Connection最为重要的一个方法就是获取Statement对象
(3) Statement(sql执行对象)
1.向数据库发送sql
2.执行sql并且获取执行结果
核心方法:void execute
(4) ResultSet(数据结果集对象)
二 JDBC使用
- 导入对应版本的驱动包(可以在项目结构中的依赖找到对应的模块看是否导入成功,新建一个lib文件,将jar包导入该目录,然后再刷新以确定导入成功。)
2.在类中加载JDBC驱动
(因为版本问题,如果运行后爆红,记得和我下面一样加上‘cj’)
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver") ;
3.连接数据库,获取Connection对象
//获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/crm?" , "root" , "1234") ;
if(connection!=null){
System.out.println("连接成功");
}
(三个参数分别是:你连接的数据库的ip,端口和数据库表名 , 数据库账号 , 数据库密码)
4.获取sql执行对象
//获取sql执行对象
Statement sta = connection.createStatement() ;
5.编写sql语句
//编写sql语句
String addsql = "insert into addform values ('3' , '麻子' , '男' , 18 ,'闷骚' , 15151 , '1' , '2') " ;
String deletesql = "delete from addform where name='麻子'" ;
String selectsql = "select * from addform" ;
String updatesql = "update addform set name = '三张' , age = 88 where name = '张三' " ;
(不同的sql语句编写的也不一样,需要根据你的需求自己去写,我这里只写了基础的增删改查语句。)
6.执行sql,返回结果
package dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class jdbc_dao {
Connection con = null ;
Statement sta = null ;
ResultSet res = null ;
public jdbc_dao(Connection con , Statement sta , ResultSet res){
this.con = con ;
this.sta = sta ;
this.res = res ;
}
//增
public boolean add(String sql) throws SQLException {
int num = sta.executeUpdate(sql) ;
if(num>0){
System.out.println("数据添加成功");
return true ;
}
System.out.println("数据添加失败");
return false ;
}
//删
public boolean delete(String sql) throws SQLException {
int num = sta.executeUpdate(sql) ;
if(num>0){
System.out.println("数据删除成功");
return true ;
}
System.out.println("数据删除失败");
return false ;
}
//改
public boolean update(String sql) throws SQLException {
int num = sta.executeUpdate(sql) ;
if(num>0){
System.out.println("数据修改成功");
return true ;
}
System.out.println("数据修改失败");
return false ;
}
//查
public void select(String sql) throws SQLException{
res = sta.executeQuery(sql) ;
while (res.next()){
String code = res.getString("code") ;
String name = res.getString("name") ;
String sex = res.getString("sex") ;
int age = res.getInt("age") ;
String type = res.getString("type") ;
double price = res.getDouble("price") ;
String remark = res.getString("remark") ;
String attention = res.getString("attention") ;
System.out.println(code+" "+name+" "+sex+" "+age+" "+type+" "+price+" "+remark+" "+attention);
}
}
}
(这里我分别将增删改查都封装在一个类里面,我按照自己的需求进行调用方法即可 , 需要注意的一点是:增 ,删 , 改都是调用executeUpdate的方法,但是查询语句调用的executeJquery的方法,而且返回值也是一个数据集 , 就是查到的所有数据,所以需要用next方法按每行光标不断下移去遍历所有数据据)
7.释放资源
//关闭
sta.close();
connection.close();
res.close();
三 连接池
1.三大连接池
2.连接池概述
我们不用连接池在写JDBC的时候会发现,我们每次需要连接的时候就创建一个,但是用完必须要销毁,下次要用的话又要重新创建和销毁,这样会显得很麻烦。而连接池就能有已下作用:
- 用完不销毁,先存起来;
- 一开始的时候,就初始化多个连接;
- 给连接加上最大空闲时间限定;
- 加上最大连接数限定
3.如果创建连接池
创建连接池主要分为以下几步:
1.需要导入连接池相关的jar包(这里使用的c3p0连接池)
2.配置好对应的xml文件 , 写好自己数据库的连接信息
3.创建连接池
ComboPooledDataSource mysql = new ComboPooledDataSource("mysql");
qr = new QueryRunner(mysql);
4.使用根据执行查询操作
//查询所有员工信息
public static List<Emp> findAllEmps() throws SQLException {
// List<Emp> list = new ArrayList<>() ;
String sql = "select * from emp" ;
List<Emp> query = qr.query(sql, new BeanListHandler<Emp>(Emp.class));
return query ;
//预编译sql
// PreparedStatement preparedStatement = con.prepareStatement(sql);
// //执行sql语句
// ResultSet emps = preparedStatement.executeQuery();//返回员工结果集
// //遍历员工结果集
// while(emps.next()){
// int empon = emps.getInt("empno") ;
// String ename = emps.getString("ename");
// String job = emps.getString("job") ;
// int mgr = emps.getInt("mgr") ;
// Date hiredate = emps.getDate("hiredate") ;
// Double sal = emps.getDouble("sal") ;
// Double comm = emps.getDouble("comm") ;
// int deptno = emps.getInt("deptno") ;
// list.add(new Emp(empon , ename , job , mgr , hiredate , sal , comm , deptno)) ;
// }
// release();//释放资源
// return list ;
}
以上就是本周总结,下周见!