Mysql的CRUD操作

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql的CRUD操作

数据库的增删改查操作:


软件:eclipse、sqlyog


数据库:Mysql


项目整体结构:



mysql驱动的jar文件引入项目方法:项目右键->Build Path->Configure Build Path->Libraries->Add External JARs->选择mysql驱动的jar打开即可添加。


数据库、数据表定义:



数据表字段定义:


 

jdbc_crud.java:(CRUD-增删改查方法)


package com.led.dao;
 import java.sql.*;
 import com.led.entities.Student;
 import com.mysql.jdbc.PreparedStatement;
 public class jdbc_crud {
     public Connection conn = null;
     public PreparedStatement pst = null;
     ResultSet rs = null;
     // 1.增---------增加学生
     public int Add(Student student) throws Exception {
         conn = JdbcUtils.GetConnetion();// 2.建立连接
        System.out.println("数据库连接成功!");
         String sql = "insert into t_jdbc_crud (id,stuName,age,mathGrade,scienceGrade)values(null,?,?,?,?,?)";
         pst = (PreparedStatement) conn.prepareStatement(sql);
         pst.setString(1, student.getStuName());
         pst.setInt(2, student.getAge());
         pst.setString(3, student.getSex());
         pst.setDouble(4, student.getMathGrade());
         pst.setDouble(5, student.getScienceGrade());
         int result ;
         result = pst.executeUpdate();
         if (result==1) {
             System.out.println("增加学生成功!");
         } else {
             System.out.println("增加学生失败!");
         }
         JdbcUtils.free(rs, pst, conn);
         return result;
     }
     // 2、删---------删除学生
     public int Delete(int id) throws Exception {
         conn = JdbcUtils.GetConnetion();
         System.out.println("连接成功");
         String sql = "delete from t_jdbc_crud where id=?";
         pst = (PreparedStatement) conn.prepareStatement(sql);
         pst.setInt(1, id);
         int result;
         result = pst.executeUpdate();
         if (result==1) {
             System.out.println("删除学生成功!");
         } else {
             System.out.println("删除学生失败!");
         }
        JdbcUtils.free(rs, pst, conn);
         return result;
      }
     // 3、改---------改变某个学生的数学成绩
     public void UpdateMathGrade(int id,double mathGrade) throws Exception {
         conn = JdbcUtils.GetConnetion();
         System.out.println("数据库连接成功!");
         String sql2 = "update  t_jdbc_crud  set mathGrade=? where id=?";
         pst = (PreparedStatement) conn.prepareStatement(sql2);
         pst.setDouble(1, mathGrade);
         pst.setInt(2, id);
         int result;
         result = pst.executeUpdate();
         if(result==1){
             System.out.println("更新数学成绩成功!");
         }else{
             System.out.println("更新数学成绩失败!");
         }
         JdbcUtils.free(rs, pst, conn);
     }
     // 4.1、查--------查询某个学生
     public void searchStudent(int id) throws Exception {
         conn = JdbcUtils.GetConnetion();
         System.out.println("数据库连接成功!");
         //使用select *会被领导骂的,因为
         String sql = "select id,stuName,age,sex,mathGrade,scienceGrade from t_jdbc_crud where id=?";
         pst = (PreparedStatement) conn.prepareStatement(sql);
         pst.setInt(1, id);
         rs = pst.executeQuery();
         System.out.println("4.1、查--------查询某个学生");
         while (rs.next()) {
             System.err.println("id: " + rs.getObject("id") 
                     +"  "+"stuName: "+"  "+ rs.getObject("stuName") 
                     +"  "+"age: " + rs.getObject("age")
                    +"  "+"sex:"+rs.getObject("sex")
                     +"  "+"mathGrade: " + rs.getObject("mathGrade")
                     +"  "+"scienceGrade: " + rs.getObject("scienceGrade"));
         }
         JdbcUtils.free(rs, pst, conn);
     }
     // 4.2、查--------查询所有学生
     public void getAll() throws Exception {
         conn = JdbcUtils.GetConnetion();
         String sql = "select id,stuName,age,sex,mathGrade,scienceGrade from t_jdbc_crud";
         pst = (PreparedStatement) conn.prepareStatement(sql);
         rs = pst.executeQuery();
         System.out.println("4.2、查--------查询所有学生");
         while (rs.next()) {
             System.err.println("id:" + rs.getObject("id") 
                     +"  "+"stuName:"+"  "+ rs.getObject("stuName") 
                     +"  "+"age:" + rs.getObject("age")
                     +"  "+"sex:"+rs.getObject("sex")
                     +"  "+"mathGrade:" + rs.getObject("mathGrade")
                     +"  "+"scienceGrade:" + rs.getObject("scienceGrade"));
         }
         JdbcUtils.free(rs, pst, conn);
     }
 }


JdbcUtils.java:(数据库连接与关闭操作)


 package com.led.dao;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
 import com.mysql.jdbc.PreparedStatement;
 public class JdbcUtils {
     public JdbcUtils() {
         super();
     }
     private static String driverClass = "com.mysql.jdbc.Driver";//mysql驱动
     private static String url = "jdbc:mysql://localhost:3306/db_jdbc_crud";//数据库uri
     private static String username = "root";//数据库用户名
     private static String password = "root";//数据库密码
     static {
         try {
             Class.forName(driverClass);//利用反射的方式加载数据库驱动
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
     public static  Connection GetConnetion() throws Exception {//获取数据库连接
         return DriverManager.getConnection(url, username, password);
     }
     public static void free(ResultSet rs, PreparedStatement pst, Connection conn) {//释放资源
         try {
             if (rs != null) {
                 rs.close();
                 if (pst != null) {
                     pst.close();
                     if (conn != null) {
                         conn.close();
                     }
                }
             }
             System.out.println("ResultSet、PreparedStatement、Connection closed!");
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 }


Student.java:(定义学生类)


 package com.led.entities;
 public class Student {
     private int id;
     private String stuName;
     private String sex;
     private int age;
     private double mathGrade;
     private double scienceGrade;
     public int getId() {
         return id;
     }
     public void setId(int id) {
         this.id = id;
     }
     public String getSex() {
         return sex;
     }
     public void setSex(String sex) {
         this.sex = sex;
     }
     public String getStuName() {
         return stuName;
     }
     public void setStuName(String stuName) {
         this.stuName = stuName;
     }
     public int getAge() {
         return age;
     }
     public void setAge(int age) {
         this.age = age;
     }
     public double getMathGrade() {
         return mathGrade;
     }
     public void setMathGrade(double mathGrade) {
         this.mathGrade = mathGrade;
     }
     public double getScienceGrade() {
         return scienceGrade;
     }
     public void setScienceGrade(double scienceGrade) {
         this.scienceGrade = scienceGrade;
     }
     public Student() {
         super();
         // TODO Auto-generated constructor stub
     }
     public Student(String stuName, int age, String sex, double mathGrade,
             double scienceGrade) {
         super();
         this.stuName = stuName;
         this.sex = sex;
         this.age = age;
         this.mathGrade = mathGrade;
         this.scienceGrade = scienceGrade;
     }
 }


jdbc_crud_Test.java:(测试CRUD方法)


 package com.led.service;
  import com.led.dao.jdbc_crud;
  import com.led.entities.Student;
  public class jdbc_crud_Test {
      public static void main(String[] args) throws Exception{
         jdbc_crud jdbc1=new jdbc_crud();
         //jdbc1.Add(new Student("jack", 11,"male", 99.0, 97.5));//增加学生
         //jdbc1.Delete(3);//删除学生
         //jdbc1.UpdateMathGrade(1, 98.5);//改变学生数学成绩
         //jdbc1.getAll();//查询所有学生
         jdbc1.searchStudent(1);//查询某个学生
     }
 }

注意:一般使用PreparedStatement接口,而不是Statement接口,原因是PreparedStatement能对sql语句进行预编译并放入缓存,当使用相同的sql语句时,直接可以从缓存中拿,大大提高了数据库操作效率。


/*****************************/


PreparedStatement接口的常用方法:


execute

boolean execute()
                throws SQLException


在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。一些特别处理过的语句返回多个结果,execute 方法处理这些复杂的语句,executeQueryexecuteUpdate 处理形式更简单的语句。

execute 方法返回一个 boolean 值,以指示第一个结果的形式。必须调用 getResultSetgetUpdateCount 方法来检索结果,并且必须调用 getMoreResults 移动到任何后面的结果。


返回:如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false.


executeQuery


ResultSet executeQuery()
                       throws SQLException


在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。

 

返回:包含该查询生成的数据的 ResultSet 对象;从不返回 null


抛出:SQLException - 如果发生数据库访问错误或者 SQL 语句没有返回一个 ResultSet 对象


executeUpdate


int executeUpdate()
                  throws SQLException


在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL INSERTUPDATEDELETE 语句;或者是一个什么都不返回的 SQL 语句,比如 DDL 语句。

 

返回:(1) 对于 INSERTUPDATEDELETE 语句,返回行数 (2) 或者对于什么都不返回的 SQL 语句,返回 0


抛出:抛出:SQLException - 如果发生数据库访问错误或者 SQL 语句返回一个  对象


java.sql


接口 PreparedStatement

 

所有超级接口:Statement

 

所有已知子接口:CallableStatement

 


 


 

public interface PreparedStatementextends Statement

 

表示预编译的 SQL 语句的对象。

 

SQL 语句被预编译并且存储在 PreparedStatement 对象中。然后可以使用此对象高效地多次执行该语句。

 

注:用来设置 IN 参数值的 setter 方法(setShortsetString 等等)必须指定与输入参数的已定义 SQL 类型兼容的类型。例如,如果 IN 参数具有 SQL 类型 INTEGER,那么应该使用 setInt 方法。

 

如果需要任意参数类型转换,使用 setObject 方法时应该将目标 SQL 类型作为其参数的类型。

 

在以下设置参数的示例中,con 表示一个活动连接:

 

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
                                     SET SALARY = ? WHERE ID = ?");
   pstmt.setBigDecimal(1, 153833.00)
   pstmt.setInt(2, 110592)


第一个问号的序号是1!不是0!否则会造成空指针异常的发生!


executeUpdate():常用于增、删、改;

executeQuery():常用于查。



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
SQL 存储 关系型数据库
MySQL/SqlServer跨服务器增删改查(CRUD)的一种方法
通过上述方法,MySQL和SQL Server均能够实现跨服务器的增删改查操作。MySQL通过联邦存储引擎提供了直接的跨服务器表访问,而SQL Server通过链接服务器和分布式查询实现了灵活的跨服务器数据操作。这些技术为分布式数据库管理提供了强大的支持,能够满足复杂的数据操作需求。
58 12
|
6月前
|
SQL 运维 关系型数据库
MySQL 中 GRANT 操作会引起复制中断吗?
GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。 在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更 mysql.user 表,可能会引发其他的问题,若使用了 DML 语句进行变更, 需要手工执行 flush privileges。
88 4
|
6月前
|
JavaScript 关系型数据库 MySQL
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
81 0
|
7月前
|
关系型数据库 MySQL
【mysql技巧】如何在这个mysql语句执行前加个前提,也就是只有表里没有相同数据才进行添加插入操作
【mysql技巧】如何在这个mysql语句执行前加个前提,也就是只有表里没有相同数据才进行添加插入操作
47 1
|
4月前
|
关系型数据库 MySQL 数据库
MySQL 表的CRUD与复合查询
【9月更文挑战第26天】本文介绍了数据库操作中的 CRUD(创建、读取、更新、删除)基本操作及复合查询。创建操作使用 `INSERT INTO` 语句插入数据,支持单条和批量插入;读取操作使用 `SELECT` 语句查询数据,可进行基本查询、条件查询和排序查询;更新操作使用 `UPDATE` 语句修改数据;删除操作使用 `DELETE FROM` 语句删除数据。此外,还介绍了复合查询,包括连接查询(如内连接、左连接)和子查询,以及聚合函数与分组查询,并提供了示例代码。
|
6月前
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
58 2
|
6月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
前端开发 Java 关系型数据库
通过HTML网页对mysql数据库进行增删改查(CRUD实例)
通过HTML网页对mysql数据库进行增删改查(CRUD实例)
343 0
|
6月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之整库同步mysql到starRock提交任务异常,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。