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的多行。
答案 0 :(得分:0)
首先,您不要使用SQL查询插入数据。查询是SELECT
语句。
使用JDBC,您可以批量多个插入语句,这样可以减少到数据库的往返次数(性能)。在功能上,它与一次插入一行相同。
由于您要插入多行,您可能希望所有内容都成功,或者全部失败,因此您需要自己执行commit
或rollback
。
当然,由于要做想要插入多个得分行,您的方法应该采用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;
}