我正在编写一个允许客户端与服务器通信的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")";
答案 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')”;