2016-07-30 2 views
2

Я прочитал H2 документы о хранении объектов в базе данных. Существует специальный тип SQL OTHER и методы setObject и getObject. Я попробовал этот код:Как вставить объект в h2

PreparedStatement statement = null; 
try { 
    statement = connection.prepareStatement("CREATE TABLE PUBLIC.foo (name VARCHAR(64) NOT NULL, data OTHER NULL);"); 
    statement.execute(); 
} finally { 
    statement.close(); 
} 

statement = null; 

try { 
    statement = connection.prepareStatement("INSERT INTO PUBLIC.foo (name, data) VALUES(?,?);"); 
    statement.setString(1, "lololo"); 
    statement.setObject(2, new String[]{"foo", "bar"}); 
    statement.execute(); 
}finally { 
    statement.close(); 
} 

Но у меня есть исключение:

org.h2.jdbc.JdbcSQLException: ШÐμÑÑ,нР° Ð'Ñ † Ð ° Ñ,Ð¸Ñ € Ð¸Ñ ‡ нР° Ñ Ñ Ñ,Ñ € окР° Ñ Ð¾Ð'ÐμÑ € жиÑ, нÐμÑÐμÑ Ñ,нР° Ð'Ñ † Ð ° Ñ,и Ñ ​​€ Ð¸Ñ ‡ Ð½Ñ <Ðμ Ñ Ð¸Ð¼Ð²Ð¾Ð »Ñ <:" (foo, bar) " Шестнадцатеричная строка содержит шестнадцатеричный символ:" (foo, bar) "; SQL заявление: (?,) INSERT INTO PUBLIC.foo (имя, данные) ЦЕННОСТИ - (? 1, 2) [90004-191]

Что не так?

+1

здесь смотрите: http://stackoverflow.com/questions/31964209/h2-other-data-type-throws-exception-when-storing -string-or-boolean – Seelenvirtuose

+0

Большое спасибо. –

ответ

0

Попробуйте этот подход

List<String> genre = new ArrayList<String>(); 
String comma=""; 
StringBuilder allGenres = new StringBuilder(); 
for (String g: genre) { 
    allGenres.append(comma); 
    allGenres.append(g); 
    comma = ", "; 
} 

Затем вы можете передать его как этот

preparedStmt.setString (2, allGenres.toString()); 
+0

Итак, как я могу вставить любой тип в одно поле? String, Int, Список объектов и т. Д.? Мне нужно вставить любой объект в db. –

+0

Вы можете использовать сериализацию. Посмотрите страницу thiis, у них есть хороший пример. [Java2] (http://www.java2s.com/Code/Java/Database-SQL-JDBC/HowtoserializedeserializeaJavaobjecttotheMySQLdatabase.htm) –

1

Я считаю, что это то, что вы были искать (Даже я был).

Вам просто нужно создать столбец в таблице с типом как 'other'. См 'создать таблицу testobj2 (OBJ другие)'

Посмотрите на мой пример кода:

static String DB_DRIVER = "org.h2.Driver"; 
    static String DB_CONNECTION = "jdbc:h2:./test2"; 
    static String DB_USER = ""; 
    static String DB_PASSWORD = ""; 

    public static void benchmarkH2Inserts() { 
     try { 
      Class.forName(DB_DRIVER); 
      Connection dbConnection = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD); 
      String createQry = "create table testobj2(obj other)"; 
      String insertQuery = "insert into testobj2(obj) values(?)"; 
      String selectQuery = "select * from testobj2"; 

//   dbConnection.setAutoCommit(false); 
      dbConnection.prepareStatement(createQry).executeUpdate(); 
      long lStartTime = System.nanoTime(); 

      for(int i=0; i<10000; i++) { 
       dbConnection.setAutoCommit(false); 
       CloudElement_Circuit obj = new CloudElement_Circuit(); 
       obj.setNrm8DesignId(1230L); 

       PreparedStatement preparedStatement = dbConnection.prepareStatement(insertQuery); 
       preparedStatement.setObject(1,obj); 
       preparedStatement.execute(); 
       dbConnection.commit(); 
      } 
      long lEndTime = System.nanoTime(); 
      long output = lEndTime - lStartTime; 
      System.out.println("benchmarkH2Inserts() : Elapsed time in nanoseconds: " + output); 
      System.out.println("benchmarkH2Inserts() : Elapsed time in milliseconds: " + output/1000000); 

      //Selecting 
      PreparedStatement preparedStatement = dbConnection.prepareStatement(selectQuery); 
      ResultSet rs = preparedStatement.executeQuery(); 
      while(rs.next()) { 
       CloudElement_Circuit obj = (CloudElement_Circuit) rs.getObject("obj"); 
       System.out.println("Fetched Object : " + obj.getNrm8DesignId()); 
      } 

      dbConnection.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Обратите внимание, что 'CloudElement_Circuit' является Serialized класс. Посмотрите на 'Другой Тип' здесь: http://www.h2database.com/html/datatypes.html H2 Пример: https://www.javatips.net/blog/h2-database-example

 Смежные вопросы

  • Нет связанных вопросов^_^