如何在循环中将数组插入数据库
How to insert an array in a loop to the database
我想在下面的 loop.My 代码中将一组数组插入到数据库 (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};
不支持此返回方法创建连接数组。
我的 Table 架构看起来像
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感谢帮助。
只是一个想法:
您可以保存一个由冒号分隔的字符串,而不是在您的列中存储一个数组。从数据库中查询数据时,可以使用 split(","), and you automatically have your array that you need (after 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、错误消息等,那就太好了。
下次再分析就好了
"ARRAY inserts into 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)数组基本上可以在内部使用(在存储过程中),但它们不是first-class-citizen数据类型。 (<- 这是我的意见!)
我想在下面的 loop.My 代码中将一组数组插入到数据库 (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};
不支持此返回方法创建连接数组。
我的 Table 架构看起来像
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感谢帮助。
只是一个想法:
您可以保存一个由冒号分隔的字符串,而不是在您的列中存储一个数组。从数据库中查询数据时,可以使用 split(","), and you automatically have your array that you need (after 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、错误消息等,那就太好了。 下次再分析就好了
"ARRAY inserts into 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)数组基本上可以在内部使用(在存储过程中),但它们不是first-class-citizen数据类型。 (<- 这是我的意见!)