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

简介: 笔记

一、数据库编程一般过程


3.png

图为数据库编程的一般过程,其中查询(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

准备好的数据库

image.png


二、数据查询操作


(1)有条件查询

代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @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 :caizhengjie888@icloud.com
 * @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 :caizhengjie888@icloud.com
 * @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 :caizhengjie888@icloud.com
 * @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 :caizhengjie888@icloud.com
 * @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();
        }
    }
}

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


相关文章
|
3月前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
48 8
|
1月前
|
前端开发 Java 数据库连接
javamvc配置,增删改查,文件上传下载。
【10月更文挑战第4天】javamvc配置,增删改查,文件上传下载。
38 1
|
1月前
|
存储 NoSQL API
使用Py2neo进行Neo4j图数据库的增删改查操作
使用Py2neo进行Neo4j图数据库的增删改查操作
66 5
|
1月前
|
数据可视化 API PHP
低代码开发工具-学生管理系统-老师管理增删改查实现
低代码开发工具-学生管理系统-老师管理增删改查实现
33 5
|
1月前
|
SQL Java 数据库
Springboot+spring-boot-starter-data-jdbc实现数据库的操作
本文介绍了如何使用Spring Boot的spring-boot-starter-data-jdbc依赖来操作数据库,包括添加依赖、配置数据库信息和编写基于JdbcTemplate的数据访问代码。
62 2
|
2月前
|
SQL 关系型数据库 MySQL
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
课程分类查询、课程新增、统一异常处理、统一封装结果类、JSR303校验、修改课程、查询课程计划、新增/修改课程计划
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
|
29天前
|
JavaScript 前端开发 测试技术
[新手入门]todolist增删改查:vue3+ts版本!
【10月更文挑战第15天】[新手入门]todolist增删改查:vue3+ts版本!
|
2月前
|
SQL 关系型数据库 MySQL
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
本文介绍了在ThinkPHP6框架中如何连接和使用数据库进行增删改查操作。内容包括配置数据库连接信息、使用Db类进行原生MySQL查询、find方法查询单个数据、select方法查询数据集、save方法添加数据、insertAll方法批量添加数据、insertGetId方法添加数据并返回自增主键、delete方法删除数据和update方法更新数据。此外,还说明了如何通过数据库配置文件进行数据库连接信息的配置,并强调了在使用Db类时需要先将其引入。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
|
1月前
|
Java API 数据库
Data jpa 增删改查的方法分别有哪些
Data jpa 增删改查的方法分别有哪些
|
1月前
|
SQL druid Java
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
32 0
下一篇
无影云桌面