1、如何使用JDBC ✨
🌹主要由这八个步骤实现:
① 注册驱动
② 获取连接
③ 编写SQL语句
④ 创建preparedstatement并且传入SQL语句结构
⑤ 占位符赋值
⑥ 发送SQL语句,并且获取结果
⑦ 结果集解析
⑧ 关闭资源
//1.注册驱动
方案1: 调用静态方法,但是会注册两次
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
方案2: 反射触发
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
Connection connection = DriverManager.getConnection();
三种getConnection连接方式
3个参数 (String url,String user,String password)
2个参数 (String url,Properties info(user password))
1个参数 (String url?user=账号&password=密码 )
//3.编写sql语句
String sql = "sql语句结构";
//4.创建statement
//静态(可以被注入攻击)
Statement statement = connection.createStatement();
//预编译(建议)
PreparedStatement preparedstatement = connection.preparedStatement(sql);
//5.占位符赋值
preparedstatement.setObject(?的位置 从左到右 从1开始,值)
//6.发送sql语句获取结果
int rows = executeUpdate(); //非DQL
Resultset = executeQuery(); //DQL
//7.查询结果集解析
//移动光标指向行数据 next(); if(next()) while(next())
//获取列的数据即可 get类型(int 列的下角标 从1开始 | int 列的label (别名或者列名))
//获取列的信息 getMetadata(); ResultsetMetaData对象 包含的就是列的信息
getColumnCount(); | getCloumnLebal(index)
//8.关闭资源
close();
2、对数据库进行增删查改
🎈【1】添加数据
@Test
public void testInsert() throws ClassNotFoundException, SQLException {
//插入一条 (xiebo, 777777, 软件设计师)
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.连接
Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
//3.sql
String sql = "insert into t_user(account, password, nickname) values(?,?,?);";
//4.预处理
PreparedStatement ps = conn.prepareStatement(sql);
//5.占位符填充
ps.setObject(1, "xiebo");
ps.setObject(2, "777777");
ps.setObject(3, "软件设计师");
//6.发送sql, 返回改变行数
int row = ps.executeUpdate();
//7.解析
if (row > 0) System.out.println("插入成功");
else System.out.println("插入失败");
//8.释放资源
ps.close();
conn.close();
}
🎈【2】修改数据
@Test
public void testUpdate() throws Exception {
//修改id=3的password为111
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
String sql = "update t_user set password=? where id=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setObject(1, "111");
ps.setObject(2, 3);
int row = ps.executeUpdate();
if (row > 0) System.out.println("修改成功");
else System.out.println("修改失败");
ps.close();
conn.close();
}
🎈【3】删除数据
@Test
public void testDelete() throws Exception {
//删除id=3的数据
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
String sql = "delete from t_user where id=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setObject(1, 3);
int row = ps.executeUpdate();
if (row > 0) System.out.println("删除成功");
else System.out.println("删除失败");
ps.close();
conn.close();
}
🎈【4】查询数据
@Test
public void testSelect() throws Exception {
// 将每行的列:值映射装到Map的key:value中,再把所有行装入List,使用List<Map>存放查询数据
//注册驱动,建立连接
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
//预处理SQL
String sql = "select id, account as ac from t_user";
PreparedStatement ps = conn.prepareStatement(sql);
//发送SQL并返回结果集
ResultSet resultSet = ps.executeQuery();
//创建保存数据的集合
List<Map> list = new ArrayList<>();
//获取列的信息对象
//todo: metaData 装的当前结果集列的信息对象
ResultSetMetaData metaData = resultSet.getMetaData();
//得到列的数量
int colNum = metaData.getColumnCount();
//按行解析结果集
while(resultSet.next()) {
Map map = new HashMap();
//自动解析列
for (int i = 1; i <= colNum; i++) {
//获取列名
String colName = metaData.getColumnLabel(i);
//获取列值
Object value = resultSet.getObject(i);
//放入map
map.put(colName, value);
}
list.add(map);
}
System.out.println(list);
//关闭资源
resultSet.close();
ps.close();
conn.close();
}
3、完整代码
package com.atguigu.connection;
import org.junit.Test;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class PSCrudPart {
@Test
public void testInsert() throws ClassNotFoundException, SQLException {
//插入一条 (xiebo, 777777, 软件设计师)
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.连接
Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
//3.sql
String sql = "insert into t_user(account, password, nickname) values(?,?,?);";
//4.预处理
PreparedStatement ps = conn.prepareStatement(sql);
//5.占位符填充
ps.setObject(1, "xiebo");
ps.setObject(2, "777777");
ps.setObject(3, "软件设计师");
//6.发送sql, 返回改变行数
int row = ps.executeUpdate();
//7.解析
if (row > 0) System.out.println("插入成功");
else System.out.println("插入失败");
//8.释放资源
ps.close();
conn.close();
}
@Test
public void testUpdate() throws Exception {
//修改id=3的password为111
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
String sql = "update t_user set password=? where id=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setObject(1, "111");
ps.setObject(2, 3);
int row = ps.executeUpdate();
if (row > 0) System.out.println("修改成功");
else System.out.println("修改失败");
ps.close();
conn.close();
}
@Test
public void testDelete() throws Exception {
//删除id=3的数据
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
String sql = "delete from t_user where id=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setObject(1, 3);
int row = ps.executeUpdate();
if (row > 0) System.out.println("删除成功");
else System.out.println("删除失败");
}
@Test
public void testSelect() throws Exception {
// 将每行的列:值映射装到Map的key:value中,再把所有行装入List,使用List<Map>存放查询数据
//注册驱动,建立连接
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql:///atguigu?user=root&password=123456");
//预处理SQL
String sql = "select id, account as ac from t_user";
PreparedStatement ps = conn.prepareStatement(sql);
//发送SQL并返回结果集
ResultSet resultSet = ps.executeQuery();
//创建保存数据的集合
List<Map> list = new ArrayList<>();
//获取列的信息对象
//todo: metaData 装的当前结果集列的信息对象
ResultSetMetaData metaData = resultSet.getMetaData();
//得到列的数量
int colNum = metaData.getColumnCount();
//按行解析结果集
while(resultSet.next()) {
Map map = new HashMap();
//自动解析列
for (int i = 1; i <= colNum; i++) {
//获取列名
String colName = metaData.getColumnLabel(i);
//获取列值
Object value = resultSet.getObject(i);
//放入map
map.put(colName, value);
}
list.add(map);
}
System.out.println(list);
//关闭资源
resultSet.close();
ps.close();
conn.close();
}
}