【问题标题】:how to insert into more than one mysql table in single query?如何在单个查询中插入多个 mysql 表?
【发布时间】:2012-06-08 09:13:06
【问题描述】:

我有这个查询,在我的 sql 命令行客户端中执行时可以正常执行并在两个表中获取条目,但执行它会出错。

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你的 SQL 语法有错误;检查男人 ual 对应于您的 MySQL 服务器版本,以便在 'INSERT INTO tm_belonging(B ID,BELONGING_TYPE,BELONGING_TEXT)VALUES(LAST_INSERT_ID' 在第 1 行

String sql="INSERT INTO tm_visitor(VISITOR_TEXT,COMPANY_TEXT,CONTACT,PERSON_TO_MEET,DEPARTMENT_TEXT,FLOOR)Values(?,?,?,?,?,?);"+"INSERT INTO tm_belonging(BID,BELONGING_TYPE,BELONGING_TEXT)VALUES(LAST_INSERT_ID(),?,?);";

PreparedStatement pst = conn.prepareStatement(sql);

pst.setString(1,VisitorName.toUpperCase());
pst.setString(2,Company.toUpperCase());
pst.setString(3,Contact);
pst.setString(4,WhomeToMeet.toUpperCase());
pst.setString(5,Department);
pst.setString(6,DepartmentFloor);
pst.setString(7,BType);
pst.setString(8,Belonging);
pst.executeUpdate();    
pst.close();

【问题讨论】:

    标签: mysql jdbc


    【解决方案1】:

    嗯,试试这个:

    String sql="INSERT INTO tm_visitor(VISITOR_TEXT,COMPANY_TEXT,CONTACT,PERSON_TO_MEET,DEPARTMENT_TEXT,FLOOR)Values(?,?,?,?,?,?);"+"set @lastid=LAST_INSERT_ID();"+"INSERT INTO tm_belonging(BID,BELONGING_TYPE,BELONGING_TEXT)VALUES(@lastid,?,?);";
    

    如果这不起作用,您必须使用一个准备好的语句进行查询

    【讨论】:

    • 好吧 pablo....你能在查询中解释这个语句吗..."set @lastid=LAST_INSERT_ID();"
    • 该语句用于在mysql中设置一个变量。我认为最好在插入之前计算所有值,而不是在插入时计算(在这种情况下有效 xD)
    【解决方案2】:

    我不认为你可以。您必须为两个插入查询使用两个准备好的语句。通常,如果我必须在一个事务中处理多个表并使用可调用语句,我会创建存储过程。

    【讨论】:

    • 感谢 Sandeep 成功了。但是您认为这是使用两个准备好的语句插入多个表的最佳方法吗?
    • @yatin:接受最有帮助的答案是一种好习惯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2014-01-26
    • 2015-02-24
    • 1970-01-01
    相关资源
    最近更新 更多