1.JDBC
1.1 JDBC定义
JDBC(java database connectivity)是Java数据库连接技术的简称,提供使用JAVA连接各种常用数据库的能力。
1.2 为什么需要JDBC
JDBC提供了一套使用JAVA连接数据库的能力,换句话说,只有使用JDBC才能使得JAVA程序与数据库进行数据交互。在实际应用场景中,还需要加入JSP/Servlet应用服务器,作为客户端与数据库服务器的中介,实现客户端对数据库的访问。
1.3 JDBC的工作原理
1 使用JAVA连接数据库的步骤
步骤1:java应用程序编写代码
步骤2:调用JDBC API接口或是类
步骤3:加载JDBC的驱动(jar包)
步骤4:调用数据库并测试
2 常用JDBC API接口或类的种类(java.sql与javax.sql包中)
(1)DriverManager类
(2)Connection接口
(3)Statement接口
(4)ResultSet接口
3 JDBC的驱动由不同的数据库厂商提供
1.4 JDBC API
DriverManager:依据数据库的不同,管理JDBC驱动
Connection:负责连接数据库并担任传送数据的任务
Statement:由 Connection 产生、负责执行SQL语句
ResultSet:负责保存Statement执行后所产生的查询结果
执行顺序:通过DriverManager管理驱动,创建连接Connection对象,调用Statement对象执行SQL语句,调用ResultSet对象保存查询结果
1.5 JDBC的编程模板
2. 使用JDBC实现增删改查
2.1 增加(插入)
public class Test {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.注册mysql驱动
//mysql5驱动 com.mysql.jdbc.Driver
//mysql8驱动 com.mysql.cj.jdbc.Driver
Class.forName("com.mysql.cj.jdbc.Driver");
//2.管理连接
//3个字符串参数:url="jdbc:mysql://主机ip:端口号/数据库名",user="用户名",password="密码"
Connection conn =
DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test0627","root","123456");
//3.设置SQL语句字符串,value中使用?作为占位符
String sql = "insert into t_user(name,pwd,height) values(?,?,?)";
//4.创建PreparedStatement对象,调用连接对象的prepareStatement()方法,sql语句字符串作为方法参数
PreparedStatement ps = conn.prepareStatement(sql);
//5.给ps对象中每个占位符赋值,使用setObject()方法,序号表示第几个占位符,从1开始
ps.setObject(1,"张三");
ps.setObject(2,"123456");
ps.setObject(3,165);
//执行语句
ps.executeUpdate();
//关闭资源
ps.close();
conn.close();
}
}
t_user原本是一张空表
2.2 删除
public class Test {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn =
DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test0627","root","123456");
String sql = "delete from t_user where id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setObject(1,1);
ps.executeUpdate();
ps.close();
conn.close();
}
}
2.3 修改
public class Test {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn =
DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test0627","root","123456");
String sql = "update t_user set name=?,pwd=?,height=? where id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setObject(1,"李四");
ps.setObject(2,"1234");
ps.setObject(3,167);
ps.setObject(4,2);
ps.executeUpdate();
ps.close();
conn.close();
}
}
修改前:
修改后:
2.4 查询
查询之前需要先创建一个拥有对应属性的类
public class User {
private Integer id;
private String name;
private String pwd;
private Double height;
//封装的构造器和getter,setter方法省略
}
2.4.1 全部查询
public class Test {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test0627","root","123456");
String sql = "select * from t_user";
PreparedStatement ps = conn.prepareStatement(sql);
//得到查询返回的集合
ResultSet rs = ps.executeQuery();
//取出查询集合的值
User user = null;
List<User> list = new ArrayList<>();
while(rs.next()){
user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPwd(rs.getString("pwd"));
user.setHeight(rs.getDouble("height"));
list.add(user);
}
rs.close();
ps.close();
conn.close();
//遍历User集合
for (User u:list) {
System.out.println("id="+u.getId());
System.out.println("name="+u.getName());
System.out.println("pwd="+u.getPwd());
System.out.println("height="+u.getHeight());
}
}
}
查询的表内容:
查询结果:
2.4.2 模糊查询(添加try/catch)
public class Test {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps =null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test0627","root","123456");
ps = conn.prepareStatement(
"select id,name,height " +
"from t_user " +
"where name like concat('%',?,'%')" +
"order by id desc"
);
ps.setObject(1,"张");
rs = ps.executeQuery();
User user = null;
List<User> list = new ArrayList<>();
while(rs.next()){
user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setHeight(rs.getDouble("height"));
list.add(user);
}
for (int i = 0; i < list.size(); i++) {
System.out.println("id:"+list.get(i).getId());
System.out.println("姓名:"+list.get(i).getName());
System.out.println("身高:"+list.get(i).getHeight());
System.out.println();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
查询结果: