JDBC
JDBC知识
- JDBC的CRUD
- JDBC的主要API
- (Druid)德鲁伊数据库连接池
JDBC
JDBC的概念
使用Java语言操作关系型数据库的一套API(接口),而接口的实现类就是数据库驱动jar包
Java操作数据库
第一步:编写Java代码
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
String url = "jdbc:mysql://127.0.0.1:3306/db04?useSSL=false";
String username = "root";
String password = "1234";
Connection connection = DriverManager.getConnection(url, username, password);
//3.创建sql语句
String sql = "update account set money=200 where id=1";
//4.获取执行sql的对象statement
Statement stmt = connection.createStatement();
//5.执行sql语句
int count = stmt.executeUpdate(sql);//受影响的行数
//6.输出结果
System.out.println(count);
//7.释放资源
stmt.close();
connection.close();
第二步:Java代码将SQL发送到MySQL服务端
第三步:MySQL服务端接收到SQL语句并执行该SQL语句
第四步:将SQL语句执行的结果返回给Java代码
JDBC API
DriverManager
DriverManager(驱动管理类)作用:
- 注册驱动
- 获取数据库连接
Connection
Connection(数据库连接对象)作用:
- 获取执行 SQL 的对象
- 管理事务
开启事务 : BEGIN; 或者 START TRANSACTION;
提交事务 : COMMIT;
回滚事务 : ROLLBACK;
Statement
Statement对象的作用就是用来执行SQL语句
ResultSet
ResultSet(结果集对象)
PreparedStatement
PreparedStatement作用: 预编译SQL语句并执行:预防SQL注入问题
String sql = "select * from tb_user where username=? and password= ?";
System.out.println(sql);
//创建sql执行对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//配置参数
preparedStatement.setString(1,name);
preparedStatement.setString(2,pwd);
数据库连接池 Druid
配置druid.properties
1 | driverClassName=com.mysql.cj.jdbc.Driver |
初始化连接数量
1 | initialSize=5 |
最大连接数
1 | maxActive=10 |
最大等待时间
1 | maxWait=3000 |
获取配置
//1.导入jar包
//2.定义配置文件
//3. 加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("src/druid.properties"));
//4. 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//5. 获取数据库连接 Connection
Connection connection = dataSource.getConnection();
//System.out.println(System.getProperty("user.dir"));
JDBC的CRUD
增加
// 接收页面提交的参数
String brandName = "香飘飘";
String companyName = "香飘飘";
int ordered = 1;
String description = "绕地球一圈";
int status = 1;
//定义执行sql语句
String sql = "insert into tb_brand(brand_name, company_name, ordered, description, status) values(?,?,?,?,?);";
//获取执行对象,并预编译
PreparedStatement pstmt = conn.prepareStatement(sql);
//配置参数
//4. 设置参数
pstmt.setString(1,brandName);
pstmt.setString(2,companyName);
pstmt.setInt(3,ordered);
pstmt.setString(4,description);
pstmt.setInt(5,status);
//执行sql语句
int i = pstmt.executeUpdate();
//输出结果
System.out.println(i>0);
删除
// 接收页面提交的参数
int id=4;
//定义执行sql语句
String sql = "delete from tb_brand where id=?";
//获取执行对象,并预编译
PreparedStatement pstmt = conn.prepareStatement(sql);
//配置参数
//4. 设置参数
pstmt.setInt(1,id);
//执行sql语句
int i = pstmt.executeUpdate();
//输出结果
System.out.println(i>0);
pstmt.close();
conn.close();
修改
// 接收页面提交的参数
String brandName = "香飘飘";
String companyName = "香飘飘";
int ordered = 1000;
String description = "绕地球三圈";
int status = 1;
int id=4;
//定义执行sql语句
String sql = " update tb_brand\n" +
" set brand_name = ?,\n" +
" company_name= ?,\n" +
" ordered = ?,\n" +
" description = ?,\n" +
" status = ?\n" +
" where id = ?";
//获取执行对象,并预编译
PreparedStatement pstmt = conn.prepareStatement(sql);
//配置参数
//4. 设置参数
pstmt.setString(1,brandName);
pstmt.setString(2,companyName);
pstmt.setInt(3,ordered);
pstmt.setString(4,description);
pstmt.setInt(5,status);
pstmt.setInt(6,id);
//执行sql语句
int i = pstmt.executeUpdate();
//输出结果
System.out.println(i>0);
pstmt.close();
conn.close();
查找
//定义执行sql语句
String sql = "SELECT * FROM tb_brand;";
//获取执行对象,并预编译
PreparedStatement preparedStatement = conn.prepareStatement(sql);
//配置参数
//执行sql语句,获取结果集
ResultSet rs = preparedStatement.executeQuery();
//6. 处理结果 List<Brand> 封装Brand对象,装载List集合
ArrayList<Brand> arrayList = new ArrayList<>();
Brand brand;
while (rs.next()) {//判断是否有数据,光标下移数据库
//获取数据
int id = rs.getInt("id");
String brandName = rs.getString("brand_name");
String companyName = rs.getString("company_name");
int ordered = rs.getInt("ordered");
String description = rs.getString("description");
int status = rs.getInt("status");
//封装Brand对象
brand = new Brand();
brand.setId(id);
brand.setBrandName(brandName);
brand.setCompanyName(companyName);
brand.setOrdered(ordered);
brand.setDescription(description);
brand.setStatus(status);
//装载集合
arrayList.add(brand);
preparedStatement.close();
conn.close();