programing

Java PreparedStatement 마지막으로 삽입한 상태

testmans 2023. 10. 17. 20:06
반응형

Java PreparedStatement 마지막으로 삽입한 상태

이런 식으로 진행된 이 질문에 대한 이 답변은 인터넷에서 찾기가 매우 어려울 것 같습니다.기본적으로 PreparedStatement를 사용하여 MySQL 데이터베이스에 값을 삽입하고 있습니다.SQL 주입 공격을 방지하기 위해 데이터를 탈출하기 위해 준비된 상태를 사용합니다.문제는 이제 그 열쇠들을 회수할 방법이 생겼다는 것입니다.

String query="Insert INTO Table_A(name, age) (?, ?)";
//String query="Insert INTO Table_A(name, age) ('abc','123' )";//Doesn't escape
PreparedStatement prest;
prest = con.prepareStatement(query);
prest.setString(1,"abc");
prest.setInt(2,123);
prest.executeUpdate();
//prest.executeUpdate(query, PreparedStatement.RETURN_GENERATED_KEYS); Throws an error
//prest.executeQuery(); Throws an error

그러면 입력을 회피하고 Java에서 준비된 문을 사용하려면 어떻게 해야 합니까?

통과하다Statement.RETURN_GENERATED_KEYS인에prepareStatement()문의 사항과 함께그런 다음 getGeneratedKeys()를 사용합니다.PreparedStatement삽입된 auto_incremented_id가 포함된 ResultSet을 가져옵니다.

String query="Insert INTO Table_A(name, age) (?, ?)";
                //String query="Insert INTO Table_A(name, age) ('abc','123' )";//Doesn't escape
                PreparedStatement prest;
                prest = con.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
                prest.setString(1,"abc");
                prest.setInt(2,123);
                prest.executeUpdate();
                //prest.executeUpdate(query, PreparedStatement.RETURN_GENERATED_KEYS); Throws an error
                //prest.executeQuery(); Throws an error
                ResultSet rs = prest.getGeneratedKeys();
                if(rs.next())
                {
                    int last_inserted_id = rs.getInt(1);
                }

java.sql을 사용합니다.결과Java.sql을 설정합니다.Station.getGeneratedKeys()를 사용하여 생성된 키를 검색합니다.

사용할 수 없는 경우RETURN_GENERATED_KEYS, 다른 문장(이번에는 쿼리)을 사용하여 수행합니다.

SELECT last_insert_id()

해당 표에 자동 증분 기본 키 열이 있는지 확인합니다.

언급URL : https://stackoverflow.com/questions/5513180/java-preparedstatement-retrieving-last-inserted-id

반응형