通过JDBC对mysql数据库进行增删改查

摘要

本文提供了一个简单的java实例,利用JDBC,实现了对mysql数据库的增删改查操作,并提供了完整代码见附录。

一、准备工作

本文使用的编译器为IDEA2018.2,可参考

如何在IDEA中使用JDBC

在IDEA中建立一个简单的JDBC项目。

二、涉及的java知识点

可参考Java Api手册

Connection

与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
Connection 对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。

相关方法描述
prepareStatement()创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
close()立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放。
DriverManager.getConnection()试图建立到给定数据库 URL 的连接。DriverManager 试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序

ResultSet

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

相关方法描述
next()将光标从当前位置向前移一行。
getString()以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
getInt()以 Java 编程语言中 int的形式获取此 ResultSet 对象的当前行中指定列的值。
close();立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。

PreparedStatement

表示预编译的 SQL 语句的对象。
SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
注:用于设置 IN 参数值的设置方法(setShort、setString 等等)必须指定与输入参数的已定义 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)

相关方法描述
setString()将指定参数设置为给定 Java String 值。
setInt()将指定参数设置为给定 Java int 值。
executeQuery()在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
executeUpdate()在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。

ArrayList

List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。)

相关方法描述
add(E e)将指定的元素添加到此列表的尾部。
get(int index)返回此列表中指定位置上的元素。
size()返回此列表中的元素数。

三、代码目录结构解释

package名称解释包含的java类
bean实体层,与数据库中的表对应UserInfo
dao持久层,数据库增删改查操作UserInfoDao
util工具,数据库的连接DBUtil

四、实体类的建立

为了与数据库中数据对应,我们建立一个与数据库中表结构一样的实体类。
一个实体类应该包含以下内容:

1.数据成员变量
2.数据操作方法(Getter,Setter,toString等)
3.构造函数

首先创建与表中字段类型数据类型相同的私有成员变量,然后为其创建Getter、Setter方法和构造函数。
本文数据库中的userinfo表中包含的字段为id(INT),username(VARCHAR),password(VARCHAR),故创建Userinfo实体类如下

public class UserInfo {
    //ID,用户名,密码
    private  int id;
    private  String username;
    private  String password;

    public UserInfo() {
    }
    //用ID,用户名,密码构造
    public UserInfo(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }
    //为私有成员变量创建Getter方法和Setter方法,可通过右键点击Generate自动创建
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    //右键点击Generate,自动生成toString()方法
    @Override
    public String toString() {
        return "UserInfo{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

五、数据库的连接和关闭

为了降低代码的耦合度,提高程序的可复用性,本文将数据库的连接操作提取出来,封装到了DBUtil类的静态方法中。当数据库操作需要进行数据库连接操作时,只需要调用DBUtil.getConnection()方法即可,不需要考虑其内部具体实现,且对该方法的修改不会影响外部的代码,降低了代码耦合性。
本文这里只实现了最简单的连接方式,若想提高性格,可考虑采用数据库连接池对DBUtil.getConnection()方法进行改进。

5.1数据库的连接

public static Connection getConnection(){
        Connection connection = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useSSL=true&characterEncoding=utf-8&user=root&password=root");
            // System.out.println("创建连接成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

5.2关闭连接

public static void close(ResultSet rs,Statement statement,Connection connection){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement!=null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

六、JDBC基本操作

为了对数据进行操作,本文为此定义了操作类UserinfoDao,并将所有对数据库操作的sql语句封装到该类中。

6.1 增加操作

public void add(UserInfo userInfo){
        PreparedStatement statement = null;
        Connection connection = null;
        String sql = "insert into userinfo (id,username,password) values(?,?,?)";
        try {
            connection = DBUtil.getConnection();
            statement=connection.prepareStatement(sql);
            statement.setInt(1,userInfo.getId());
            statement.setString(2,userInfo.getUsername());
            statement.setString(3,userInfo.getPassword());
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(null, statement, connection);
        }
    }

6.2 删除操作

//根据用户名删除用户
    public void deleteFromUsername(String username){
        PreparedStatement statement = null;
        Connection connection = null;
        String sql="delete from userinfo where username='"+username+"'";
        try {
            connection = DBUtil.getConnection();
            statement=connection.prepareStatement(sql);
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(null, statement, connection);
        }
    }

6.3 修改操作

public int update(UserInfo userInfo){
        PreparedStatement statement = null;
        Connection connection = null;
        String sql="update userinfo set username='"
                +userInfo.getUsername()
                +"',password='"
                +userInfo.getPassword()
                +"' where id='"
                +userInfo.getId()
                +"'";
        try {
            connection = DBUtil.getConnection();
            statement=connection.prepareStatement(sql);
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(null, statement, connection);
        }
    }

6.4 查找操作

查找所有用户

public List<UserInfo> findAll() {
        ResultSet rs = null;
        Connection connection = null;
        PreparedStatement statement = null;
        List<UserInfo> list = new ArrayList<>();
        try {
            connection = DBUtil.getConnection();
            //写sql
            String sql = "select * from userinfo";
            //得到statement对象执行sql
            statement = connection.prepareStatement(sql);
            //得到结果集
            rs = statement.executeQuery();
            //处理结果集
            while (rs.next()) {
                UserInfo userInfo = new UserInfo();
                userInfo.setId(rs.getInt(1));
                userInfo.setUsername(rs.getString(2));
                userInfo.setPassword(rs.getString(3));
                list.add(userInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭
            DBUtil.close(rs, statement, connection);
        }
        return list;
    }

根据用户名查找用户

 //根据用户名查找用户
    public List<UserInfo> selectFromUsername(String username){
        ResultSet rs = null;
        Connection connection = null;
        PreparedStatement statement = null;
        List<UserInfo> list = new ArrayList<>();
        try {
            connection = DBUtil.getConnection();
            //写sql
            String sql = "select * from userinfo where username = '"+username+"'";
            //得到statement对象执行sql
            statement = connection.prepareStatement(sql);
            //得到结果集
            rs = statement.executeQuery();
            //处理结果集
            while (rs.next()) {
                UserInfo userInfo = new UserInfo();
                userInfo.setId(rs.getInt(1));
                userInfo.setUsername(rs.getString(2));
                userInfo.setPassword(rs.getString(3));
                list.add(userInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭
            DBUtil.close(rs, statement, connection);
        }
        return list;
    }

七、测试类的实现

本文在主函数中对上述操作进行了测试。

//Main.java
import bean.UserInfo;
import dao.UserInfoDao;


public class Main {

    public static void main(String[] args) {
        //查找全部
        System.out.println("查找全部");
        System.out.println(new UserInfoDao().findAll());
        //增加
        System.out.println("增加");
        new UserInfoDao().add(new UserInfo(10,"王五","王五的密码"));
        System.out.println(new UserInfoDao().findAll());
        //更新
        System.out.println("更新");
        new UserInfoDao().update(new UserInfo(10,"张三","张三的密码"));
        System.out.println(new UserInfoDao().findAll());
        //按照用户名查找
        System.out.println("按照用户名查找");
        System.out.println(new UserInfoDao().selectFromUsername("张三"));
        //按照ID进行删除
        System.out.println("按照ID删除");
        new UserInfoDao().deleteFromUsername("张三");
        System.out.println(new UserInfoDao().findAll());
    }
}

测试结果如下,可以看到增删改查操作运行成功。
在这里插入图片描述

附录

代码目录结构如下
在这里插入图片描述
UserInfo.java

//UserInfo.java
package bean;


//实体类,对应数据库中的表结构
public class UserInfo {
    //ID,用户名,密码
    private  int id;
    private  String username;
    private  String password;

    public UserInfo() {
    }
    //用ID,用户名,密码构造
    public UserInfo(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }
    //为私有成员变量创建Getter方法和Setter方法,可通过右键点击Generate自动创建
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    //右键点击Generate,自动生成toString()方法
    @Override
    public String toString() {
        return "UserInfo{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UserInfoDao.java

//UserInfoDao.java
package dao;

import bean.UserInfo;
import util.DBUtil;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class UserInfoDao {

    //select查找所有用户
    public List<UserInfo> findAll() {
        ResultSet rs = null;
        Connection connection = null;
        PreparedStatement statement = null;
        List<UserInfo> list = new ArrayList<>();
        try {
            connection = DBUtil.getConnection();
            //写sql
            String sql = "select * from userinfo";
            //得到statement对象执行sql
            statement = connection.prepareStatement(sql);
            //得到结果集
            rs = statement.executeQuery();
            //处理结果集
            while (rs.next()) {
                UserInfo userInfo = new UserInfo();
                userInfo.setId(rs.getInt(1));
                userInfo.setUsername(rs.getString(2));
                userInfo.setPassword(rs.getString(3));
                list.add(userInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭
            DBUtil.close(rs, statement, connection);
        }
        return list;
    }

    //添加用户信息
    public void add(UserInfo userInfo){
        PreparedStatement statement = null;
        Connection connection = null;
        String sql = "insert into userinfo (id,username,password) values(?,?,?)";
        try {
            connection = DBUtil.getConnection();
            statement=connection.prepareStatement(sql);
            statement.setInt(1,userInfo.getId());
            statement.setString(2,userInfo.getUsername());
            statement.setString(3,userInfo.getPassword());
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(null, statement, connection);
        }
    }
    //更新用户信息
    public int update(UserInfo userInfo){
        PreparedStatement statement = null;
        Connection connection = null;
        String sql="update userinfo set username='"
                +userInfo.getUsername()
                +"',password='"
                +userInfo.getPassword()
                +"' where id='"
                +userInfo.getId()
                +"'";
        try {
            connection = DBUtil.getConnection();
            statement=connection.prepareStatement(sql);
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(null, statement, connection);
        }
    }
    //根据用户名删除用户
    public void deleteFromUsername(String username){
        PreparedStatement statement = null;
        Connection connection = null;
        String sql="delete from userinfo where username='"+username+"'";
        try {
            connection = DBUtil.getConnection();
            statement=connection.prepareStatement(sql);
            statement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(null, statement, connection);
        }
    }
    //根据用户名查找用户
    public List<UserInfo> selectFromUsername(String username){
        ResultSet rs = null;
        Connection connection = null;
        PreparedStatement statement = null;
        List<UserInfo> list = new ArrayList<>();
        try {
            connection = DBUtil.getConnection();
            //写sql
            String sql = "select * from userinfo where username = '"+username+"'";
            //得到statement对象执行sql
            statement = connection.prepareStatement(sql);
            //得到结果集
            rs = statement.executeQuery();
            //处理结果集
            while (rs.next()) {
                UserInfo userInfo = new UserInfo();
                userInfo.setId(rs.getInt(1));
                userInfo.setUsername(rs.getString(2));
                userInfo.setPassword(rs.getString(3));
                list.add(userInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭
            DBUtil.close(rs, statement, connection);
        }
        return list;
    }
}

DBUtil.java

//DBUtil.java
package util;

import java.sql.*;

public class DBUtil {
    /***
     *本文使用的数据库名称为user,账号密码均为root,
     *数据库含表userinfo,
     *该表有三个字段,id(INT),userinfo(VARCHAR),password(VARCHAR)
     *读者可根据数据库的实际情况对语句进行修改
     ***/
    public static Connection getConnection(){
        Connection connection = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useSSL=true&characterEncoding=utf-8&user=root&password=root");
            // System.out.println("创建连接成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    public static void close(ResultSet rs,Statement statement,Connection connection){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement!=null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

Main.java

//Main.java
import bean.UserInfo;
import dao.UserInfoDao;


public class Main {

    public static void main(String[] args) {
        //查找全部
        System.out.println("查找全部");
        System.out.println(new UserInfoDao().findAll());
        //增加
        System.out.println("增加");
        new UserInfoDao().add(new UserInfo(10,"王五","王五的密码"));
        System.out.println(new UserInfoDao().findAll());
        //更新
        System.out.println("更新");
        new UserInfoDao().update(new UserInfo(10,"张三","张三的密码"));
        System.out.println(new UserInfoDao().findAll());
        //按照用户名查找
        System.out.println("按照用户名查找");
        System.out.println(new UserInfoDao().selectFromUsername("张三"));
        //按照ID进行删除
        System.out.println("按照ID删除");
        new UserInfoDao().deleteFromUsername("张三");
        System.out.println(new UserInfoDao().findAll());
    }
}
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值