创建PersonDao完成JDBC
时间: 2024-01-18 09:23:16 浏览: 81
好的,以下是创建PersonDao并完成JDBC操作的代码:
```java
public class PersonDao {
private Connection conn = null;
private PreparedStatement stmt = null;
private ResultSet rs = null;
// 添加Person
public void addPerson(Person person) {
try {
// 获取数据库连接
conn = getConnection();
// 编写SQL语句
String sql = "INSERT INTO person (name, age, address) VALUES (?, ?, ?)";
// 预编译SQL语句
stmt = conn.prepareStatement(sql);
// 设置参数
stmt.setString(1, person.getName());
stmt.setInt(2, person.getAge());
stmt.setString(3, person.getAddress());
// 执行SQL语句
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 释放资源
close(conn, stmt, rs);
}
}
// 根据id删除Person
public void deletePersonById(Long id) {
try {
// 获取数据库连接
conn = getConnection();
// 编写SQL语句
String sql = "DELETE FROM person WHERE id=?";
// 预编译SQL语句
stmt = conn.prepareStatement(sql);
// 设置参数
stmt.setLong(1, id);
// 执行SQL语句
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 释放资源
close(conn, stmt, rs);
}
}
// 更新Person
public void updatePerson(Person person) {
try {
// 获取数据库连接
conn = getConnection();
// 编写SQL语句
String sql = "UPDATE person SET name=?, age=?, address=? WHERE id=?";
// 预编译SQL语句
stmt = conn.prepareStatement(sql);
// 设置参数
stmt.setString(1, person.getName());
stmt.setInt(2, person.getAge());
stmt.setString(3, person.getAddress());
stmt.setLong(4, person.getId());
// 执行SQL语句
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 释放资源
close(conn, stmt, rs);
}
}
// 根据id查询Person
public Person getPersonById(Long id) {
Person person = null;
try {
// 获取数据库连接
conn = getConnection();
// 编写SQL语句
String sql = "SELECT * FROM person WHERE id=?";
// 预编译SQL语句
stmt = conn.prepareStatement(sql);
// 设置参数
stmt.setLong(1, id);
// 执行SQL语句
rs = stmt.executeQuery();
// 处理结果集
if (rs.next()) {
person = new Person();
person.setId(rs.getLong("id"));
person.setName(rs.getString("name"));
person.setAge(rs.getInt("age"));
person.setAddress(rs.getString("address"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 释放资源
close(conn, stmt, rs);
}
return person;
}
// 查询所有Person
public List<Person> getAllPerson() {
List<Person> list = new ArrayList<>();
try {
// 获取数据库连接
conn = getConnection();
// 编写SQL语句
String sql = "SELECT * FROM person";
// 预编译SQL语句
stmt = conn.prepareStatement(sql);
// 执行SQL语句
rs = stmt.executeQuery();
// 处理结果集
while (rs.next()) {
Person person = new Person();
person.setId(rs.getLong("id"));
person.setName(rs.getString("name"));
person.setAge(rs.getInt("age"));
person.setAddress(rs.getString("address"));
list.add(person);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 释放资源
close(conn, stmt, rs);
}
return list;
}
// 获取数据库连接
private Connection getConnection() throws SQLException {
// 这里需要根据具体的数据库信息进行配置
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8";
String username = "root";
String password = "123456";
return DriverManager.getConnection(url, username, password);
}
// 释放资源
private 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();
}
}
}
```
在这个PersonDao中,我们实现了添加、删除、更新、查询等基本的JDBC操作。这里需要注意的是,我们使用了预编译SQL语句,以提高执行效率和防止SQL注入攻击。同时,我们还封装了获取数据库连接和释放资源的方法,以便在代码中进行复用。在实际开发中,我们可以根据需要进行进一步的封装和优化。
阅读全文