java jdbc预处理语句和blob的性能问题

时间:2014-08-14 09:01:11

标签: java sql oracle jdbc oracle-sqldeveloper

我正在尝试使用jdbc瘦驱动程序在java数据库中逐个插入某些数据。 它们包含一个图像,我从一个ibm db2作为十六进制字符串(也在程序中)。

我的问题是我被迫使用预准备语句,因为十六进制字符串超过4000个字符,并且这样消耗了很多时间,我想知道是否有更快的方法来获取该十六进制字符串我的oracle db中的blob。

总的来说它确实有效,但速度很慢。对于约3400次,它需要花费24分钟,但是有更多的表,约有200,000个。

这是我在准备工作中设置值的代码(我在编码/编程方面没有经验,所以我很感激任何帮助)

while (rs.next()) { // rs = ResultSet with data
       maxCount++;
       System.out.println(maxCount);
       for (int j = 1; j <= md.getColumnCount(); j++) { // md = ResultSetMetaData
            switch (md.getColumnType(j)) {
               case 1:  // CHAR
                    oracleStmt.setString(j, rs.getString(j));
                    break;
               case -2: // BINARY
                    oracleStmt.setBlob(j, rs.getBinaryStream(j));
                    break;
               case 12: // VARCHAR
                    oracleStmt.setString(j, rs.getString(j));
                    break;
               case -1: // LONGVARCHAR
                    oracleStmt.setString(j, rs.getString(j));
                    break;
               case -3: // VARBINARY
                    oracleStmt.setBlob(j, rs.getBinaryStream(j));
                    break;
               case -4: // LONGVARBINARY
                    oracleStmt.setBlob(j, rs.getBinaryStream(j));
                    break;
               case 3: // DECIMAL
                    oracleStmt.setBigDecimal(j, rs.getBigDecimal(j));
                    break;
               case 93: // TIMESTAMP
                    oracleStmt.setTimestamp(j, rs.getTimestamp(j));
               default:
                    break;
               }
           }  
           oracleStmt.executeUpdate(); 
       }

我现在的问题是如何使用java增加预准备语句的速度/将十六进制字符串作为blob插入

0 个答案:

没有答案