繁体   English   中英

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

[英]What's wrong with my JDBC sql statement

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

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

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')";

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

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

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

在线:

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

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

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

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

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

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

您可以改用单引号。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM