Вставить массив в HANA с помощью JAVA

У меня есть массив объектов и пытаюсь вставить список в HANA. Так что мой код вставки выглядит

PreparedStatement stmt = conn
        .prepareStatement("INSERT INTO SCHEMA.TABLE VALUES"
                + " (?, ?, ?, ?, ?, ?, ?, ARRAY("+"1,2,3"+")");

for (int i = 1; i <= ITERATION_MAX; i++) {

    stmt.setInt(1, listofdata.get(i).get_id());
    stmt.setInt(2, listofdata.get(i).get_name());
    stmt.setInt(3, listofdata.get(i).get_place());
    stmt.setInt(4, listofdata.get(i).get_year());
    stmt.setInt(5, listofdata.get(i).get_day());
    stmt.setInt(6, listofdata.get(i).get_rollno());
    stmt.setInt(7, listofdata.get(i).get_main_subject());
    stmt.setArray(8, listofdata.get(i).get_elective());

    stmt.addBatch();

}

   stmt.executeBatch();

Вот
listofdata.get(i).get_elective()

возвращает целочисленный массив

Но это не работает. Согласно моей программе, функция ARRAY вызывается каждый раз, но почему она не вставляется в базу данных HANA. Поэтому через некоторое время я понял, что должен преобразовать массив JAVA в массив HANA. Как можно преобразовать массив Java? в массив HANA. Любая помощь приветствуется.

2 ответа

Решение

@RKR хорошо, вот ваш пример:

     /*
     * We're goin to insert several arrays into the HANA table, 
     * with different lengths
     * 
     * let's assume we already got a table like this
     * CREATE COLUMN TABLE T3 ( ID INT PRIMARY KEY, C1 INT ARRAY );
     */

    Integer[][] myarr ={ {1}, {1,2}, {1,2,3,4,5}, {1,2}, {1,2,3} };

    String testSection = "Insert Arrays one by one";
    stopWatch.start(testSection);
    myDBconn.setAutoCommit(false);

    Statement stmt = myDBconn.createStatement();

    stmt = myDBconn.createStatement();

    stmt.execute("TRUNCATE TABLE DEVDUDE.T3");

    // loop over our array of arrays and visit each once
    for (int i = 0 ; i < (myarr.length); i++) {
        int curr_length = myarr[i].length;

        String arrayFunction = "ARRAY (";

        for (int j = 0; j < (curr_length); j++){

            arrayFunction = arrayFunction.concat(myarr[i][j].toString()) ;

            // add comma if this is not the last element
            if (j < (curr_length - 1)){
                arrayFunction = arrayFunction.concat(", ") ;
            }
        }

        arrayFunction = arrayFunction + ")" ;
        // now the arrayFunction should loook like this
        // ARRAY ( ..., .... ,... )

        String insCMD = "INSERT INTO T3 (id, c1) "
                        + " VALUES (" + i + ", " 
                        + arrayFunction 
                        + " ) ";

        System.out.println(insCMD);
        int affectedRows = stmt.executeUpdate(insCMD);

        System.out.println("Loop round " + i
                    + ", last affected row count " + affectedRows);
        }


    myDBconn.commit();
    stmt.close();
    stmt = null;

И нет, этот код не очищает входные данные для оператора INSERT, но это необходимо сделать, чтобы избежать внедрения SQL.

Когда я запускаю код, это то, что печатается:

INSERT INTO T3 (id, c1)  VALUES (0, ARRAY (1) ) 
Loop round 0, last affected row count 1
INSERT INTO T3 (id, c1)  VALUES (1, ARRAY (1, 2) ) 
Loop round 1, last affected row count 1
INSERT INTO T3 (id, c1)  VALUES (2, ARRAY (1, 2, 3, 4, 5) ) 
Loop round 2, last affected row count 1
INSERT INTO T3 (id, c1)  VALUES (3, ARRAY (1, 2) ) 
Loop round 3, last affected row count 1
INSERT INTO T3 (id, c1)  VALUES (4, ARRAY (1, 2, 3) ) 
Loop round 4, last affected row count 1

И SELECT на таблице возвращает:

ID  C1           
0   1            
1   1, 2         
2   1, 2, 3, 4, 5
3   1, 2         
4   1, 2, 3      

Это не стандартный код, но все еще работает нормально. Надеюсь, он кому-нибудь поможет.

for (int i = 1; i <= ITERATION_MAX; i++) {

        String arraylist=Arrays.toString(listofdata.get(i).get_arraylist.replace("[","").replace("]",""));
        id=listofdata.get(i).get_id();
        name= listofdata.get(i).get_name();
        place=listofdata.get(i).get_place();
        year= listofdata.get(i).get_year();
        day=listofdata.get(i).get_day();
        rollno=   listofdata.get(i).get_rollno();
        main_subject= listofdata.get(i).get_main_subject();
        elective= listofdata.get(i).get_elective();
        Statement stmt = conn.createStatement();
        String sql="INSERT INTO SCHEMA.TABLE values("+

           +name+","
            place+","
            year+day+","
            rollno+","
            main_subject+","
            elective"+","
            "ARRAY("+arraylist+")" ;


        stmt.addbatch(sql);
    }
    stmt.executeBatch();
    stmt.close();
    conn.commit();
    conn.close();
Другие вопросы по тегам