// 항목에 맞는 review 주입.
// INSERT INTO `webservice`.`diner_user` (`user_id`, `diner_id`, `subject`, `review`, `stars`) VALUES ('7', '9', '제목', '내용', '4');
writeSql = "INSERT INTO ? (user_id, ?, subject, review, stars) VALUES(?,?,?,?,?)";
PreparedStatement writePstmt = con.prepareStatement(writeSql);
writePstmt.setString(1,boardTarget+"_user");
writePstmt.setString(2,boardTarget+"_id");
writePstmt.setInt(3,userId);
writePstmt.setInt(4,Integer.parseInt(boardId));
writePstmt.setString(5,subject);
writePstmt.setString(6,content);
writePstmt.setInt(7,Integer.parseInt(stars));
writePstmt.executeUpdate();
writePstmt.close();
System.out.println(writeSql);
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''diner_user' (user_id, 'diner_id', subject, review, stars) VALUES(7,1,'qq','rr',' at line 1
-> "near ''diner_user'" 부분에서 오류가 발생했다고 언급하고 있습니다. 즉, INSERT INTO 문의 첫 번째 인자인 테이블 이름이 유효하지 않은 것으로 추정
테이블 이름을 동적으로 생성하는 과정에서 다음과 같은 오류가 발생함.
관련 내용으로 SQL에서는 테이블 이름이나 열 이름을 동적으로 생성하기 위해 문자열 보간이나 문자열 연결을 사용할 수 없습니다. 따라서, 이 코드에서 테이블 이름을 동적으로 생성하려는 시도는 잘못된 문법입니다.
String tableName = boardTarget + "_user";
String columnName = boardTarget + "_id";
// 항목에 맞는 review 주입.
// INSERT INTO `webservice`.`diner_user` (`user_id`, `diner_id`, `subject`, `review`, `stars`) VALUES ('7', '9', '제목', '내용', '4');
writeSql = "INSERT INTO " + tableName + " (user_id," + columnName +", subject, review, stars) VALUES(?,?,?,?,?)";
PreparedStatement writePstmt = con.prepareStatement(writeSql);
writePstmt.setInt(1,userId);
writePstmt.setInt(2,Integer.parseInt(boardId));
writePstmt.setString(3,subject);
writePstmt.setString(4,content);
writePstmt.setInt(5,Integer.parseInt(stars));
writePstmt.executeUpdate();
writePstmt.close();
-> 즉 테이블 명, Column 명에서 preparedStatement 동적으로 생성하지 못한다!
그래서 PreparedStatement의 쿼리 문자열에 포함된 물음표 대신, boardTarget 변수를 사용하여 동적으로 테이블 이름을 생성하고, 쿼리 매개 변수를 사용하여 값을 전달해야함