2

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

错误:

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

5 回答 5

5

您的直接问题是您需要转义字符串中的双引号。这是因为当编译器看到另一个时",它认为它是字符串定义的结尾并执行分号。

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

既然 Java 编译器很高兴,那么您将遇到与 SQL 相关的问题。

通常使用 SQL,您会希望使用单引号来表示字符串。似乎 MySQL 专门允许双引号,但仅当SQL QUOTES ANSI 模式未设置时。所以这里最好用单引号来表示字符串。

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

String sql = "Insert INTO users (ID, firstName) VALUES (123,'123')";
于 2012-05-08T14:40:54.163 回答
2

为了与已发布的其他答案略有不同,您不需要在 SQL 中使用双引号。你用过的单引号都放错地方了,双引号根本就不行。你的陈述应该看起来像

String sql = "Insert INTO users (ID, firstName) VALUES ('123','123')";
于 2012-05-08T14:41:57.253 回答
1

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

于 2012-05-08T14:40:54.903 回答
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 对参数化查询有很好的支持,您应该使用它。

于 2012-05-08T14:49:09.980 回答
0

您可以改用单引号。

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

于 2012-05-09T05:53:58.020 回答