JDBC进行数据库的增删改查
1 什么是JDBC
概念:Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序
如何来访问数据库的
应用程序接口
,提供了诸如查询和更新数据库中数据的方法。
JDBC
也是
Sun 如何来访问数据库的 应用程序接口 ,提供了诸如查询和更新数据库中数据的方法。 JDBC 也是 Sun
Microsystems
的商标。我们通常说的
JDBC
是面向关系型数据库的。 Microsystems 的商标。我们通常说的 JDBC 是面向关系型数据库的。
各数据库厂商根据
JDBC
的规范,实现自身数据库操作的功能代码,然后以
jar
包(数据库厂商提供的驱动 各数据库厂商根据 JDBC 的规范,实现自身数据库操作的功能代码,然后以 jar 包(数据库厂商提供的驱动
包)的形式提供给开发人员使用,开发人员使用反射的机制创建这些具体实现类,按照
JDBC
的规范来完 成数据库的操作。 包)的形式提供给开发人员使用,开发人员使用反射的机制创建这些具体实现类,按照 JDBC 的规范来完 成数据库的操作。
MySQL数据库的创建
1.建立数据库
create database mydb;
2.建立所需要的表格并且插入准备好的数据
//设置数据视图 use mydb; //判断表格是否存在存在即删除表格 drop table if exists student; //创建表格 create table student( stuId int primary key auto_increment, stuName varchar(20), stuSex varchar(2), stuAge int, stuAddr varchar(50) ); //插入测试数据 INSERT INTO student(stuName,stuSex,stuAge,stuAddr)values(张三,男,20,河南); INSERT INTO student(stuName,stuSex,stuAge,stuAddr)values(小美,女,19,河南); INSERT INTO student(stuName,stuSex,stuAge,stuAddr)values(小兰,女,18,河南); INSERT INTO student(stuName,stuSex,stuAge,stuAddr)values(小红,女,21,河南); //查询表格 SELECT * from student
检查数据是否完好
2.先在IDEA中创建实体类:类的名字对应数据库表的名字、类的属
性对应表的字段
java的创建实体类(类的首字母大写,IDEA自动构造代码快捷键: alt + insert )
package com.hp.bean; //实体类属性 public class Student { private int stuId; private String stuName; private String stuSex; private int stuAge; private String stuAddr; //类的无参有参构造方法 public Student() { this.stuId = stuId; this.stuName = stuName; this.stuSex = stuSex; this.stuAge = stuAge; this.stuAddr = stuAddr; } //属性的getter和setter方法 public int getStuId() { return stuId; } public void setStuId(int stuId) { this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public String getStuSex() { return stuSex; } public void setStuSex(String stuSex) { this.stuSex = stuSex; } public int getStuAge() { return stuAge; } public void setStuAge(int stuAge) { this.stuAge = stuAge; } public String getStuddr() { return stuAddr; } public void setStuddr(String studdr) { this.stuAddr = studdr; } //打印 @Override public String toString() { return "Student{" + "stuId=" + stuId + ", stuName=" + stuName + + ", stuSex=" + stuSex + + ", stuAge=" + stuAge + ", studdr=" + stuAddr + + }; } }
3. JDBC
的全查操作 3. JDBC 的全查操作
查询获得的结果集 查询获得的结果集
结果集的游标默认指向的是数据标题行,需要使用 next() 方法移动游标,指向真正的数据行。该 结果集的游标默认指向的是数据标题行,需要使用 next() 方法移动游标,指向真正的数据行。该
方法的返回值是boolean类型,如果向下移动有数据行返回true,否则返回false。 方法的返回值是boolean类型,如果向下移动有数据行返回true,否则返回false。
4.0写入JDBC操作类
junit的用法补充来帮助写JDBC
package com.text; import com.hp.bean.Student; import org.junit.Test; import java.sql.*; import static java.lang.Class.forName; public class studentTest { // JDBC连接数据库,需要配置四大参数,同时需要导入数据库对应的驱动包 // junit用法:1.方法要定义为无参无返回值的。且测试类的名字不能是Test 2.在方法上使用 @Test 这个注解 3.光标放在后面,然后使用 alt + 回车 进行自动导包,选择---Add JUnit4 to classpath 4.这个方法就不需要依赖main方法就可以直接执行 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="root"; //密码的格式取决于自己定义,自己设定的密码
JDBC进行数据库的增删改查
(1)查询操作
//查询操作 @Test public void testSelectAll() throws Exception { //JDBC操作数据库的步骤 //1.首先在项目根目录创建lib文件夹,放入jdbc驱动程序,然后Add As Library //2.加载数据库驱动 forName(driver); //3.使用驱动管理器来获得连接---获得一个数据库连接对象Connection Connection con = DriverManager.getConnection(url, username, password);//生成方法调用返回值的快捷键:ctrl + alt + v //4.使用Connection创建PreparedStatement预处理对象---PreparedStatement对象可以 执行带 ? 的sql语句 String sql="select * from student"; PreparedStatement pstm = con.prepareStatement(sql); //5.使用PreparedStatement对象执行SQL语句,获得ResultSet结果集对象 ResultSet rs = pstm.executeQuery(); //6.操作判断--增删改返回的是影响的行数(返回值是int),只有查询获得结果集(返回值 ResultSet) //6.操作判断--增删改返回的是影响的行数(返回值是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"); System.out.println(stuId+"---"+stuName+"---"+stuSex); } //释放资源 if(rs!=null){ rs.close(); } if(pstm!=null){ pstm.close(); } if(con!=null){ con.close(); } }
查询结果如下
添加
//添加操作 @Test public void test() throws Exception{ //1.导入包 //2.加载驱动 forName(driver); //3..通过驱动管理器获得数据库的连接对象 Connection connection = DriverManager.getConnection(url, username, password); //4.通过连接对象,获取SQ预处理对象 String sql="insert into student(stuName,stuSex,stuAge,stuAddr)values(?,?,?,?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); // 4.1 实际开发是前端页面传递过来的数据,此处我们直接模拟一组数据 Student student = new Student(); student.setStuName("李华"); student.setStuSex("女"); student.setStuAge(18); student.setStuddr("南阳"); //5.1传递参数 preparedStatement.setObject(1,student.getStuName()); preparedStatement.setObject(2,student.getStuSex()); preparedStatement.setObject(3,student.getStuAge()); preparedStatement.setObject(4,student.getStuddr()); //5.2执行更新(增删改都叫做数据库的更新,更新返回的是影响的行数) int n = preparedStatement.executeUpdate(); //6判断影响的行数 n > 0 表示插入成功,否则插入失败 if(n>0){ System.out.println("插入数据成功"); }else{ System.out.println("插入数据失败"); } //7释放资源 if(preparedStatement!=null){ preparedStatement.close(); } if(connection!=null){ connection.close(); } }
删除
//删除操作 @Test public void testDel() throws Exception { // 1. // 2.通过反射加载驱动程序 Class.forName(driver); //3.通过驱动管理器获得数据库的连接对象 Connection connection = DriverManager.getConnection(url,username,password); //4.通过数据库连接对象获取sql预处理对象 String sql="delete from student where stuId=?"; PreparedStatement preparedStatement = connection.prepareStatement(sql); //5.1预处理对象的sql语句有 ? ,所以需要传参 int stuId=3; preparedStatement.setObject(1,stuId); //5.2执行更新操作(增删改都是更新操作,返回的结果是影响的行数) int n=preparedStatement.executeUpdate(); // 6判断影响的行数 n>0 表示删除成功,否则删除失败 if(n>0){ System.out.println("删除成功"); } else { System.out.println("删除失败"); } //7释放资源 if(preparedStatement!=null){ preparedStatement.close(); } if(connection!=null){ connection.close(); } }
修改
// 修改操作 @Test public void textli() throws Exception { //1 // 2.加载驱动 Class.forName(driver); //3.获得数据 Connection connection = DriverManager.getConnection(url, username, password); //4连接对象那 String sql="update student set stuSex=? where stuName=? "; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setObject(1,"女"); preparedStatement.setObject(2,"蔡徐坤"); int n= preparedStatement.executeUpdate(); if(n>0){ System.out.println("修改成功"); }else { System.out.println("修改失败"); } if (preparedStatement!=null){ preparedStatement.close(); } if (connection!=null){ connection.close(); } } }
下一篇:
c++动态库调用外部函数汇总。