txt文件每行数据需要入库,有1千多万条数据,其中每行字段用的是逗号隔开我的代码是:读一条入一条 这样太慢了,请问有什么好的方法实现,麻烦付上代码,谢谢!

解决方案 »

  1.   

    用mysql数据库的load data infile语句应该很快
      

  2.   

    可以读好几条然后一次写入数据库的,如果你有导出oracle数据习惯的话,会发现oracle导出的sql会100条sql语句使用一个commit的,显然比一条sql语句插入一次效率要高。
    以下代码可以借鉴下:Connection con = null;
       Statement stm = null;
       try {
        con = JDBCConAndClo.getConnectionBao();
        stm = con.createStatement();
        con.setAutoCommit(false);
        // 若不出现异常,则继续执行到try语句完,否则跳转到catch语句中
        stm.addBatch("insert into student values(23,'tangbao','高数',100)");
        stm.addBatch("insert into student values(24,'王定','c#',98)");
        stm.addBatch("insert into student values(25,'王国云','java',90)");
        stm.addBatch("insert into student values(26,'溜出','英语',89)");
        stm.addBatch("insert into student values(27,'wqde','java',63)");
        /*
        * int[] executeBatch() throws
        * SQLException将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
        */
        stm.executeBatch();
        System.out.println("插入成功!");
        // commit:若成功执行完所有的插入操作,则正常结束
        con.commit();
        System.out.println("提交成功!");
        con.setAutoCommit(true);   } catch (SQLException e) {
        e.printStackTrace();
        try {
    //rollback: 若出现异常,对数据库中所有已完成的操作全部撤销,则回滚到事务开始状态
         if (!con.isClosed()) {
          con.rollback();
          System.out.println("提交失败,回滚!");
          con.setAutoCommit(true);
         }
        } catch (SQLException e1) {
         e1.printStackTrace();
        } finally {
         JDBCConAndClo.closeStatement(stm);
         JDBCConAndClo.closeConnection(con);
        }
       }