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

问题描述 投票:1回答:2

码:

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

java mysql sql
2个回答
2
投票

查看与您的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");

2
投票

您的值需要用反引号或双引号引用

"create table `" + myTblN +"` like `stocktradtbl`"

同样根据@kartik

此外,您可能希望添加00002仅由数字组成的原因,并且mysql仅在引用它们时才允许仅数字标识符。

© www.soinside.com 2019 - 2024. All rights reserved.