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();
        }
    }
}

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


相关文章
|
27天前
|
SQL 关系型数据库 MySQL
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
课程分类查询、课程新增、统一异常处理、统一封装结果类、JSR303校验、修改课程、查询课程计划、新增/修改课程计划
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
|
14天前
|
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方法的用法
|
2月前
|
Java 数据库连接 网络安全
JDBC数据库编程(java实训报告)
这篇文章是关于JDBC数据库编程的实训报告,涵盖了实验要求、实验环境、实验内容和总结。文中详细介绍了如何使用Java JDBC技术连接数据库,并进行增删改查等基本操作。实验内容包括建立数据库连接、查询、添加、删除和修改数据,每个部分都提供了相应的Java代码示例和操作测试结果截图。作者在总结中分享了在实验过程中遇到的问题和解决方案,以及对Java与数据库连接操作的掌握情况。
JDBC数据库编程(java实训报告)
|
2月前
|
SQL Java 数据库连接
Java开发者必知:JDBC连接数据库的“三大法宝”
Java开发者必知:JDBC连接数据库的“三大法宝”
21 7
|
2月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
38 1
|
2月前
|
SQL 数据库连接 API
ThinkPHP6实现增删改查接口
ThinkPHP6实现增删改查接口
34 1
|
2月前
|
XML 数据库 数据格式
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
这篇文章是Spring5框架的实战教程的终结篇,介绍了如何使用注解而非XML配置文件来实现JdbcTemplate的数据库操作,包括增删改查和批量操作,通过创建配置类来注入数据库连接池和JdbcTemplate对象,并展示了完全注解开发形式的项目结构和代码实现。
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
|
2月前
|
SQL XML Java
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
这篇文章是Spring5框架的实战教程,详细讲解了如何使用JdbcTemplate进行数据库的增删改查操作,包括在项目中引入依赖、配置数据库连接池、创建实体类、定义DAO接口及其实现,并提供了具体的代码示例和测试结果,最后还提供了完整的XML配置文件和测试代码。
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
|
2月前
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
2月前
|
开发工具 数据安全/隐私保护 索引
LDAP学习笔记之二:389-DS(RHDS) 增删改查基本操作
LDAP学习笔记之二:389-DS(RHDS) 增删改查基本操作