安装MySQL
可以参考前一篇日志
另外安装SQLyog,运行安装包,一路next即可。
创建数据库
- 创建数据库
首先打开SQLyog,创建新连接,用户名和密码是安装数据库时所填写的。
在界面左侧空白处右键选择创建数据库,或者上方菜单栏选择数据库 ->创建数据库,再或者使用快捷键 Ctrl + D 进行数据库的创建,这里名称为user,另外注意选择字符集和排序规则。
- 创建表
选中所创建的数据库中的表项,右键,选择创建表
新表名为userinfo,字符集和核对与数据库相同,为表添加三列,其中id为主键且设为自增,具体设置如下,最后点击保存。
- 加入数据
表创建完成之后,选择打开表。
添加一行数据,这里只需加入用户名和密码即可,id自动生成,添加后点击保存更改。
JDBC编程
前期准备
- 创建项目
打开IDEA,创建项目Test,在src目录下新建com.zhongruan包。
- 导入jar包
在根目录创建lib包,将mysql-connector-java-5.1.36.jar文件复制到其中。
选中添加的包,右键,点击 Add as Library… 将包导入。 - 在com.zhongruan包下创建Test类,开始项目。
具体步骤
- 加载驱动
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=123");
其中,用户名和密码根据之前数据库的配置进行填写。
- 写sql
例如查询之前的userinfo表
String sql = "select * from userinfo";
- 得到statement对象
PreparedStatement statement = connection.prepareStatement(sql);
- 执行sql得到结果集
ResultSet rs = statement.executeQuery();
- 处理结果集
while (rs.next()) {
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}
- 关闭资源
结合实际情况,考虑到可能出现异常,因此将资源的关闭写在finally块中。此处给出全部代码。
package com.zhongruan;
import java.sql.*;
public class Test {
public static void main(String[] args) {
ResultSet rs = null;
PreparedStatement statement = null;
Connection connection = null;
try {
// 1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.创建连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?" +
"useSSL=true&characterEncoding=utf-8&user=root&password=123");
System.out.println("创建连接成功");
// 3.写sql
String sql = "select * from userinfo";
// 4.得到statement对象
statement = connection.prepareStatement(sql);
// 5.执行sql得到结果集
rs = statement.executeQuery();
// 6.处理结果集
while (rs.next()) {
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 7.关闭资源
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();
}
}
}
}
}
代码封装
- 封装数据库连接和资源的关闭
在添加插入、更新、删除功能后,会有大量重复代码。首先对数据库连接和资源的关闭进行封装。在com.zhongruan目录下创建util包,在其中创建DBUtil类,在此类中实现数据库连接和资源的关闭。
package com.zhongruan.util;
import java.sql.*;
public class DBUtil {
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=123");
} catch (Exception 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();
}
}
}
}
封装之后,使用如下的方法进行连接和关闭连接:
try {
connection = DBUtil.getConnection();
// ...
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.close(rs, statement, connection);
}
- 添加实体类
在com.zhongruan目录下添加bean包,在其中创建UserInfo类保存用户信息。同时添加get/set方法,toString方法。
package com.zhongruan.bean;
public class UserInfo {
private int id;
private String username;
private String 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;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserInfo{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
之后使用如下的方法保存数据库中读取的信息:
List<UserInfo> list = new ArrayList<>();
try {
// ...
// 执行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();
}
return list;
- 抽取数据库操作
在com.zhongruan目录下添加dao包,在其中创建UserInfoDao类保存对表userinfo的操作。
public class UserInfoDao {
public List<UserInfo> findAll() {
// 查询操作
// ...
}
public void add(UserInfo userInfo){
// 插入操作
// ...
}
}
在Test类中调用如下:
public class Test {
public static void main(String[] args) {
UserInfoDao userInfoDao = new UserInfoDao();
List<UserInfo> list = userInfoDao.findAll();
System.out.println(list);
}
}
增删改查
将删除、修改功能加至UserInfoDao中。
public class UserInfoDao {
public List<UserInfo> findAll() {
ResultSet rs = null;
PreparedStatement statement = null;
Connection connection = null;
List<UserInfo> list = new ArrayList<>();
try {
// 1.加载驱动
// 2.创建连接
connection = DBUtil.getConnection();
System.out.println("创建连接成功");
// 3.写sql
String sql = "select * from userinfo";
// 4.得到statement对象
statement = connection.prepareStatement(sql);
// 5.执行sql得到结果集
rs = statement.executeQuery();
// 6.处理结果集
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 {
// 7.关闭资源
DBUtil.close(rs, statement, connection);
}
return list;
}
public void add() {
PreparedStatement statement = null;
Connection connection = null;
try {
connection = DBUtil.getConnection();
String sql = "insert into userinfo(username,password) values(?,?)";
statement = connection.prepareStatement(sql);
statement.setString(1, "hahaha");
statement.setString(2, "1234");
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭资源
DBUtil.close(null, statement, connection);
}
}
public void del() {
PreparedStatement statement = null;
Connection connection = null;
try {
connection = DBUtil.getConnection();
String sql = "delete from userinfo where username=?";
statement = connection.prepareStatement(sql);
statement.setString(1, "hahaha");
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.close(null, statement, connection);
}
}
public void update() {
PreparedStatement statement = null;
Connection connection = null;
try {
connection = DBUtil.getConnection();
String sql = "update userinfo set password=? where id=?";
statement = connection.prepareStatement(sql);
statement.setString(1, "1234567");
statement.setInt(2, 2);
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.close(null, statement, connection);
}
}
}
最后,附上完整代码。