如何从JDBC调用getter?

时间:2014-06-19 18:05:27

标签: java jdbc

我正在执行更新,我想将从getter返回的值插入到我的表中。

statement.executeUpdate("INSERT INTO my_table " +
          "VALUES(myClass.getValue(), 'abcd',now())");

我尝试过调试,发现String值和datetime正确执行。然而,当我打电话给我的吸气器时,它给了我一个例外。它显示的详细信息是FUNCTION myClass.getValue不存在。

我的进口是有序的。有什么想法吗?

4 个答案:

答案 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字符串。