babilun8486
babilun8486
2008-12-02 16:17
浏览 275
已采纳

请问一次性有40万到100万的数据要一次性写入库中怎么做效率高?

现在的方法 使用 jdbc 启用它的事务来处理 速度感觉比较慢

现在想想是不是用存储过程会比较快一些? 如何写呢?希望高手给与解答
我们表 4个字段 第一个字段 是自增id 使用序列 第二个是标志位 number 型 都是默认0 第三个 是一个批次号 也是一次写库时所有数据相同的 第四个是个 varchar2(11)的 数据 这个每一条都是不一样的

这样的 应该 如何写呢?

首先说 这个存储过程如何写??
java 如何调这个存储过程并且为这个 存储过程传三参数(是不是传个集合之类当参数会快一些,对应的java应该用啥做参数)

项目紧急 希望高手能够拔刀相助!! 万分之感谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • iteye_158
    iteye_158 2008-12-13 02:14
    已采纳

    varchar2 看来是ORACLE的了吧 这个好办了。先把你的记录写到文件 用Process 执行sqlldr命令 你可以查询下 sqlldr命令的参数。

    点赞 评论
  • iteye_5571
    iteye_5571 2008-12-03 00:17

    java执行储存过程一般使用 java.sql CallableStatement接口,具体用法可以google。
    储存过程每个数据库都不一样,没法写,俺不会。

    数据量大还是建议生成文件,然后直接起用线程执行脚本导入
    如db2常用的import ,load==

    点赞 评论
  • weixin_42511021
    т 2008-12-04 10:51

    lz可以试试在java中用批量提交的方式把数据插到表里

    下面是示意代码
    [code="java"]
    //假定以下变量已经被初始化
    Connection conn;
    List dataList;

    //带参数的sql
    String sql = "insert into my_table(col1, col2, col3, col4) values(?, ?, ?, ?)";

    //提交间隔件数
    int N = 10000;

    //禁用自动提交模式
    conn.setAutoCommit(false);

    PreparedStatement pstmt = conn.prepareStatement(sql);
    for (int i = 1 ; i <= dataList.size() ; i++)
    {
    //TODO : 设置参数

    pstmt.addBatch();
    
    if (i % N == 0
    ){
        pstmt.executeBatch();
    }
    

    }

    conn.commit();

    //启用自动提交模式
    conn.setAutoCommit(true);
    [/code]

    其中的N是每次提交的件数
    具体该每多少件提交一次,得根据lz那边的环境具体试验出来

    点赞 评论
  • iteye_158
    iteye_158 2008-12-13 02:13

    varchar2 看来是ORACLE的了吧 这个好办了。现把你的记录下到文件 用Process 执行sqlldr命令

    点赞 评论

相关推荐