第2关:博客系统数据库设计与实现之增加
任务描述
本关任务:通过 JDBC 的方式插入一条用户数据到 MySQL 表 t_user 中。
相关知识
为了完成本关任务,你需要掌握:JDBC 如何插入数据到数据库。
- 首先,我们需要加载(注册)数据库驱动(到 JVM );
Class.forName("com.mysql.jdbc.Driver");
-
建立(获取)数据库连接;
//参数:1.JDBC URL 2. 数据库用户名 3. 数据库密码
Connection con = DriverManager.getConnection(url, user, password);
-
创建(获取)数据库操作对象;
PreparedStatement preparedStatement(String sql) :主要用来预编译SQL语句,并且执行。解决了sql注入的漏洞
-
定义操作的 SQL 语句;
sql = "insert into a (id,name,pwd) values (?,?,?)";
-
执行数据库操作;
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1, 1); // 设置 id 的值为 1
ps.setString(2, "abc"); // 设置 name 的值为 abc
ps.setString(3, "123456"); // 设置 pwd 的值为 123456
-
返回的结果是影响的行数;
int count =ps.executeUpdate();
-
关闭对象,回收数据库资源(关闭数据库操作对象-->关闭连接)。
ps.close();
con.close();
相关数据说明
用户表实体类:User.java;
import java.util.Date;
public class User {
private Integer userId; // 用户ID
private String userName; // 用户名称
private String passWord; // 用户密码
//省略构造器和 getter 和 setter 方法
}
MySQL 数据库 mydb;
用户表 t_user;
列名 | 类型 | 非空 | 注释 |
---|---|---|---|
userId | int | √ | 用户 ID 主键 |
userName | varchar | √ | 用户名 |
passWord | varchar | √ | 用户密码 |
MySQL 连接配置:
-
Driver:com.mysql.jdbc.Driver;
-
URL:jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8;
-
user:root;
-
password:123123。
编程要求
在右侧编辑器 Begin-End 处补充代码,通过 JDBC 的方式插入一条用户数据到 MySQL 表 t_user 中,具体要求如下:
-
在 User.java 文件中定义了一个 User 用户类,点击代码文件可以进行查看该类的属性和方法;
-
在 InsertUser 类中定义了一个 insertUser(User user) 方法,将参数中的用户数据添加到表 t_user 中,最后返回结果影响行数。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。
测试输入:无
预期输出:
添加用户成功
userId userName passWord
1 sunfeng 147258
2 dv 123456
3 suning 845966
4 xiaoming 857857
代码实现:
import java.sql.*;
public class InsertUser {
private static final String driver = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8";
private static final String username = "root"; // 数据库的用户名
private static final String password = "123123"; // 数据库的密码:这个是自己安装数据库的时候设置的,每个人不同。
private static Connection conn = null; // 声明数据库连接对象
private static PreparedStatement ps = null; // 声明(获取)数据库操作对象
public static int insertUser(User user) {
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
// 定义影响行数
int i = 0;
try {
// 加载(注册)数据库驱动(到JVM)
Class.forName(driver);
// 建立(获取)数据库连接
conn = DriverManager.getConnection(url, username, password);
// 定义操作的SQL语句
String sql = "INSERT INTO t_user (userId,userName,passWord) VALUES(?,?,?)";
// 执行数据库操作
ps = conn.prepareStatement(sql);
ps.setInt(1, user.getUserId());
ps.setString(2, user.getUserName());
ps.setString(3, user.getPassWord());
// 返回的结果是影响的行数
i = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
// 关闭对象,回收数据库资源
try {
if(ps != null){
ps.close();
}
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return i;
/********** End **********/
}
}