JAVA 根据较早的 ID 插入到具有多行的多个表中

JAVA Inserting into multiple tables with multiple rows depending on earlier ID

我正在尝试创建一些东西,我可以将锻炼中完成的练习插入到数据库中。问题是我想同时创建它们并存储我使用 link 表格的练习。

这个 table 被命名为 Workout_Excercise 所以我可以在每次锻炼中存储多个练习。

问题是希望能够同时创建这些,但是 workout_excercise 需要尚未创建的 workout_id。

我当前的代码插入了工作正常的锻炼,现在我很好奇我如何能够同时插入练习。

当前用于插入锻炼的代码:

前面

        $(".insertWorkout").on("click", function(){
            if(localStorage.getItem('token') != null ) {
                var token = localStorage.getItem('token');
             }
             else {
                 var token = null;
             }
        $.ajax({
             url: '/project/restservices/workouts/insert',
             type: 'POST',
             beforeSend:  function(xhr){
                 xhr.setRequestHeader('Authorization', 'Bearer ' + token);
             },
             data: {
                 titel: $(".workoutTitel").val() ,
                 beschrijving: $(".workoutBeschrijving").val(),
                 categorie_id: $(".categorieSelect").val(),
                 persoon_id: 1
             },
             success: function(response) {
                 if(response){
                     $(".workoutTitel").val("");
                     $(".workoutBeschrijving").val("");
                     $(".messageSpanSucces").html("Oefening invoeren gelukt");
                 }
                 else {
                     $(".messageSpanFail").html("Oefening invoeren mislukt");
                 }
             }
         });
    });

锻炼资源

    @Path("insert")
@POST
@Produces("application/json")
@RolesAllowed("user")
public Response saveWorkout(@FormParam("titel") String titel, @FormParam("beschrijving") String beschrijving,
        @FormParam("categorie_id") int categorie_id, @FormParam("persoon_id") int persoon_id) throws SQLException {
    WorkoutService service = ServiceProvider.getWorkoutService();
    boolean country = service.saveWorkout(titel, beschrijving, categorie_id, persoon_id);

    return Response.ok(country).build();
}

锻炼服务

    public boolean saveWorkout(String titel, String beschrijving, int categorie_id, int persoon_id) throws SQLException {
    return WorkoutPostgresDao.saveWorkout(titel, beschrijving, categorie_id, persoon_id);
}

锻炼 DAO

    public boolean saveWorkout(String titel, String beschrijving, int categorie_id, int persoon_id) throws SQLException {
    boolean result = false;
    try (Connection con = super.getConnection()) {
        String query = "INSERT INTO \"Workout\" VALUES(?,?,?,?)";
        PreparedStatement pstmt = con.prepareStatement(query);
        pstmt.setString(1, titel);
        pstmt.setString(2, beschrijving);
        pstmt.setInt(3, persoon_id);
        pstmt.setInt(4, categorie_id);
        pstmt.executeUpdate();
        result = true;

    } catch (SQLException sqle) {
        sqle.printStackTrace();
    }
    return result;
}

您可以使用以下方法获取生成的密钥:

try (Connection con = super.getConnection()) {
        String query = "INSERT INTO \"Workout\" VALUES(?,?,?,?)";
        String query2 = "INSERT INTO Workout_exercise ... ";
        PreparedStatement pstmt = con.prepareStatement(query,PreparedStatement.RETURN_GENERATED_KEYS);
        pstmt.setString(1, titel);
        pstmt.setString(2, beschrijving);
        pstmt.setInt(3, persoon_id);
        pstmt.setInt(4, categorie_id);
        pstmt.executeUpdate();
        result = true;

        try (ResultSet rs = pstmt.getGeneratedKeys()) {
                    if (rs != null && rs.next()) {
                        workout_pkey = rs.getInt(1);
                        PreparedStatement pstmt2=con.prepareStatement(query2);
                        ...

                        for (Workout_exercise ex: exs) {
                              pstmt2.setInt(1, workout_pkey);
                              ...

                              pstmt2.addBatch();
                        }
                         pstmt2.executeBatch();

           }
       }    
    } catch (SQLException sqle) {
        sqle.printStackTrace();
    }