0x00 课题内容

JAVA实验:JDBC编程实现数据库操作插图
JDBC实验

实验十 文件操作练习

  • 使用MySQL数据库管理系统,建立名为“Information”数据库,在该数据库中创建表名为“userInfo”的数据表,用于存储用户注册时在注册界面输入的用户信息,包括:用户名、密码等,为“userInfo”表设置主键。
  • 编写User.java类,该类对应于数据库的userInfo表,其成员变量和数据库字段相对应,提供对成员变量操作的常规方法,包括:所有成员变量的set方法和get方法等。 
  • 编写数据库连接类DBUtil.java,该类实现连接数据库的功能
  • 编写数据访问类UserDao.java(Data Access Object,DAO),该类负责提供方法对User表进行增查删改等所有操作,其它类需要对User表进行增查删改等操作时直接该使用该类。
  • add(User user)方法:添加一个用户的信息到User表中,如果用户已经存在则不重复添加。
  • queryByName(String name)方法:按用户姓名查找用户,还可以根据其他字段查询用户。
  • deleteByName(String name)方法:删除一个用户记录,比如:根据用户名或编号删除某个用户。
  • update()方法:更新用户信息,比如:修改密码。
  • queryAll()方法:遍历并显示所有用户信息。
  • 编写测试类Test.java,测试以下功能:
    • 查询并显示所有用户
    • 添加一个用户
    • 按用户名查询用户
    • 修改用户密码
    • 删除用户

说明
UserDao.java数据库操作
User.java用户类
DBUtil.java连接数据库
Test.java测试类
类说明

0x01 源代码

UserDao.java

package DBUtil;
import java.sql.*;
public class UserDao {
    Connection conn;
    ResultSet rs = null;
    UserDao() { //初始化自动连接到数据库
        DBUtil.connetcDB();
        this.conn = DBUtil.getConnection(); //获得链接
    }
    public void add(User user) { //返回是否添加成功

        String sql = "insert into userinfo(ID,username,password) values(?,?,?)";

        try {
            PreparedStatement st = conn.prepareStatement(sql);
            st.setString(1, user.getID());
            st.setString(2, user.getUsername());
            st.setString(3, user.getPassword());
            int result = st.executeUpdate();
            System.out.println("成功添加用户" + user.getUsername() + ",影响行数:" +
                result + "\n");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
    public void queryByName(String name) { //返回一个javasql记录
        String sql = "SELECT * from userinfo where username = ?"; //查询
        try {
            PreparedStatement st = conn.prepareStatement(sql);
            st.setString(1, name);
            rs = st.executeQuery();
            while (rs.next()) {
                String ID = rs.getString(1);
                String name1 = rs.getString(2);
                String password = rs.getString(3);
                System.out.println("成功查询到以下数据:");
                System.out.println("ID\t\t用户名\t\t密码"); //输出
                System.out.println(ID + "\t\t" + name1 + "\t\t\t" + password + "\n"); //输出
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    public void deleteByName(String name) {
        String sql = "delete from userinfo where username = ?";
        try {
            PreparedStatement st = conn.prepareStatement(sql);
            st.setString(1, name);
            int result = st.executeUpdate();
            System.out.println("成功删除用户:" + name + "\t影响行数:" + result + "\n");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    public void updatePassword(String name, String password) {
        String sql = "update userinfo set password = ? where username = ?";

        try {
            PreparedStatement st = conn.prepareStatement(sql);
            st.setString(1, password);
            st.setString(2, name);
            int n = st.executeUpdate();
            System.out.println("更新用户:" + name + "成功,影响行数:" + n + "\n");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
    public void queryAll() {
        String sql = "select * from userinfo";
        try {
            PreparedStatement st = conn.prepareStatement(sql);
            rs = st.executeQuery(sql);
            System.out.println("全部用户信息如下:");
            System.out.println("ID\t\t用户名\t\t密码"); //输出
            while (rs.next()) {
                String ID = rs.getString(1);
                String name = rs.getString(2);
                String password = rs.getString(3);
                System.out.println(ID + "\t\t" + name + "\t\t\t" + password); //输出
            }

            System.out.println("\n");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

User.java

package DBUtil;
public class User {
    private String username;
    private String password;
    private String Id;
    public User() {
    }
    public String getUsername() {
        return username;
    }
    public String getPassword() {
        return password;
    }
    public String getID()
    {
        return Id;
    }
    public void setName(String username) {
        this.username = username;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public void setID(String ID) {
        this.Id = ID;
    }
}

DBUtil.java

package DBUtil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBUtil {
    //设置数据库参数
    private static final  String driver = "com.mysql.cj.jdbc.Driver";
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/information?useSSL=true&characterEncoding=utf-8&serverTimezone=GMT";
    private static final String USER = "information";
    private static final String PASSWORD = "123456";
    private static Connection conn = null;

    //connetcDB方法:连接数据库
    public static void connetcDB() {
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(URL,USER,PASSWORD);
        }
            catch (SQLException | ClassNotFoundException throwables) {
            throwables.printStackTrace();
        }

    }
    //getConnection方法:返回所建立的数据库连接,即:Connection对象
    public static Connection getConnection() {
        return conn;
    }
    public static void closeConnection(){
        try {
            conn.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
    DBUtil(){
    }
}

Test.java

package DBUtil;
public class test {
    public static void main(String[] args) {
        UserDao userDao = new UserDao();
        //查询所有用户
        userDao.queryAll();
        //通过姓名删除用户
        userDao.deleteByName("张三");
        userDao.queryAll();

        //添加一个用户
        User user = new User();
        user.setID("007");
        user.setName("张三");
        user.setPassword("abcde");
        userDao.add(user);

        //        通过姓名查询用户
        userDao.queryByName("张三");

        //        修改新用户的密码
        userDao.updatePassword("张三", "56789");
        userDao.queryByName("张三");
        //关闭数据库连接
        DBUtil.closeConnection();
    }
}

0x02 测试结果

运行窗口截图:

JAVA实验:JDBC编程实现数据库操作插图1
运行窗口

Mysql截图:

JAVA实验:JDBC编程实现数据库操作插图2
表段数据1
JAVA实验:JDBC编程实现数据库操作插图3
表段数据2

0x03 问题及解决方案

实验中的问题:

  • 无法正常连接到数据库
  • 无法正常执行SQL语句;
  • 执行SQL语句使用错误;

解决方案:

  • 检测Mysql是否正常启动,重新设置数据库名和密码,修改数据库连接地址为localhost127.0.0.1,导入JDBC驱动,再次连接数据库即可正常回显。
  • 验证SQL语句是否正确,并将SQL语句在Mysql执行,执行正确并返回正确的信息,替换错误的SQL语句即可正常执行。
  • executeUpdateexecuteQuery区分,前者执行增删改,返回修改影响的行数;而后者执行查询,返回SQL记录,迭代器用法。

0x04 Gitee开源仓库

本文代码已经上传至Gitee上的仓库

JAVA实验:JDBC编程实现数据库操作插图4
Gitee
Gitee项目仓库
包含本文源码
类型: JAVA