JAVA插入具有多个行的多个表中,具体取决于先前的ID

时间:2018-06-22 18:41:43

标签: java sql postgresql insert dao

我正在尝试创建一些内容,以便可以将锻炼内容中的锻炼内容插入数据库中。问题是我想同时创建它们并存储练习,使用链接表。

此表名为Workout_Excercise,因此我可以在每次锻炼中存储多个练习。

问题是希望能够同时创建这些内容,但是execution_excercise需要尚未创建的execution_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");
                 }
             }
         });
    });

WorkoutResource

    @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();
}

workoutService

    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;
}

1 个答案:

答案 0 :(得分:0)

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

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();
    }