JavaServlrt实现多表查询,通过用户表,用户信息表

渡星河
2023-02-17 / 0 评论 / 11 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年02月17日,已超过577天没有更新,若内容或图片失效,请留言反馈。

va Servlet 可以通过 JDBC 来操作数据库,实现多表查询。下面提供一个例子,通过用户表(User)和用户信息表(UserInfo)进行多表查询,返回符合条件的用户信息。

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class UserDAO {
    private Connection connection;
    private String driverClass = "com.mysql.jdbc.Driver";
    private String url = "jdbc:mysql://localhost:3306/test";
    private String username = "root";
    private String password = "password";

    public UserDAO() throws Exception {
        Class.forName(driverClass);
        connection = DriverManager.getConnection(url, username, password);
    }

    public List<UserInfo> getUserInfo(String name, int age) throws Exception {
        List<UserInfo> userInfos = new ArrayList<UserInfo>();

        String sql = "SELECT * FROM User u JOIN UserInfo ui ON u.id = ui.user_id WHERE u.name=? AND u.age=?";

        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1, name);
        statement.setInt(2, age);

        ResultSet rs = statement.executeQuery();

        while (rs.next()) {
            UserInfo userInfo = new UserInfo();
            userInfo.setId(rs.getInt("id"));
            userInfo.setUserId(rs.getInt("user_id"));
            userInfo.setEmail(rs.getString("email"));
            userInfo.setPhone(rs.getString("phone"));

            userInfos.add(userInfo);
        }

        rs.close();
        statement.close();
        return userInfos;
    }

    public void close() throws Exception {
        connection.close();
    }
}

上面的例子中,UserDAO 类通过 JDBC 来连接 MySQL 数据库。getUserInfo 方法可以接收用户名和年龄两个参数,查询符合条件的用户信息,返回一个用户信息列表。

需要注意的是,在 getUserInfo 方法中,通过 u JOIN UserInfo ui ON u.id = ui.user_id 的方式进行了多表查询。这个 SQL 语句的含义是,在 User 表和 UserInfo 表中,如果两个表中的 user_id 和 id 字段相同,就把两个表中的数据拼接在一起返回。

如果需要对数据库进行插入操作,可以使用类似的方法进行操作,同时开启事务,如下所示:

    public void addUserInfo(UserInfo userInfo) throws Exception {
        connection.setAutoCommit(false);

        String sql = "INSERT INTO UserInfo (user_id, email, phone) VALUES (?, ?, ?)";

        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, userInfo.getUserId());
        statement.setString(2, userInfo.getEmail());
        statement.setString(3, userInfo.getPhone());

        statement.executeUpdate();

        connection.commit();

        statement.close();
    }

上面的例子中,addUserInfo 方法会将一个用户信息对象插入到 UserInfo 表中。在这个过程中,需要开启事务,将多个 SQL 操作封装在一个事务中,保证数据的一致性。在本例中,通过 connection.setAutoCommit(false) 方法将自动提交关闭,然后通过 connection.commit() 方法手动提交事务,确保数据插入操作执行成功后才进行提交。

0

评论 (0)

取消