如何插入一个循环数组到数据库

如何插入一个循环数组到数据库

问题描述:

我想插入一组阵列到一个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}; 

这个返回的方法不支持创建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} 

我也希望我的数据类型为整数array.Any帮助表示赞赏。

+0

那么你的TABLE1架构是什么样子? – alexbt

+0

是否有任何输出到控制台?例如,任何异常或连接成功的消息? –

+0

你不能使用一对多的关系吗? – Shinigami

“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)阵列基本上可以在内部使用(在存储过程中),但它们不是第一级公民数据类型。 (< - 这是我的意见!)

只是一个想法:
而不是在您的列中存储数组,您可以保存一个由冒号分隔的字符串。当您从数据库查询数据时,可以使用split(","),并且您自动获得所需的数组(Integer.parseInt(String)

+0

但我想以数组格式存储数据,因为数据不仅仅被程序使用。还有其他几个程序(不是Java)也使用我插入的数据。所以我不能改变数据类型。 – RKR

+0

@RKR你应该写这个给你的问题,你*去了那个模式 – Shinigami

您正在使用createStatement而不是prepareStatement。 createStatement确实支持参数!

检查https://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html

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

的细节 希望这有助于

将是很好,如果你提供DDL,错误信息等 接下来的时间,那么它更易于分析。