2017-02-24 114 views
1

我想创建一个名单在其中的表。这种输出:无法与SQLite创建表

“无法创建表格名”

这是工作之前,我使用NetBeans IDE中使用SQLite 3.7.2。我也试过在数据库上执行正常的语句。但它不会通过下面的Java代码工作

class DatabaseHelper{  
    public void addToDb(String tbname, List<String> name){ 
     try { 
      String url = "jdbc:sqlite:D:/names.db"; 
      Class.forName("org.sqlite.JDBC"); 
      try(Connection conn = DriverManager.getConnection(url); 
        Statement stmt = conn.createStatement();){ 
       stmt.execute("CREATE TABLE IF NOT EXISTS " + tbname + "(id integer PRIMARY KEY AUTOINCREMENT," 
         + "name text NOT NULL)"); 

       name.forEach((s) -> { 
        try{ 
         stmt.execute("INSERT INTO " + tbname + "(name) VALUES('" + s + "')"); 
        }catch(SQLException e){ 
         e.printStackTrace(); 
        } 
       }); 
       System.out.println("Finished"); 
      }catch(SQLException e){ 
       e.printStackTrace(); 
      } 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

编辑:它确实有效,只需要刷新它。没有实际的问题似乎

+0

未能创建数据库或表,错误表示database_name,并在您的代码中尝试创建表? –

+0

这是一个错字,我现在修复它 –

+0

打印所有的错误请 –

回答

0

尝试与这样的数据库名创建表除外:

String query = "CREATE TABLE IF NOT EXISTS databasename." + tbname + 
       " (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL)"; 

如果你的数据库已经包含模式然后用这样的模式名称创建你的表格:

structure to create a table sqlite

CREATE TABLE [IF NOT EXISTS] [schema_name].table_name (

这样:

String query = "CREATE TABLE IF NOT EXISTS sch_name." + tbname + 
       " (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL)"; 

您可以在这里了解更多:SQLite Create Table

哎呀,这是逻辑

此错误是逻辑它返回false所有的时间,如果你尝试st.executeUpdate(q)和你查询是成功的,它将返回0,因为CREATE TABLE不会返回任何东西,因为您始终得到否定结果,而不是像插入或更新它返回一个结果,当你执行你的语句,所以我建议你的代码改成这样:

boolean created; 
try { 
    q = "CREATE TABLE ..."; 
    Statement st = connection.createStatement(); 

    //you can use 
    System.out.println(st.executeUpdate(q)); 
    //or 
    System.out.println(st.execute(q)); 

    created = true; 
} catch (SQLException e) { 
    created = false; 
} 

//now you can check if your table is created or not 
if(created){ 
    System.out.println("Table created with sucess"); 
}else{ 
    System.out.println("Faild to create table"); 
} 

希望与你这项工作。

+0

感谢您的信息。 Java代码返回创建表的失败,并且在“表”下的服务选项卡中,我看不到该表。但是,当我刷新它,它在那里 –

+0

所以,你的解决方案的工作?或者你是什么意思@UnsolvedRubiks –

+0

它的工作,但它似乎需要通过服务选项卡 –

0
if(stmt.execute("CREATE TABLE IF NOT EXISTS " + tbname + ";"+"CREATE TABLE "+ tbname + "(id integer PRIMARY KEY AUTOINCREMENT," 
           + "name text NOT NULL)")) 

,或者你可以给升至

+0

你的代码应该实现什么功能? –

+0

stmt.execute返回布尔值 –