2016-05-14 70 views
3

我想創建表並向其中插入一些值。我試圖做到這一點使用H2數據庫和sql2o框架下面的代碼:插入sql2o時出錯

public class Main { 

    private static final String DB_DRIVER = "org.h2.Driver"; 
    private static final String DB_CONNECTION = "jdbc:h2:~/test"; 
    private static final String DB_USER = ""; 
    private static final String DB_PASSWORD = ""; 
    static String TABLE = "PERSONS"; 
    static Sql2o sql2o; 

    public static void main(String[] args) throws Exception, SQLException { 
     sql2o = new Sql2o(DB_CONNECTION, DB_USER, DB_PASSWORD); 
     createTable(); 
     insertIntoTable(); 
    } 

    public static void createTable() { 
     final String tableSql = "CREATE TABLE IF NOT EXISTS " + TABLE + " (id int, name varchar(255))"; 
     try (org.sql2o.Connection con = sql2o.beginTransaction()) { 
      con.createQuery(tableSql).executeUpdate(); 
      con.commit(); 
      con.close(); 
     } 
    } 

    public static void insertIntoTable() { 
     String insertSql = "insert into " + TABLE + " values (:id, :name)"; 
     try (org.sql2o.Connection con = sql2o.open()) { 
      con.createQuery(insertSql).addParameter("id", 1).addParameter("name", "test").executeUpdate(); 
      con.close(); 
     } 
    } 
} 

而且畢竟我得到一個錯誤:

Error preparing statement - Column count does not match; SQL statement: insert into PERSONS values (?, ?) [21002-191]

的SQL語句是正確的,名稱和類型的列匹配對方,我真的不明白是什麼問題。

+0

我無法重現您的問題。我使用H2和sql2o的最新生產版本將代碼複製並粘貼到Maven項目中,並且它工作正常。嘗試刪除您的H2數據庫文件或在代碼的開頭髮布「DROP TABLE PERSONS」。 –

+0

哦,我真的忘了放桌子了!謝謝,現在它工作! – Amir

回答

2

存在一個與CREATE TABLE IF NOT EXISTS語句中的結構不匹配的現有PERSONS表。刪除並重新創建表格解決了問題。