无法从Java执行以下查询

时间:2016-01-12 14:35:28

标签: java mysql sql database-connection mariadb

我正在尝试从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();
    }

其中Queries.queryInsertChildNode =表示上述查询。

它给出错误:

  

您的SQL语法有错误;

     

查看与您的MariaDB服务器版本对应的手册   正确的语法使用近< UPDATE item_tree SET rgt = rgt + 2 WHERE   rgt> = @myRight; UPDATE item_tree SET l'。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我使用存储过程解决了这个问题。我创建了一个类似于下面代码的存储过程:

afxdisp.h

我用java用以下代码调用了这个存储过程:

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