创建表如果不存在Java SQL语法错误

创建表如果不存在Java SQL语法错误,java,sql,create-table,Java,Sql,Create Table,似乎我无法找出第二个语句(stmt)的错误。第一个(pst)成功执行。第二个命令抛出一条消息,说“语法错误…在'78'附近(这是我在每个jTextField中发送的文本值)(第1行的ID INTEGER NOT NULL主键AUTO_INCREMENT,IDClean INTEGER NOT_NULL FORE”) ΗΜΡΜΝΑ、Ε∑ΕΔΑ是希腊语单词 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

似乎我无法找出第二个语句(stmt)的错误。第一个(pst)成功执行。第二个命令抛出一条消息,说“语法错误…在'78'附近(这是我在每个jTextField中发送的文本值)(第1行的ID INTEGER NOT NULL主键AUTO_INCREMENT,IDClean INTEGER NOT_NULL FORE”)

ΗΜΡΜΝΑ、Ε∑ΕΔΑ是希腊语单词

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
try {
        Connection conn = dbConnector2();
        String sql = "insert into cleaning (ADDRESS, DIMOS, TK, ONOMA, PHONENUM) VALUES (?,?,?,?,?)";

        PreparedStatement pst = conn.prepareStatement(sql);

        pst.setString(1, jTextField1.getText());
        pst.setString(2, jTextField2.getText());
        pst.setString(3, jTextField3.getText());
        pst.setString(4, jTextField4.getText());
        pst.setString(5,jTextField5.getText());

        pst.execute();

            JOptionPane.showMessageDialog(null, "Επιτυχής Αποθήκευση");

             String sqlCreate = "CREATE TABLE IF NOT EXISTS " + jTextField1.getText() 
            + "(ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,"
            + " IDClean INTEGER NOT NULL FOREIGN KEY(IDClean) REFERENCE 
 cleaning(IDClean),"
            + "  ΗΜΕΡΟΜΗΝΙΑ           DATE,"
            + "  ΕΣΟΔΑ           DOUBLE)";

        Statement stmt = conn.createStatement();
        stmt.execute(sqlCreate);

        dispose();

    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }        
} 

请参考您正在使用的DBMS。它可能有助于验证供应商特定的语法。我相信它是
mysql
。不幸的是,我无法为您提供帮助。但是,您可以尝试sql命令是否有效。例如
如果不存在创建表tmp\U表(ID INTEGER NOT NULL主键自动递增,IDClean INTEGER NOT NULL外键(IDClean)引用清理(IDClean),日期,∑Δ双精度)
。然后您可以尝试在后台线程中运行,否则GUI将无响应。我正在MySql Workbench上使用InnoDB引擎您是否尝试过只运行
create table
语句的一部分?我建议您这样做以清除任何错误行引用。另外,由于您使用的是MySql Workbench,您可以尝试直接在那里运行
create table
的硬编码变体。尝试运行此查询,看看是否有效:
create table if NOT EXISTS tmp_table(ID INTEGER NOT NULL主键自动递增,IDClean INTEGER NOT NULL,ΗΜΡΝΑDATE,∑∑∑△双外键(IDClean)引用清理(IDClean));
我刚刚通过终端在mysql中针对表
清理(IDclean INTEGER主键)运行了这个
,它工作得很好。请参考您正在使用的DBMS。它可能有助于验证供应商特定的语法。我相信它是
mysql
。不幸的是,我无法为您提供帮助。但是,如果sql命令起作用,您可以尝试。例如
如果不存在,请创建表tmp\U表(ID INTEGER NOT NULL主键自动递增,IDClean INTEGER NOT NULL外键(IDClean)引用清理(IDClean),日期,∑Δ双精度)
。然后您可以尝试在后台线程中运行,否则GUI将无响应。我正在MySql Workbench上使用InnoDB引擎您是否尝试过只运行
create table
语句的一部分?我建议您这样做以清除任何错误行引用。另外,由于您使用的是MySql Workbench,您可以尝试直接在那里运行
create table
的硬编码变体。尝试运行此查询,看看是否有效:
create table if NOT EXISTS tmp_table(ID INTEGER NOT NULL主键自动递增,IDClean INTEGER NOT NULL,ΗΜΡΝΑDATE,∑∑∑△双外键(IDClean)引用清理(IDClean));
我刚刚通过终端在mysql中针对表
清理(IDclean INTEGER主键)
运行了它,它运行得很好。