下面是使用JDBC实现数据访问对象层(DAO)代码示例的完整攻略:
1. JDBC DAO层的基本结构
在实现JDBC DAO层之前,需要先确定DAO层的基本结构。一般来说,DAO层包括以下三个部分:
- DAO接口,用于定义数据的增删改查操作。
- DAO实现类,用于实现DAO接口,提供具体的数据访问操作。
- 实体类,用于存储数据库中的数据,每个实体类对应一张数据表。
2. JDBC DAO的实现过程
2.1 JDBC工具类的编写
在实现JDBC DAO之前,需要先编写JDBC工具类,用于进行数据库连接、关闭等操作。以下是一个简单的JDBC工具类的示例:
public class JdbcUtils {
private static final String url = "jdbc:mysql://localhost:3306/test";
private static final String username = "root";
private static final String password = "";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2.2 DAO接口的定义
定义DAO接口,用于定义数据的增删改查操作。以下是一个简单的DAO接口的示例:
public interface UserDao {
void addUser(User user);
void updateUser(User user);
void deleteUser(int id);
User getUserById(int id);
List<User> getAllUser();
}
2.3 DAO实现类的编写
实现DAO接口,提供具体的数据访问操作。以下是一个简单的DAO实现类的示例:
public class UserDaoImpl implements UserDao {
@Override
public void addUser(User user) {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = JdbcUtils.getConnection();
stmt = conn.prepareStatement("insert into user(id, name, age) values(?, ?, ?)");
stmt.setInt(1, user.getId());
stmt.setString(2, user.getName());
stmt.setInt(3, user.getAge());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.close(conn, stmt, null);
}
}
@Override
public void updateUser(User user) {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = JdbcUtils.getConnection();
stmt = conn.prepareStatement("update user set name = ?, age = ? where id = ?");
stmt.setString(1, user.getName());
stmt.setInt(2, user.getAge());
stmt.setInt(3, user.getId());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.close(conn, stmt, null);
}
}
@Override
public void deleteUser(int id) {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = JdbcUtils.getConnection();
stmt = conn.prepareStatement("delete from user where id = ?");
stmt.setInt(1, id);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.close(conn, stmt, null);
}
}
@Override
public User getUserById(int id) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
User user = null;
try {
conn = JdbcUtils.getConnection();
stmt = conn.prepareStatement("select * from user where id = ?");
stmt.setInt(1, id);
rs = stmt.executeQuery();
if (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.close(conn, stmt, rs);
}
return user;
}
@Override
public List<User> getAllUser() {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
List<User> userList = new ArrayList<>();
try {
conn = JdbcUtils.getConnection();
stmt = conn.prepareStatement("select * from user");
rs = stmt.executeQuery();
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.close(conn, stmt, rs);
}
return userList;
}
}
2.4 实体类的定义
实现实体类,用于存储数据库中的数据,每个实体类对应一张数据表。以下是一个简单的实体类的示例:
public class User {
private int id;
private String name;
private int age;
// getter/setter省略
}
3. 示例说明
3.1 添加数据
首先,通过JDBC DAO层的工具类获取数据库连接。
Connection conn = JdbcUtils.getConnection();
然后创建UserDaoImpl对象,并调用addUser(User user)方法,添加数据。
UserDao userDao = new UserDaoImpl();
User user = new User();
user.setId(1);
user.setName("张三");
user.setAge(18);
userDao.addUser(user);
3.2 查询数据
首先,通过JDBC DAO层的工具类获取数据库连接。
Connection conn = JdbcUtils.getConnection();
然后创建UserDaoImpl对象,并调用getUserById(int id)方法,查询数据。
UserDao userDao = new UserDaoImpl();
User user = userDao.getUserById(1);
System.out.println(user.getName());
从数据库中查询出的数据将会被封装到User对象中返回。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用JDBC实现数据访问对象层(DAO)代码示例 - Python技术站