java.sql.SQLSyntaxErrorException:语法错误:遇到;TABLEBOOK";在第1行第8列

java.sql.SQLSyntaxErrorException:语法错误:遇到;TABLEBOOK";在第1行第8列,java,derby,Java,Derby,根据YouTube的教程,我正在开发一个库管理系统,但是当我尝试在derby数据库中创建表时,它会生成语法错误 java.sql.SQLSyntaxErrorException: Syntax error: Encountered "TABLEBOOK" at line 1, column 8. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.ap

根据YouTube的教程,我正在开发一个库管理系统,但是当我尝试在derby数据库中创建表时,它会生成语法错误

java.sql.SQLSyntaxErrorException: Syntax error: Encountered "TABLEBOOK" at line 1, column 8.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
at library.assistant.database.DatabaseHandler.setupBookTable(DatabaseHandler.java:48)
at library.assistant.database.DatabaseHandler.<init>(DatabaseHandler.java:24)
at library.assistant.ui.addbook.FXMLDocumentController.initialize(FXMLDocumentController.java:48)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at library.assistant.ui.addbook.LibraryAssistant.start(LibraryAssistant.java:22)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:748)
Caused by: ERROR 42X01: Syntax error: Encountered "TABLEBOOK" at line 1, column 8.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.impl.sql.compile.ParserImpl.parseStatementOrSearchCondition(Unknown Source)
at org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
... 23 more

我从YouTube教程中获得了这个文件,但它似乎对我不起作用。

在创建表
“创建表”+“书”
=>“创建表”之后,字符串压缩中有一个空白。您缺少一个空间…这与fx无关-首先修复db问题,然后与ui代码集成。当被困在任何地方时,请带着一个演示器回来,演示什么不符合预期欢迎来到SO!当你发布答案时,试着解释一下。答案欢迎:)准确一点:问题中的问题是一个构造错误的字符串(将硬编码部分与变量部分连接起来)-你通过硬编码全部来完全避免这个问题。。
void createConnection(){
    try{
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        conn=DriverManager.getConnection(BD_URL);
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

void setupEmployeeTable(){
    String TABLE_NAME = "EMPLOYEE";
    
    try{
        
        stmt = conn.createStatement();
        
        DatabaseMetaData dbm = conn.getMetaData();
        ResultSet tables = dbm.getTables(null, null, TABLE_NAME.toUpperCase(), null);
        if (tables.next()){
            System.out.print("Table" + TABLE_NAME +" READY");
            
        }
        else{
            stmt.execute("CREATE TABLE Employee("
                    + "ID INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY"
                    +"(START WITH 1,INCREMENT BY 1),"
                    + "name varchar(200),"
                    + "phone varchar(200),"
                    + "time timestamp default CURRENT_TIMESTAMP)");
                   
        }
    }catch(SQLException e){
        System.err.println(e.getMessage()+"....setupdatabase ");
    }finally
            {
            }      
}