有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用过程将值插入数据库

我已经创建了一个名为SET的过程,我正试图通过类似这样的java向它发送值

stmt.executeQuery("call set("+id+",'"+name+"','"+sal+"','"+dept+"')");

作为名称,sal和dept采用字符串格式

但是我犯了一个错误

check the manual that corresponds to your MySQL server version for the right syntax to use near 'set(12,'D','12','cse')' at line 1


共 (2) 个答案

  1. # 1 楼答案

    “set”是reserve word in Mysql,所以可能是你的问题。一般建议是避免使用保留词,并有意义地命名您的过程(例如setAccountRecrod)

    当我成功地用这个名称创建过程时,我必须用转义的名称(带反勾号)调用它:

    stmt.executeQuery("call `set`("+id+",'"+name+"','"+sal+"','"+dept+"')");
    

    但正如建议的那样,最好像这样使用prepareCall

    callableStatement = dbConnection.prepareCall("call `set`(" + id + ",'" + 
         name + "','" + sal + "','" + dept + "')");
    callableStatement.executeUpdate();
    

    或者更好:

    callableStatement = dbConnection.prepareCall("call `set`(?,?,?,?)");
    callableStatement.setInt(1, id);
    callableStatement.setString(2, name);
    callableStatement.setString(3, sal);
    callableStatement.setString(4, dept);
    callableStatement.executeUpdate();
    

    当我创建了这样的过程时,以上所有内容在最新版本的MariaDb上都起到了作用:

    DELIMITER $$
    
    DROP PROCEDURE IF EXISTS `set`;
    
    CREATE PROCEDURE `set` (IN id INT, name VARCHAR(25), sal VARCHAR(25), dept VARCHAR(25)) 
    BEGIN
    SELECT VERSION();
    END $$
    
    DELIMITER ;
    
  2. # 2 楼答案

    可以通过CallableStatement调用存储过程,如图here

    祝你好运