반응형
Java에서 다음 쿼리를 실행할 수 없습니다.
저는 자바에서 다음과 같은 쿼리를 실행하려고 합니다.
쿼리는 이렇게 표시되며 Maria DB에서 실행하려고 하면 완벽하게 작동합니다.
LOCK TABLE item_tree WRITE;
SELECT @myRight := rgt FROM item_tree WHERE item_id = 7;
UPDATE item_tree SET rgt = rgt + 2 WHERE rgt >= @myRight;
UPDATE item_tree SET lft = lft + 2 WHERE lft > @myRight;
INSERT INTO item_tree(item_name, lft, rgt) VALUES('BLA', @myRight , @myRight + 1);
UNLOCK TABLES;
이를 위해 다음과 같은 코드를 작성했습니다.
try {
DatabaseConnection dbConn = new DatabaseConnection();
Connection conn = dbConn.initiateConnection();
PreparedStatement stmt = conn.prepareStatement(Queries.queryInsertChildNode);
stmt.setInt(1, Integer.parseInt(nodeId));
stmt.setString(2,newNodeName);
ResultSet resultSet = stmt.executeQuery();
System.out.println(resultSet);
dbConn.closeConnection(conn);
} catch (Exception e) {
e.printStackTrace();
}
여기에 쿼리를 입력합니다.queryInsertChildNode =은(는) 위의 쿼리를 나타냅니다.
다음과 같은 오류가 표시됩니다.
SQL 구문에 오류가 있습니다.
사용 중인 MariaDB 서버 버전에 해당하는 설명서에서 'UPDATE item_tree SET rgt = rgt + 2 WHERE rgt >= @myRight; UPDATE item_tree SET' 근처에서 사용할 올바른 구문을 확인합니다.
잘 부탁드립니다.
저장 프로시저를 사용하여 이 문제를 해결했습니다.아래 코드와 같은 저장 프로시저를 만들었습니다.
CREATE DEFINER=`XXXX`@`localhost` PROCEDURE `insertChildNode`(IN `nodeId` INT, IN `newNodeName` VARCHAR(50))
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
Rollback;
START TRANSACTION;
SELECT @myRight := rgt FROM item_tree WHERE item_id = nodeId;
UPDATE item_tree SET rgt = rgt + 2 WHERE rgt >= @myRight;
UPDATE item_tree SET lft = lft + 2 WHERE lft > @myRight;
INSERT INTO item_tree(item_name, lft, rgt) VALUES(newNodeName, @myRight , @myRight + 1);
COMMIT;
END
그리고 저는 자바에서 이 저장 프로시저를 다음과 같은 코드로 불렀습니다.
CallableStatement cstmt = null;
try {
DatabaseConnection dbConn = new DatabaseConnection();
Connection conn = dbConn.initiateConnection();
String SQL = "{call insertChildNode(?, ?)}";
//CallableStatement cStmt = conn.prepareCall("{call demoSp(?, ?)}");
cstmt = conn.prepareCall(SQL);
cstmt.setInt(1, Integer.parseInt(nodeId));
cstmt.setString(2, newNodeName);
cstmt.execute();
System.out.println("Query executed...");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
cstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
언급URL : https://stackoverflow.com/questions/34746452/unable-to-execute-the-following-query-from-java
반응형
'programing' 카테고리의 다른 글
자바스크립트를 통해 양식을 재설정(삭제)하는 방법은 무엇입니까? (0) | 2023.08.30 |
---|---|
Android Studio 렌더링 문제 (0) | 2023.08.30 |
평균을 계산할 때 산술 오버플로를 제공하는 SQL Server (0) | 2023.08.30 |
Java와 String()의 신속한 동등성 (0) | 2023.08.30 |
'베이스에 대해 해결'하기 위해 거짓을 전달하는 것과 참을 전달하는 것의 차이점은 무엇입니까?NSURL 구성 요소 인스턴스를 초기화할 때 'URL'을 선택하시겠습니까? (0) | 2023.08.30 |