从oracle导出表数据

时间:2014-03-13 10:56:18

标签: java oracle

我需要在java中创建一个平面文件。在这个平面文件中,我编写了insert语句,其中数据来自oracle表。 以下是我的java代码

stmtSQL="SELECT * FROM Table1";
resultSQL=null;
resultSQL=myCreateStmt.executeQuery(stmtSQL);
strSQLIns="";
while(resultSQL.next())
{
strSQLIns=strSQLIns+"INSERT INTO Table1 VALUES ('";
for(int iLoopCtr=0;iLoopCtr<27;iLoopCtr++)
{
    if(iLoopCtr==26)
        strSQLIns=strSQLIns+resultSQL.getString(iLoopCtr+1)+"'";
    else
        strSQLIns=strSQLIns+resultSQL.getString(iLoopCtr+1)+"','";
}
strSQLIns=strSQLIns+");\n";
}

当我运行此代码系统时,会生成类似这样的插入语句

INSERT INTO Table1 VALUES ('80896948       ','gMWcjDMPXox4LVyrXGw0Ok+4SQI=');
INSERT INTO Table1 VALUES ('39454249       ','z+5fkcA+7wrZrF2455kngiTdYU4=');
INSERT INTO Table1 VALUES ('52167960       ','+N55nru+ewwhKPJygW99T8yEQXg=');

现在我不想使用while循环,所以代码生成上面的insert语句。我想要一些快速的方法,所以我生成这样格式化的SQL查询。

INSERT INTO Table1 (c1,c2) (SELECT '1', 'first row' FROM dual  UNION SELECT '2', 'second    row' FROM dual);

1 个答案:

答案 0 :(得分:0)

如果您处于生产环境中:最快捷的方式就是使用Oracle提供的导入/导出工具

http://docs.oracle.com/cd/B10501_01/server.920/a96652/ch01.htm

如果您有学业问题或为此而这样做:

您的计划是一个很好的开始。我会阅读ResultSetMetadata,所以你可以从你的代码中删除那个神奇的'26'。只需将它存储在List<String[]>中,然后通过迭代该列表来构建INSERT-SELECT命令。请注意该示例过于简化,您将遇到一些问题:

  • 对于某些数据类型作为日期和数字,您必须格外小心地将它们格式化为正确的字符串
  • 有些数据类型为BLOB,您的想法不太可能正常工作