我想在循环中将一组数组插入数据库(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}
我也希望我的数据类型为整数数组。感谢您的帮助。
这里已经在SO上讨论了“ ARRAY插入HANA”主题。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)数组基本上可以在内部(在存储过程中)使用,但是它们不是一等公民数据类型。(<-这是我的意见!)