programing

Java에서 다음 쿼리를 실행할 수 없습니다.

telebox 2023. 8. 30. 21:34
반응형

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

반응형