下面我就来详细讲解一下如何通过代理类实现Java连接数据库,并使用DAO层操作数据。
1. 环境准备
在开始操作之前,需要准备以下环境:
- JDK
- MySQL数据库
- Eclipse或IntelliJ IDEA等Java开发工具
- JDBC驱动包:MySQL的JDBC驱动包
2. 创建数据库
首先,需要创建一个名为“test”的数据库。可以使用MySQL命令行或可视化工具创建数据库,并创建一个名为“user”的数据表,同时插入一些数据作为示例。
示例代码如下:
CREATE DATABASE test;
USE test;
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
age INT,
address VARCHAR(50)
);
INSERT INTO user (name, age, address) VALUES ('Tom', 20, 'Beijing');
INSERT INTO user (name, age, address) VALUES ('Jerry', 22, 'Shanghai');
INSERT INTO user (name, age, address) VALUES ('Alice', 18, 'Guangzhou');
INSERT INTO user (name, age, address) VALUES ('Bob', 25, 'Hangzhou');
3. 创建Java项目
接下来,我们需要在开发工具中创建一个Java项目,并引入MySQL的JDBC驱动包。
4. 编写代理类
接下来,我们需要编写一个代理类来连接数据库,并执行数据操作。这里我们使用DAO(Data Access Object)模式,即创建一个UserDao接口和其实现类UserDaoImpl。
示例代码如下:
package com.example.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.example.model.User;
import com.example.util.DBUtil;
public class UserDaoImpl implements UserDao {
@Override
public List<User> findAll() {
List<User> userList = new ArrayList<>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection(); // 获取数据库连接
String sql = "SELECT * FROM user";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String address = rs.getString("address");
User user = new User(id, name, age, address);
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(conn, pstmt, rs); // 关闭数据库连接
}
return userList;
}
}
这个代理类的作用是查询数据库中的所有用户信息。
在代理类中,我们通过调用DBUtil类的getConnection()方法获取数据库连接,然后通过PreparedStatement执行SQL查询语句,最后封装成User对象并添加到List集合中。
5. 编写数据库连接工具类
在上一步中,我们使用了一个DBUtil类来获取数据库连接和关闭资源,下面是该类的实现代码。这里我们使用JDBC的方式连接数据库。
package com.example.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8";
private static final String USERNAME = "root";
private static final String PASSWORD = "123456";
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USERNAME, PASSWORD);
}
public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) {
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();
}
}
}
}
DBUtil类中定义了一个静态常量URL,用于存放数据库连接的URL地址,USERNAME和PASSWORD分别为连接数据库的用户名和密码。
在DBUtil中,我们使用静态代码块来加载MySQL的JDBC驱动程序,通过getConnection()方法获取数据库连接对象,使用close()方法关闭数据库连接对象、Statement对象和ResultSet对象。
6. 测试代码
最后,我们来编写测试代码,来验证代理类是否正常工作,能够从数据库中查询出数据并输出到控制台。
package com.example.test;
import java.util.List;
import com.example.dao.UserDao;
import com.example.dao.UserDaoImpl;
import com.example.model.User;
public class Test {
public static void main(String[] args) {
UserDao userDao = new UserDaoImpl();
List<User> userList = userDao.findAll();
for (User user : userList) {
System.out.println(user);
}
}
}
这段代码中,我们通过UserDaoImpl类的实例来查询所有用户信息,并输出到控制台。
运行该代码后,将输出以下结果:
User [id=1, name=Tom, age=20, address=Beijing]
User [id=2, name=Jerry, age=22, address=Shanghai]
User [id=3, name=Alice, age=18, address=Guangzhou]
User [id=4, name=Bob, age=25, address=Hangzhou]
至此,我们就成功地使用代理类实现Java连接数据库,并使用DAO层操作数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过代理类实现java连接数据库(使用dao层操作数据)实例分享 - Python技术站