2015-01-13 2 views
0

Здравствуйте, я пытаюсь запустить мою программу, но я получаю действительно странный вывод. Эта программа работает, когда ее единственный массив, но когда я делаю его многомерным, он ошибается. пожалуйста, помогитеmessageFormt() Ошибка с многомерным массивом

public static void main(String[] args) throws IOException { 

      MessageFormat messageFormat = new MessageFormat("insert into {0} values (''{1}'', ''{2}'', ''{3}'', ''{4}'')"); 
      Object[][] data = { {"000", "111", "222","333","444","555"}, 
           {"000", "123", "234","345","456","567"} }; 

      System.out.println(messageFormat.format(data)); 
} 

мой выход:

run: 
insert into [Ljava.lang.Object;@2a134eca values ('[Ljava.lang.Object;@52934c3b', '{2}', '{3}', {4}) 
BUILD SUCCESSFUL (total time: 0 seconds) 

ответ

1

MessageFormat с предоставленным форматом идеально подходит для печати 1-мерного массива. Тем не менее он не может печатать 2-мерный массив из коробки.

Вы должны итерацию над 2-D массив data:

for(Object[] array : data) { 
    System.out.println(messageFormat.format(array)); 
} 
0

Когда вы проходите data, вы передаете в массив объектов (которые также случаются быть массивы объектов). Таким образом, первый из них является data[0] и второй один , оба из которых, как представляется, Object[] размера 6.

Чтобы это исправить:

messageFormat.format(data[0]); 

Слово предостережения, кажется, что вы можете быть используя это для инструкции вставки SQL. Я настоятельно рекомендую вам использовать PreparedStatement, так как этот метод подвержен ошибкам и приводит к атакам SQL-инъекций, если вы не очень осторожны!

+0

-Todd поблагодарить вас за вашу помощь, я буду смотреть в PreparedStatement – dc4teg

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