码:
String myTblN = fileN[0];
PreparedStatement creatTableStmt =
conn.prepareStatement("create table " + myTblN +" like stocktradtbl");
System.out.println(creatTableStmt);
creatTableStmt.execute();
错误:
com.mysql.cj.jdbc.ClientPreparedStatement:create table 00002 like stocktradtbl java.sql.SQLSyntaxErrorException:你的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在00002附近使用正确的语法,如第1行的stocktradtbl'
如何在java中使用变量myTblN
的值作为mysql的表名?
查看与您的MySQL服务器版本对应的手册,以便在00002附近使用正确的语法,如第1行的stocktradtbl'
看起来您正在尝试创建一个名称仅包含数字的表。如the documentation中所述,默认情况下,MySQL不允许在表名开头的数字。
一个快速的解决方案是在表名的开头添加一个固定的字母字符:
PreparedStatement creatTableStmt =
conn.prepareStatement("create table t" + myTblN +" like stocktradtbl");
或者你需要引用标识符(但随后准备在每个后续查询中引用表名,这可能很痛苦):
PreparedStatement creatTableStmt =
conn.prepareStatement("create table `" + myTblN +"` like stocktradtbl");
您的值需要用反引号或双引号引用
"create table `" + myTblN +"` like `stocktradtbl`"
同样根据@kartik
此外,您可能希望添加00002仅由数字组成的原因,并且mysql仅在引用它们时才允许仅数字标识符。