我的JDBC sql语句出了什么问题

时间:2012-05-08 14:38:40

标签: java mysql sockets jdbc client-server

我正在编写一个允许客户端与服务器通信的Java套接字应用程序,其他要求之一是它还需要初始化JDBC。我相信我已经正确地编写了我的JDBC连接方法,并且我的insert语句在类似的项目中也是如此。这可能是一个简单的错误,因为我没有使用IDE,有人能告诉我我的SQL语句有什么问题吗?所有信息都是正确的,但不会编译。

错误:

C:\Users\imallin\My Documents> javac provider.java
Provider.java:88 ';' expected 
String sql = "Insert INTO 'users' ('ID', 'firstName') VALUES ("123","123")";

5 个答案:

答案 0 :(得分:5)

您当前的问题是您需要转义字符串中的双引号。这是因为当编译器看到另一个"时,它认为它是String定义的结尾并且会出现一个分号。

String sql = "Insert INTO 'users' ('ID', 'firstName') VALUES (\"123\",\"123\")";

现在Java编译器很高兴,您将遇到与SQL相关的问题。

通常使用SQL,您需要使用单引号来表示字符串。看来MySQL特别允许双引号,但仅限于SQL QUOTES ANSI mode is not set。因此,最好使用单引号来表示字符串。

这是你可能想要的,假设ID列是一个整数,firstName列是一个字符串/ varchar。

String sql = "Insert INTO users (ID, firstName) VALUES (123,'123')";

答案 1 :(得分:2)

与已发布的其他答案略有不同,您需要在SQL中不使用双引号。您使用的单引号都在错误的位置,并且根本不允许双引号。你的陈述应该是

String sql = "Insert INTO users (ID, firstName) VALUES ('123','123')";

答案 2 :(得分:1)

看起来你没有在SQL语句中转义双引号。 Java将您的字符串视为在第一个123之前完成。

答案 3 :(得分:1)

在行中:

String sql = "Insert INTO 'users' ('ID', 'firstName') VALUES ("123","123")";

双引号字符串在VALUES (之后结束,紧接着是数字标记。这在Java中是非法的。立即修复是添加反斜杠:

String sql = "Insert INTO 'users' ('ID', 'firstName') VALUES (\"123\",\"123\")";

虽然这也可行(假设它是在谈论整数,而不是字符串):

String sql = "Insert INTO 'users' ('ID', 'firstName') VALUES (" + 123 + "," + 123 + ")";

更一般地说,它的错误在于你在不使用参数化的情况下进行INSERT。在实际代码中,这几乎总是错误的! JDBC对参数化查询有很好的支持,你应该使用它。

答案 4 :(得分:0)

您可以改用单引号。

  

“插入INTO用户(ID,firstName)VALUES('123','123')”;