2017-01-13 18 views
1

Я хочу, чтобы вставить набор массивов в базу данных (HANA) в коде loop.My ниже:Как вставить массив в цикле к базе данных

public class jdemo { 
    public static void main(String[] args) { 
     Connection connection = null; 
     try {     
     connection = DriverManager.getConnection(
      "jdbc:sap://myhdb:30715/?autocommit=false",myname,mysecret);     
     } catch (SQLException e) { 
     System.err.println("Connection Failed. User/Passwd Error?"); 
     return; 
     } 
     if (connection != null) { 
     try { 
      int [] array=new int []{1,2,3}; 
      Array array1= connection.createArrayof("Integer",array) 
      System.out.println("Connection to HANA successful!"); 
      String sql="INSERT INTO TABLE1 VALUES(1,ARRAY(?))" 
      PreparedStatement stmt = connection.createStatement(sql); 
      stmt.setArray(int,array1); 
      stmt.executeUpdate(sql); 

     } catch (SQLException e) { 
      System.err.println("Query failed!"); 
     } 
    } 
    } 
} 

Но это не работает. Я попытался с

Object [] array=new Object []{1,2,3}; 

Возвращаемый метод создания массива подключения не поддерживается.

Моя таблица схема выглядит

ID MARK 
__ ____ 
10 {1,2,3} 
11 {3,2,3} 
12 {9,2,3} 
13 {10,2,3} 
14 {12,24,3} 
18 {1,27,3} 

Я также хочу, чтобы мой тип данных как целое array.Any помощь приветствуется.

+0

Как выглядит ваша схема ТАБЛИЦА1? – alexbt

+0

есть ли какой-нибудь вывод на консоль? например, какие-либо исключения или успешные сообщения соединения? –

+0

Вы не можете использовать для этого отношение от одного до многих? – Shinigami

ответ

1

Тема «ARRAY inserts in HANA» обсуждалась пару раз здесь, на SO уже. HANA поддерживает только сохранение массивов с помощью функции ARRAY(). Эта функция не принимает список в качестве параметра, а только отдельные элементы.

Таким образом, вместо

String sql="INSERT INTO TABLE1 VALUES(1,ARRAY(?))" 

вы должны написать

String sql="INSERT INTO TABLE1 VALUES(1, ARRAY(1, 2, 3))" 

Для драйвера JDBC: HANA JDBC не автоматически обрабатывать JAVA массивы HANA массивов - это то, что разработчик будет придется делать вручную. (да, это не приятно, я знаю).

Вкратце: в настоящее время массивы (HANA 1.0 SP12) можно в основном использовать внутри (в рамках хранимой процедуры), но они не являются типами данных первоклассного гражданства. (< - это мое мнение!)

1

Только идея:
Вместо хранения массива в столбце вы можете сохранить строку, разделенную двоеточиями. Когда вы запрашиваете данные из своей базы данных, вы можете использовать split(","), и у вас автоматически будет свой массив (после Integer.parseInt(String))

+0

Но я хочу хранить данные в формате массива, потому что данные используются не только программой. Существует несколько других программ (а не Java), которые также используют данные, которые я вставляю.Поэтому я не могу изменить тип данных. – RKR

+0

@RKR вы должны написать это в свой qustion, что вы вынуждены использовать эту схему – Shinigami

1

Вы используете createStatement вместо prepareStatement. createStatement делает параметры поддержки орехов!

Проверить https://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html

И https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

подробности Надеюсь, что это помогает

Было бы хорошо, если вы предоставляете DDL, сообщения об ошибках и т.д. в следующий раз, то его легче анализировать.