如何使用Java中的变量值作为mysql的表名?

时间:2019-02-28 01:56:50

标签: java mysql sql

代码:

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的表名?

2 个答案:

答案 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");