Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';我的JDBCSQL语句有什么问题_Java_Mysql_Sockets_Jdbc_Client Server - Fatal编程技术网

Java 什么';我的JDBCSQL语句有什么问题

Java 什么';我的JDBCSQL语句有什么问题,java,mysql,sockets,jdbc,client-server,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

我正在编写一个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似乎特别允许使用双引号,但只有在出现错误时才允许使用双引号。因此,这里最好使用单引号来表示字符串

假设
ID
列是一个整数,
firstName
列是一个string/varchar,您可能需要这样做

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

看起来您的SQL语句中没有逃过双引号。Java认为您的字符串在第一个123之前就结束了。

若要与已发布的其他答案略有不同,您不需要在SQL中使用双引号。您使用的单引号都在错误的位置,而双引号根本就不存在允许。您的声明应该是

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

String sql = "Insert INTO 'users' ('ID', 'firstName') VALUES ("123","123")";
双引号字符串在
值(
)之后结束,后面紧跟一个数字标记。这在Java中是非法的。立即解决的办法是添加反斜杠:

String sql = "Insert INTO 'users' ('ID', 'firstName') VALUES (\"123\",\"123\")";
尽管这也会起作用(假设它讨论的是整数,而不是字符串):


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

您可以使用单引号代替

“在用户(ID,firstName)中插入值('123','123')”


我删除了大代码块,因为它根本不相关。在哪一点上?我已经有了一个;在语句的末尾谢谢,你知道我为什么会出错吗:com.mysql.jdbc.driver?我的类路径中有jdbc jar不,双引号一开始是不合法的。不过这取决于你的RDBMS。引号问题是为什么提问者得到了一个编译错误。是的,这就是为什么它没有编译,但将其修复为一个失败的查询没有多大帮助。双引号是完全错误的。你的第二个版本更好,但所有其他单引号都需要出来。是的,引号不应该用于整数,但它看起来至少像
firstName
column不是整数列,因此数据可能只是用于说明目的。谢谢,您知道我为什么会出现错误吗:com.mysql.jdbc.driver?我的表中有jdbc jarclasspath@ErnestFriedman-希尔,我明白。我正在努力找出我的答案来解决眼前的问题。@user1080390,也许最好问问ano还有一个问题是关于不同错误的更多细节。也就是说,如果搜索没有结果。
String sql = "Insert INTO 'users' ('ID', 'firstName') VALUES (" + 123 + "," + 123 + ")";