我正在执行更新,我想将从getter返回的值插入到我的表中。
statement.executeUpdate("INSERT INTO my_table " +
"VALUES(myClass.getValue(), 'abcd',now())");
我尝试过调试,发现String值和datetime正确执行。然而,当我打电话给我的吸气器时,它给了我一个例外。它显示的详细信息是FUNCTION myClass.getValue不存在。
我的进口是有序的。有什么想法吗?
答案 0 :(得分:3)
statement.executeUpdate("INSERT INTO my_table " + "VALUES("+myClass.getValue() + ", 'abcd',now())");
由于缺少“”,您的get-call被解释为String。 看看prepared statements,它们易于阅读和使用,您不必为这些问题而烦恼。
准备好的声明版本(也更安全,因为它们是preventing SQL Injection):
PreparedStatement pst = yourconnection.prepareStatement("INSERT INTO my_table VALUES(?,?,now())";
pst.setString(1,myClass.getValue());
pst.setString(2,"abcd");
pst.executeUpdate();
答案 1 :(得分:1)
这是您尝试执行的SQL。
INSERT INTO my_table VALUES(myClass.getValue(), 'abcd',now())
您需要将有效的SQL传递给executeUpdate
方法才能运行它。 Java不会为你在字符串中插入变量和方法调用。您必须将它们的值连接到传递给executeUpdate
的SQL字符串中,或者使用Prepared Statements代替。
答案 2 :(得分:0)
您需要对myClass
对象进行方法调用,而不是字符串。字符串不会被执行,它不是代码,只是单词。
statement.executeUpdate("INSERT INTO my_table VALUES(" + myClass.getValue() + ", 'abcd',now())");
答案 3 :(得分:0)
我将告诉你如何用准备好的陈述来做这件事,因为其他答案没有告诉你:
PreparedStatement prepStmt = con.prepareStatement("INSERT INTO my_table VALUES( ? , 'abcd',now())"));
prepStmt.setString(1, myClass.getValue());
prepStmt.executeUpdate();
注意?
。它将被您对myClass.getValue()
的Java调用所取代。
请不要连接SQL字符串。