KDB:如何在Java中进行批量插入?

KDB:如何在Java中进行批量插入?,kdb,Kdb,我有一个带有字符串列“key1”、“col1”、“col2”、“col3”的表。我在下面有一个片段来测试批量插入。当我运行它时,我没有得到任何错误,但是我没有看到对“test”表的任何更改 我错过什么了吗 Object[][] data = new Object[4][]; ArrayList<String>[] rec = new ArrayList[4]; rec[0] = new ArrayList<String>

我有一个带有字符串列“key1”、“col1”、“col2”、“col3”的表。我在下面有一个片段来测试批量插入。当我运行它时,我没有得到任何错误,但是我没有看到对“test”表的任何更改

我错过什么了吗

        Object[][] data = new Object[4][];

        ArrayList<String>[] rec = new ArrayList[4];

        rec[0] = new ArrayList<String>();  
        rec[1] = new ArrayList<String>();  
        rec[2] = new ArrayList<String>();  
        rec[3] = new ArrayList<String>(); 

        for (Integer i = 0; i < 10; i++) {

            rec[0].add(i.toString() + i.toString() + i.toString());
            rec[1].add(i.toString() + i.toString() + i.toString());
            rec[2].add(i.toString() + i.toString() + i.toString());
            rec[3].add(i.toString() + i.toString() + i.toString());

        }

        for (int i = 0; i < 4; i++) {
            data[i] = rec[i].toArray(new Object[rec[i].size()]);
        }

        c.Dict dict = new c.Dict(Arrays.asList("key1", "col1", "col2", "col3").toArray(new String[4]), data);
        c.Flip flip = new c.Flip(dict);

        Object[] updStatement = new Object[] { ".u.upd", "test", flip };

        conn.ks(updStatement);
Object[][]数据=新对象[4][];
ArrayList[]rec=新的ArrayList[4];
rec[0]=新的ArrayList();
rec[1]=新的ArrayList();
rec[2]=新的ArrayList();
rec[3]=新的ArrayList();
对于(整数i=0;i<10;i++){
rec[0]。添加(i.toString()+i.toString()+i.toString());
rec[1]。添加(i.toString()+i.toString()+i.toString());
rec[2]。添加(i.toString()+i.toString()+i.toString());
rec[3]。添加(i.toString()+i.toString()+i.toString());
}
对于(int i=0;i<4;i++){
数据[i]=rec[i].toArray(新对象[rec[i].size());
}
c、 Dict Dict=新的c.Dict(Arrays.asList(“key1”、“col1”、“col2”、“col3”)).toArray(新字符串[4]),数据);
c、 Flip-Flip=新的c.Flip(dict);
Object[]updStatement=新对象[]{.u.upd”,“test”,flip};
连接ks(升级状态);

除了您所说的之外,您还想使用

从中给出的javadoc:

用这个来 *在kdb+中调用一个函数,该函数接受2个参数,不返回值。e、 g.调用f[x;y]使用ks(“f”,x,y); *要调用lambda,请使用ks(“{x+y}”,x,y)

函数
.u.upd
接受两个参数,默认情况下,其签名与:

  • 第一个参数是表名的符号,它在Java中具有类型字符串
  • 第二个参数是Java中类型为Object[]的记录
第二个参数中对象[]的长度应等于列数。对象[]中的每个对象本身都应该是一个长度等于记录数的数组。内部数组的顺序应与列的顺序相同,每个内部数组的值应与kdb中的列类型具有相同的顺序,并与记录具有相同的顺序

您的对象[]应如下所示:

new Object[]{
    new Object[]{row1col1, row2col1, /*..., */ rowNcol1},
    new Object[]{row1col2, row2col2, /*..., */ rowNcol2},
    /* column 3 to column N-1 values */
    new Object[]{row1colN, row2colN, /*..., */ rowNcolN}
}
conn.ks(".u.upd", "test", new Object[]{ /*.... */});
您的
ks()
方法调用应该如下所示:

new Object[]{
    new Object[]{row1col1, row2col1, /*..., */ rowNcol1},
    new Object[]{row1col2, row2col2, /*..., */ rowNcol2},
    /* column 3 to column N-1 values */
    new Object[]{row1colN, row2colN, /*..., */ rowNcolN}
}
conn.ks(".u.upd", "test", new Object[]{ /*.... */});

再加上你所说的,你想使用

从中给出的javadoc:

用这个来 *在kdb+中调用一个函数,该函数接受2个参数,不返回值。e、 g.调用f[x;y]使用ks(“f”,x,y); *要调用lambda,请使用ks(“{x+y}”,x,y)

函数
.u.upd
接受两个参数,默认情况下,其签名与:

  • 第一个参数是表名的符号,它在Java中具有类型字符串
  • 第二个参数是Java中类型为Object[]的记录
第二个参数中对象[]的长度应等于列数。对象[]中的每个对象本身都应该是一个长度等于记录数的数组。内部数组的顺序应与列的顺序相同,每个内部数组的值应与kdb中的列类型具有相同的顺序,并与记录具有相同的顺序

您的对象[]应如下所示:

new Object[]{
    new Object[]{row1col1, row2col1, /*..., */ rowNcol1},
    new Object[]{row1col2, row2col2, /*..., */ rowNcol2},
    /* column 3 to column N-1 values */
    new Object[]{row1colN, row2colN, /*..., */ rowNcolN}
}
conn.ks(".u.upd", "test", new Object[]{ /*.... */});
您的
ks()
方法调用应该如下所示:

new Object[]{
    new Object[]{row1col1, row2col1, /*..., */ rowNcol1},
    new Object[]{row1col2, row2col2, /*..., */ rowNcol2},
    /* column 3 to column N-1 values */
    new Object[]{row1colN, row2colN, /*..., */ rowNcolN}
}
conn.ks(".u.upd", "test", new Object[]{ /*.... */});

创建一个本地q会话,将相同的测试模式放在那里,从.u.upd更新操作以插入并测试它。如果架构或发送的数据有任何问题,您将在控制台上看到错误。出现错误。它说‘insert显然这对我不起作用:Object[]updStatement=newobject[]{“insert”,“test”,flip};连接ks(升级状态);。工作原理如下:conn.ks(“插入”、“测试”、翻转);创建一个本地q会话,将相同的测试模式放在那里,从.u.upd更新操作以插入并测试它。如果架构或发送的数据有任何问题,您将在控制台上看到错误。出现错误。它说‘insert显然这对我不起作用:Object[]updStatement=newobject[]{“insert”,“test”,flip};连接ks(升级状态);。工作原理如下:conn.ks(“插入”、“测试”、翻转);