代码:
String myTblN = fileN[0];
PreparedStatement creatTableStmt =
conn.prepareStatement("create table " + myTblN +" like stocktradtbl");
System.out.println(creatTableStmt);
creatTableStmt.execute();
错误:
com.mysql.cj.jdbc.ClientPreparedStatement:创建表00002 stocktradtbl java.sql.SQLSyntaxErrorException:您在 您的SQL语法;查看与您的MySQL相对应的手册 正确语法的服务器版本,以在00002附近使用,例如 第1行上的stocktradtbl'
如何在Java中将变量myTblN
的值用作mysql的表名?
答案 0 :(得分:2)
您的值需要用反引号或双引号引起来
"create table `" + myTblN +"` like `stocktradtbl`"
也按照@kartik
此外,您可能还想添加原因,原因是00002仅由数字组成,而mysql仅允许使用仅数字标识符加引号。
答案 1 :(得分:2)
检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的 00002(例如stocktradtbl ”)附近使用
您似乎正在尝试创建一个名称仅包含数字的表。如the documentation中所述,MySQL默认情况下不允许在表名的开头处输入数字。
一种快速的解决方案是在表名的开头添加固定的字母字符:
PreparedStatement creatTableStmt =
conn.prepareStatement("create table t" + myTblN +" like stocktradtbl");
或者您需要用引号引起来(但随后准备在每个后续查询中用引号括起来的表名,这可能很痛苦):
PreparedStatement creatTableStmt =
conn.prepareStatement("create table `" + myTblN +"` like stocktradtbl");