如何在java和&amp ;;中插入具有相同id的多行MySQL的

时间:2015-08-22 06:03:03

标签: java mysql

public boolean saveScore1(Score obj) {
    boolean returnValue = false;
    String sql = "insert into score(e_id,u_id,u_score,y_id,b_id) values(?,?,?,?,?)";
    try {
        Connection connection = DBConnectionHandler.getConnection();
        PreparedStatement ps = connection.prepareStatement(sql);

        ps.setInt(1, obj.getEId());
        ps.setInt(2, obj.getUId());
        ps.setString(3, obj.getUScore());
        ps.setInt(4, obj.getYId());
        ps.setInt(5, obj.getBId());

        int i = ps.executeUpdate();

        if (i > 0) {
            returnValue = true;
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return returnValue;
}

以下是使用

三个表

考试: e_id integer(auto increment) pk,e_name varchar

UserTable: u_id integer(auto increment)pk,u_name varchar

得分表: s_id integer(auto increment)pk ,u_id integer fk, e_id integer fk, u_score

我想一次向分数表发送多个数据,对同一个u_id但不同的e_id进行一次sql查询,因为e_id将包含不同的值,如BBA,MBA,B.sc,M。因此,一个用户可以有不同的考试通过。 我使用上面的java代码插入,但我只是从前端jsf表单中获取最后一个值。
我如何一次为不同的e_id发送相同u_id的多行。

1 个答案:

答案 0 :(得分:0)

首先,您不要使用SQL查询插入数据。查询是SELECT语句。

使用JDBC,您可以批量多个插入语句,这样可以减少到数据库的往返次数(性能)。在功能上,它与一次插入一行相同。

由于您要插入多行,您可能希望所有内容都成功,或者全部失败,因此您需要自己执行commitrollback

当然,由于要想要插入多个得分行,您的方法应该采用List<Score>

public boolean saveScores(List<Score> scores) {
    String sql = "insert into score(e_id,u_id,u_score,y_id,b_id) values(?,?,?,?,?)";
    try (Connection connection = DBConnectionHandler.getConnection()) {
        connection.setAutoCommit(false);
        try {
            try (PreparedStatement ps = connection.prepareStatement(sql)) {
                for (Score score : scores) {
                    ps.setInt   (1, score.getEId());
                    ps.setInt   (2, score.getUId());
                    ps.setString(3, score.getUScore());
                    ps.setInt   (4, score.getYId());
                    ps.setInt   (5, score.getBId());
                    ps.addBatch();
                }
                ps.executeBatch();
            }
            connection.commit();
        } catch (Exception e) {
            connection.rollback();
        }
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}