2016-05-14 9 views
3

テーブルを作成して値を挿入します。私はエラーを取得する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(); 
     } 
    } 
} 

そして、すべての後に:私は以下のコードでH2データベースとsql2oフレームワークを使用して、それをやろうとしている

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

SQL文が正しいか、名前と型お互いの列が一致していて、私は本当にその問題を理解できません。

+0

問題を再現できません。最新のH2およびsql2のプロダクションリリースを使用してコードをコピーしてMavenプロジェクトに貼り付け、うまくいきました。 H2データベースファイルを削除するか、コードの先頭に 'DROP TABLE PERSONS'を出してみてください。 –

+0

ああ、私は本当にテーブルを落とすのを忘れてしまった!ありがとう、今それは動作します! – Amir

答えて

2

CREATE TABLE IF NOT EXISTSステートメントの構造と一致しない既存のPERSONSテーブルがありました。テーブルを破棄して再作成することで問題は解決しました。

関連する問題