【问题标题】:Creating a dynamic table in SQL Server with Java Spring使用 Java Spring 在 SQL Server 中创建动态表
【发布时间】:2020-08-14 19:30:46
【问题描述】:

我是 Java 新手。现在我正在尝试从 java 在 SQL Server 数据库中创建一个动态 SQL 表。我有一个字符串中的表名称,一个 ArrayList 中的列名,并为我想要的所有列放置相同的类型和长度。我的代码看起来像这样,但是当我运行它时,我得到了这个错误,我不知道为什么,因为“查询”变量正在打印一个“正确”的查询。我测试它编写一个静态 tableName 和 tColumnNames 并且工作正常......如果有人可以帮助我解决它,我真的会很感激。谢谢

private void createNewTable( String tableName, List<String> newTableColumns) throws SQLException {
    
    //ArrayList to string separated by comma
    
    String tColumNames = String.join(",",newTableColumns );
    
    Connection connection = dataSource.getConnection();
    Statement stmt = connection.createStatement();
    String query = "CREATE TABLE "+tableName+"( "+tColumNames+" );";
    System.out.println("Consulta"+query);
    stmt.executeUpdate(query);
    stmt.close();
}

“查询”正在打印:

CREATE TABLE 课程(主题 ID VARCHAR(200),日期* VARCHAR(200),生效日期* VARCHAR(200) );

这就是错误

com.microsoft.sqlserver.jdbc.SQLServerException:附近的语法不正确 'VARCHAR'。在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:217) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1655) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:885) 在 com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:778) 在 com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7505) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2445)

【问题讨论】:

    标签: java sql-server


    【解决方案1】:

    您的 Java 看起来不错,但您的 SQL 中存在语法错误。您是否可以控制生成newTableColumns 值的代码?那就是你的问题所在。你的陈述应该更像这样:

    CREATE TABLE Courses([Subject ID] VARCHAR(200), [Date*] VARCHAR(200), [Effective Date*] VARCHAR(200) );
    

    如果您有空格或其他 T-SQL 保留字符或关键字,则需要将它们括在 [] 中。

    如果您无法控制 newTableColumns 的值,那么您需要在生成 SQL 语句之前或期间解析该字符串以相应地对其进行格式化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多