JDBC fastload-2000万次addBatch()操作后的OutOfMemory

JDBC fastload-2000万次addBatch()操作后的OutOfMemory,jdbc,teradata,out-of-memory,Jdbc,Teradata,Out Of Memory,我正在使用Teradata jdbc驱动程序13.00.00.10,并尝试将一个包含1亿行的平面文件上载到Teradata 我从一张干净的桌子开始 首先,我尝试遍历整个文件,对每一行执行addBatch(),最后只执行一个executeBatch(): while((s=reader.readLine())!=null){ String[]columns=StringUtils.split(s,分隔符); for(int j=0;j在Teradata用户论坛上得到了答案,该论坛将我引向常见问题-

我正在使用Teradata jdbc驱动程序13.00.00.10,并尝试将一个包含1亿行的平面文件上载到Teradata

我从一张干净的桌子开始

首先,我尝试遍历整个文件,对每一行执行addBatch(),最后只执行一个executeBatch():

while((s=reader.readLine())!=null){
String[]columns=StringUtils.split(s,分隔符);

for(int j=0;j在Teradata用户论坛上得到了答案,该论坛将我引向常见问题-(http://developer.teradata.com/connectivity/faq)它说正确的工作方式是定期调用executeBatch(); 但是,要做到这一点,您需要首先关闭连接上的自动提交, 最后一定要承诺

所以我的代码现在看起来像这样:

        **con.setAutoCommit(false);**
        while ((s = reader.readLine())!=null ){
            String[] columns = StringUtils.split(s, separator);
            for (int j=0; j <columns.length; j++){
                st.setString(j+1,columns[j]);
            }
            st.addBatch();
            i++;
            if (i % 20000000 ==0 ){
                   st.executeBatch();

                   st.clearWarnings();
            }

        }
        st.executeBatch();
        **con.commit();**
**con.setAutoCommit(假)**
而((s=reader.readLine())!=null){
String[]columns=StringUtils.split(s,分隔符);

对于(int j=0;j您的陈述是什么样子的?您的问题似乎在Teradata的开发者交换上有答案。如果解决方案是正确的,请您在此处更新此问题。(我讨厌松散的结尾…)
       while ((s = reader.readLine())!=null ){
            String[] columns = StringUtils.split(s, separator);
            for (int j=0; j <columns.length; j++){
                st.setString(j+1,columns[j]);
            }
            st.addBatch();
            i++;
            if (i % 20000000 ==0 ){
                   st.executeBatch();

                   st.clearWarnings();
            }

        }
        st.executeBatch();
        **con.setAutoCommit(false);**
        while ((s = reader.readLine())!=null ){
            String[] columns = StringUtils.split(s, separator);
            for (int j=0; j <columns.length; j++){
                st.setString(j+1,columns[j]);
            }
            st.addBatch();
            i++;
            if (i % 20000000 ==0 ){
                   st.executeBatch();

                   st.clearWarnings();
            }

        }
        st.executeBatch();
        **con.commit();**