什么是JDBC?
概念:JDBC(Java DataBase Connectivity java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的。可以实现Java代码操作数据库。
本质:Java官方提供的接口(规范)。
创建数据库
//创建一个名为mydb的数据库
create database mydb;
创建表格
//创建一个名为student的表格
create table student(
stuId int primary key auto_increment,
stuName varchar(20),
stuSex varchar(2),
stuAge int,
stuAddr varchar(50)
);
插入数据
#向名为student的表格添加数据(id字段添加了自增,不需要手动填入数据)
INSERT INTO student(stuName,stuSex,stuAge,stuAddr)VALUES
('张三','男',20,'河南'),
('李四','男',20,'四川'),
('翠花','女',18,'东北'),
('熊二','男',20,'狗熊岭');
检查数据库是否创建成功
创建Java实体类,(类的名字和数据库对应,类的属性名与表的字段名对应)
private int StuId;
private String StuName;
private String StuSex;
private int StuAge;
private String StuAddr;
按住alt+inside建,第一个(Constructor)第一次全不选,第二次全选,第二个(Getter and Setter)和第三个全选
public class Student {
private int StuId;
private String StuName;
private String StuSex;
private int StuAge;
private String StuAddr;
public Student(int stuId) {
StuId = stuId;
}
@Override
public String toString() {
return "Student{" +
"StuId=" + StuId +
", StuName='" + StuName + '\'' +
", StuSex='" + StuSex + '\'' +
", StuAge=" + StuAge +
", StuAddr='" + StuAddr + '\'' +
'}';
}
public Student() {
}
public Student(int stuId, String stuName, String stuSex, int stuAge, String stuAddr) {
StuId = stuId;
StuName = stuName;
StuSex = stuSex;
StuAge = stuAge;
StuAddr = stuAddr;
}
public int getStuId() {
return StuId;
}
public void setStuId(int stuId) {
StuId = stuId;
}
public String getStuName() {
return StuName;
}
public void setStuName(String stuName) {
StuName = stuName;
}
public String getStuSex() {
return StuSex;
}
public void setStuSex(String stuSex) {
StuSex = stuSex;
}
public int getStuAge() {
return StuAge;
}
public void setStuAge(int stuAge) {
StuAge = stuAge;
}
public String getStuAddr() {
return StuAddr;
}
public void setStuAddr(String stuAddr) {
StuAddr = stuAddr;
}
}
连接数据库
public class StudentTest {
//JDBC连接数据库,需要配置四大参数,同时需要导入数据库对应的驱动包
private String driver="com.mysql.cj.jdbc.Driver";
private String url="jdbc:mysql://127.0.0.1:3306/mydb?
useSSL=false&serverTimezone=UTC";
private String username="root";
private String password="123";
查询数据:
@Test
public void testSelectAll() throws Exception{
//JDBC操作数据库的步骤
//首先在项目根目录创建lib文件夹,放入jdbc驱动程序,然后Add As Library
//加载数据库驱动
Class.forName(driver);
//使用驱动管理器来获得连接---获得一个数据库连接对象Connection
Connection con=DriverManager.getConnection(url, username, password); //
生成方法调用返回值的快捷键:ctrl + alt + v
//使用Connection创建PreparedStatement预处理对象---PreparedStatement对象可以
执行带 ? 的sql语句
String sql="select * from student";
PreparedStatement pstm = con.prepareStatement(sql);
//使用PreparedStatement对象执行SQL语句,获得ResultSet结果集对象
ResultSet rs = pstm.executeQuery();
//操作判断--增删改返回的是影响的行数(返回值是int),只有查询获得结果集(返回值
ResultSet)
//让结果集的游标不断的往下移动,直到没有数据的时候结束循环
List<Student> studentList=new ArrayList<>(); //定义集合(大的容器),用来装
Student对象(小容器)
while(rs.next()){
//根据字段名称获取表中的数据
int stuId=rs.getInt("stuId");
String stuName=rs.getString("stuName");
String stuSex=rs.getString("stuSex");
int stuAge=rs.getInt("stuAge");
String stuAddr=rs.getString("stuAddr");
2 JDBC的添加操作
//把以上数据封装到Student对象中
Student student=new Student(); //一行数据就封装成了一个Student对象
student.setStuId(stuId);
student.setStuName(stuName);
student.setStuSex(stuSex);
student.setStuAge(stuAge);
student.setStuAddr(stuAddr);
//把当前行封装后的Student对象装载到 List集合中
studentList.add(student);
}
System.out.println(studentList);
//回收资源,先关闭rs结果集对象 再pstm预处理对象 最后con连接对象
if(rs!=null){
rs.close();
}
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}
添加数据:
@Test
public void testStudentTianjia()throws Exception{
//通过反射加载驱动包
Class.forName(driver);
//通过驱动管理器获得数据库的连接对象
Connection con = DriverManager.getConnection(url, username, password);
//通过连接对象,获取SQ预处理对象
String sql = "insert into student(stuName,stuSex,stuAge,stuAddr)values(?,?,?,?)";
PreparedStatement prs = con.prepareStatement(sql);
//模拟从网页获取内容
Student student = new Student();
student.setStuName("老王");
student.setStuSex("男");
student.setStuAge(44);
student.setStuAddr("隔壁");
prs.setObject(1,student.getStuName());
prs.setObject(2,student.getStuSex());
prs.setObject(3,student.getStuAge());
prs.setObject(4,student.getStuAddr());
//判断操作是否生效
int n = prs.executeUpdate();
if (n>0){
System.out.println("插入数据成功");
}else{
System.out.println("插入数据失败");
}
//释放资源
if (con != null){
con.close();
}
if (prs != null){
prs.close();
}
}
删除数据:
@Test
public void testStudentShanchu()throws Exception{
//通过反射加载驱动包
Class.forName(driver);
//通过驱动管理器获得数据库的连接对象
Connection con = DriverManager.getConnection(url,username,password);
//通过连接对象,获取SQ预处理对象
String sql = "delete from student where stuId = ?";
PreparedStatement prs = con.prepareStatement(sql);
//模拟从网页获取id
int stuId = 2;
prs.setObject(1,stuId);
//判断操作是否成功
int n = prs.executeUpdate();
if (n>0){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
//释放资源
if (con != null){
con.close();
}
if (prs != null){
prs.close();
}
}