2016-05-14 2 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

Я не могу воспроизвести вашу проблему. Я скопировал и вставил ваш код в проект Maven, используя последние версии выпусков H2 и sql2o, и он отлично работал. Попробуйте удалить файл базы данных H2 или выпустить 'DROP TABLE PERSONS' в начале вашего кода. –

+0

О, я действительно забыл бросить стол! Спасибо, теперь это работает! – Amir

ответ

2

Существующая таблица PERSONS, которая не соответствует структуре в инструкции CREATE TABLE IF NOT EXISTS. Снижение и повторное создание таблицы решило проблему.