通过Java在SQL中创建变量表名称?
问题描述:
我想通过Java创建一个变量表名。通过Java在SQL中创建变量表名称?
我的代码是:
public void createTable(String tableName){
try {
Statement stmt = con.createStatement();
stmt.executeUpdate("CREATE TABLE '"+tableName+"'" +
"(id INTEGER not NULL, " +
" username VARCHAR(255), " +
" pass VARCHAR(255), " +
" age INTEGER, " +
" PRIMARY KEY (id))");
}
catch (SQLException e){
e.printStackTrace();
}
}
它给了我一个语法错误,他说:
附近有语法错误VariableTableNameIChose“。
有没有人有任何想法?
答
它可能是两件事之一或两者的组合。
也许表名周围的单引号在数据库中无效。所以这样做:
stmt.executeUpdate("CREATE TABLE "+tableName+" " +
"(id INTEGER not NULL, " +
" username VARCHAR(255), " +
" pass VARCHAR(255), " +
" age INTEGER, " +
" PRIMARY KEY (id))");
或者,也许你需要的表名和(
之间的空间后,以下:
Statement stmt = con.createStatement();
// v this one was missing
stmt.executeUpdate("CREATE TABLE '"+tableName+"' " +
"(id INTEGER not NULL, " +
" username VARCHAR(255), " +
" pass VARCHAR(255), " +
" age INTEGER, " +
" PRIMARY KEY (id))");
+1
非常感谢!这工作! (第一种解决方案) – Jbv2 2014-12-07 14:38:59
答
表名是一个标识符。标识符不使用单引号(在标准SQL中)。
"CREATE TABLE '"+tableName+"' "
会导致
CREATE TABLE 'foobar'
这是无效的SQL。您需要删除单引号:
"CREATE TABLE "+tableName+" " + ...
表名显然是用户输入,你可能真的要使用带引号的标识符(虽然这是一般一个坏主意)。标识符使用双引号在SQL标准中引用:
"CREATE TABLE \""+tableName+"\" " + ...
+0
非常感谢!这也工作 – Jbv2 2014-12-07 14:40:08
'表名+ “'”“ - 空间在这里失踪。 – Maroun 2014-12-07 13:27:36