2014-10-30 4 views
1

Я пытаюсь перенести данные из одной базы данных в другую с помощью Java. Все другие типы данных успешно переносятся, за исключением типа Blob.Как определить столбец Blob во время миграции базы данных

Вот как я проверяю типы данных и их переношу.

private String getValue(String value, String type, int i){ 
     StringBuilder columnValue = new StringBuilder(""); 
     if(type.equals("java.lang.String") || type.equals("java.sql.Timestamp") || type.equals("java.lang.Blob")){ 
      if(i== (columnNames.size()-1)) 
       columnValue.append("'"+value+"'"); 

Примечание: в type я получаю Blob, как [B, я отдаю себе отчет в том, что Blob становится передается как Bytes Array, так что я попытался сделать проверить его как массив, так, как этот

type.getBytes().equals("byte[]") 

Я не могу узнать, где я делаю неправильно.

+0

Я думаю, что вам нужно 'java.sql.Blob' все равно – Lucas

+0

@Lucas: возвращающие Многие JDBC драйвера' байт [] ', когда вы используете' rs.getObject() '. –

ответ

3

Правильное решение зависит от того, как вы создаете значение для type. Если вы используете rs.getObject(col).getClass().getName(), то это сравнение будет работать:

type.equals("[B") 

Вы получите тот же результат для byte[].class.getName(). Чтобы защитить вас от опечаток, я предлагаю вам передать тип как Class<?>. Это позволяет проверить тип с помощью isAssignableFrom():

if(type.isAssignableFrom(String.class) 
    || type.isAssignableFrom(java.sql.Timestamp.class) 
    || type.isAssignableFrom(byte[].class) 
) { 
+0

Да, вы правы. проверка 'type.equals (" [B ")' сделала трюк. – Sajjad

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