JDBC中数据库的增删改查操作

一、数据库编程一般过程

在这里插入图片描述
图为数据库编程的一般过程,其中查询(Read)过程最多需要7个步骤,修改(C插入、U 更新、D删除)过程最多需要5个步骤。这个过程采用了预编译语句对象进行数据操作,所以有可能进 行绑定参数。

在编程之前先交代一下config.properties文件:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/JAVA
user=root
password=199911
useSSL=false
verifyServerCertificate=false

准备好的数据库
在这里插入图片描述

二、数据查询操作

(1)有条件查询

代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * @author : 蔡政洁
 * @email :[email protected]
 * @date : 2020/3/2
 * @time : 3:48 下午
 */
//不使用自动资源管理
public class CRUDSample1 {
//    连接数据库
    static String url;
//    创建properties对象
    static Properties info = new Properties();

//    1.驱动程序加载,放在静态代码块中,在静态代码块中读取属性文件内容到Properties对象和加载驱动程序,这两个操作只需执行一次
    static {
//            获得属性文件输入流
        InputStream inputStream = CRUDSample1.class.getClassLoader().getResourceAsStream("config.properties");
        try {
//            加载属性文件内容到Properties对象
            info.load(inputStream);
//            从属性文件中读取URL
            url = info.getProperty("url");
//            从属性文件中读取driver
            String driverClassname = info.getProperty("driver");
//            驱动程序加载
            Class.forName(driverClassname);
            System.out.println("驱动程序加载成功");

        } catch (IOException e) {
            System.out.println("加载属性文件失败");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("驱动程序加载失败");
            e.printStackTrace();
        }
    }
//主函数
    public static void main(String[] args) {
//        查询数据
        read();
    }

//    数据查询操作
    public static void read(){

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
//            2.创建数据库连接
            conn = DriverManager.getConnection(url,info);
            System.out.println("数据库连接成功");
//            3.创建语句对象,返回PreparedStatement对象
//            这里查询的是数据库中id大于2的人的姓名和年龄
            pstmt = conn.prepareStatement("select name,age from xinxi_tb where id > ? order by id");
//            4.绑定参数
            /**
             * 绑定参数时需要注意两个问题:绑定参数顺序 和 绑定参数的类型
             * 绑定参数索引是 从1开始的,而不是从0开始的。
             * 根据绑定参数的类型不同选择对应的set方法。
             */
            pstmt.setInt(1,3);
//            5.执行查询
            rs =  pstmt.executeQuery();
//            6.遍历结果集
            while (rs.next()){
                /**注意点:列名对应的数据类型,rs.getX就对应什么,例如(name: %s,rs.getString("name"或者为 1 ))
                 *rs.getX(可以设置为columnindex = (查找的列的索引,从1开始索引),或columnLabel = "列名")
                 */
                System.out.printf("name: %s,age: %d\n",rs.getString(1),rs.getInt("age"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
//            7.释放资源,这里也可以选择自动资源管理
        }finally {
            if (rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (pstmt != null){
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null){
                try {
                    conn.close();
                }catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

运行结果:

驱动程序加载成功
数据库连接成功
name: 雷军,age: 43
name: 马云,age: 56
name: 马化腾,age: 49

(2)无条件查询

代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * @author : 蔡政洁
 * @email :[email protected]
 * @date : 2020/3/2
 * @time : 6:01 下午
 */
//使用自动资源管理系统
public class CRUDSample2 {
    //    连接数据库
    static String url;
    //    创建properties对象
    static Properties info = new Properties();

    //    1.驱动程序加载,放在静态代码块中,在静态代码块中读取属性文件内容到Properties对象和加载驱动程序,这两个操作只需执行一次
    static {
//            获得属性文件输入流
        InputStream inputStream = CRUDSample2.class.getClassLoader().getResourceAsStream("config.properties");
        try {
//            加载属性文件内容到Properties对象
            info.load(inputStream);
//            从属性文件中读取URL
            url = info.getProperty("url");
//            从属性文件中读取driver
            String driverClassname = info.getProperty("driver");
//            驱动程序加载
            Class.forName(driverClassname);
            System.out.println("驱动程序加载成功");

        } catch (IOException e) {
            System.out.println("加载属性文件失败");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("驱动程序加载失败");
            e.printStackTrace();
        }
    }
    //主函数
    public static void main(String[] args) {
//        查询最大的用户id
        System.out.println(readMaxUserID());
    }

//    查询最大的用户id
    public  static int readMaxUserID(){
        int maxid = 0;
        try (
//            2.创建数据库连接
            Connection conn = DriverManager.getConnection(url,info);
//            3.创建语句对象
            PreparedStatement pstmt = conn.prepareStatement("select max(id) from xinxi_tb");
//             4。执行查询
            ResultSet rs = pstmt.executeQuery()
            ){
//            打印数据库连接信息
            System.out.println("数据库连接成功");
//            5.遍历结果集
            if (rs.next()){
                maxid = rs.getInt(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return maxid;
    }
}

运行结果:

驱动程序加载成功
数据库连接成功
6

三、数据插入

代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @author : 蔡政洁
 * @email :[email protected]
 * @date : 2020/3/2
 * @time : 6:15 下午
 */
//使用自动资源管理系统
        public class CRUDSample3 {
            //    连接数据库
            static String url;
            //    创建properties对象
            static Properties info = new Properties();

            //    1.驱动程序加载,放在静态代码块中,在静态代码块中读取属性文件内容到Properties对象和加载驱动程序,这两个操作只需执行一次
            static {
//            获得属性文件输入流
                InputStream inputStream = CRUDSample2.class.getClassLoader().getResourceAsStream("config.properties");
                try {
//            加载属性文件内容到Properties对象
            info.load(inputStream);
//            从属性文件中读取URL
            url = info.getProperty("url");
//            从属性文件中读取driver
            String driverClassname = info.getProperty("driver");
//            驱动程序加载
            Class.forName(driverClassname);
            System.out.println("驱动程序加载成功");

        } catch (IOException e) {
            System.out.println("加载属性文件失败");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("驱动程序加载失败");
            e.printStackTrace();
        }
    }

    //主函数
    public static void main(String[] args) {
//        数据插入操作
        create();
    }
    public static void create(){
        try (
//            2.创建数据库连接
                Connection conn = DriverManager.getConnection(url,info);

//            3.创建语句对象
                PreparedStatement pstmt = conn.prepareStatement("insert into xinxi_tb (id, name, age) values (?,?,?)");
                ){
//            打印数据库连接信息
            System.out.println("数据库连接成功");
//            4.绑定参数
            pstmt.setInt(1,6);
            pstmt.setString(2,"马化腾");
            pstmt.setInt(3,49);
//            5.执行修改
//            行executeUpdate()方法执行SQL语句,该 方法与查询方法executeQuery()不同。executeUpdate()方法返回的是整数,成功影响的记录数, 即成功插入记录数。
            int affectedRows = pstmt.executeUpdate();

            System.out.printf("成功插入%d条数据\n",affectedRows);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

这里要根据自己数据库的实际情况来修改代码,才能运行

四、数据更新

代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @author : 蔡政洁
 * @email :[email protected]
 * @date : 2020/3/2
 * @time : 6:40 下午
 */
//使用自动资源管理系统
public class CRUDSample4 {
    //    连接数据库
    static String url;
    //    创建properties对象
    static Properties info = new Properties();

    //    1.驱动程序加载,放在静态代码块中,在静态代码块中读取属性文件内容到Properties对象和加载驱动程序,这两个操作只需执行一次
    static {
//            获得属性文件输入流
        InputStream inputStream = CRUDSample4.class.getClassLoader().getResourceAsStream("config.properties");
        try {
//            加载属性文件内容到Properties对象
            info.load(inputStream);
//            从属性文件中读取URL
            url = info.getProperty("url");
//            从属性文件中读取driver
            String driverClassname = info.getProperty("driver");
//            驱动程序加载
            Class.forName(driverClassname);
            System.out.println("驱动程序加载成功");

        } catch (IOException e) {
            System.out.println("加载属性文件失败");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("驱动程序加载失败");
            e.printStackTrace();
        }
    }
    //主函数
    public static void main(String[] args) {
//        数据更新操作
        update();

    }
    public static void update(){
        try (
//            2.创建数据库连接
                Connection conn = DriverManager.getConnection(url,info);
//            3.创建语句对象
                PreparedStatement pstmt = conn.prepareStatement("update xinxi_tb set name = ? where id = ?");
                ){
//            打印数据库连接信息
            System.out.println("数据库连接成功");
//            4.绑定参数
            pstmt.setString(1,"雷军");
            pstmt.setInt(2,4);
//            5.执行修改
            int affectedRows = pstmt.executeUpdate();

            System.out.printf("成功更新%d条数据\n",affectedRows);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

这里要根据自己数据库的实际情况来修改代码,才能运行

五、数据删除

代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @author : 蔡政洁
 * @email :[email protected]
 * @date : 2020/3/2
 * @time : 6:49 下午
 */
//使用自动资源管理系统
public class CRUDSample5 {
    //    连接数据库
    static String url;
    //    创建properties对象
    static Properties info = new Properties();

    //    1.驱动程序加载,放在静态代码块中,在静态代码块中读取属性文件内容到Properties对象和加载驱动程序,这两个操作只需执行一次
    static {
//            获得属性文件输入流
        InputStream inputStream = CRUDSample2.class.getClassLoader().getResourceAsStream("config.properties");
        try {
//            加载属性文件内容到Properties对象
            info.load(inputStream);
//            从属性文件中读取URL
            url = info.getProperty("url");
//            从属性文件中读取driver
            String driverClassname = info.getProperty("driver");
//            驱动程序加载
            Class.forName(driverClassname);
            System.out.println("驱动程序加载成功");

        } catch (IOException e) {
            System.out.println("加载属性文件失败");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("驱动程序加载失败");
            e.printStackTrace();
        }
    }
    //主函数
    public static void main(String[] args) {
//        数据删除操作
        delete();
    }
    public static void delete(){
        try (
//            2.创建数据库连接
                Connection conn = DriverManager.getConnection(url,info);
//            3.创建语句对象
                PreparedStatement pstmt = conn.prepareStatement("delete from xinxi_tb where id = ?");
                ){
//            打印数据库连接信息
            System.out.println("数据库连接成功");
//            4.绑定参数
            pstmt.setInt(1, 3);
//            5.执行修改
            int affectedRows = pstmt.executeUpdate();

            System.out.printf("成功删除%d条数据\n",affectedRows);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

这里要根据自己数据库的实际情况来修改代码,才能运行

总结:学好数据库编程还是需要掌握一些MySQL的基本语句,如果您想更多的了解MySQL常用命令,可以详见连接https://blog.csdn.net/weixin_45366499/article/details/104585167
相信它一定对您有帮助!

以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!

发布了93 篇原创文章 · 获赞 10 · 访问量 5202

猜你喜欢

转载自blog.csdn.net/weixin_45366499/article/details/104622554