Как вставить массив в цикле в базу данных
Я хочу вставить набор массивов в базу данных (HANA) в цикле. Мой код приведен ниже:
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};
Этот возвращенный метод создания массива Connection не поддерживается.
Моя схема таблицы выглядит так
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}
Я также хочу, чтобы мой тип данных в виде целочисленного массива. Любая помощь приветствуется.
3 ответа
Тема "вставки в массив 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) массивы в основном могут использоваться для внутренних целей (в рамках хранимой процедуры), но они не являются типами данных первого класса. (<- это мое мнение!)
Просто идея:
Вместо того, чтобы хранить массив в вашем столбце, вы можете сохранить строку, разделенную двоеточиями. Когда вы запрашиваете данные из вашей базы данных, вы можете использовать split (","), и у вас автоматически будет нужный массив (после Integer.parseInt (String))
Вы используете createStatement вместо prepareStatement. createStatement делает поддержку параметров гайки!
Проверьте https://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html
И https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
для деталей надеюсь, что это помогает
Было бы неплохо, если в следующий раз вы предоставите DDL, сообщения об ошибках и т. Д., Тогда анализ будет проще.