java JDBC将许多行插入表中

时间:2014-02-23 14:02:39

标签: java jdbc

我有一个包含80 000行的csv文件, 每行有:cost; date(123.232; 30/12/2008) 我必须将所有成本数据插入表名作为参数秒中的日期,例如: 123.232成本将在“30/12/2008”表格中排成一行 我有这么多行像这样.. 现在我的程序看起来像: 现在我必须在for循环中声明SQL查询,因为我需要“date”参数,

我的问题 - 如何绘制一个“pStatement = connection.prepareStatement(”INSER ....“与for循环一致的行?获取”date“参数

为什么我需要它? - 因为现在addsBatch不起作用,现在只添加到数据库的最后一行。 如果我将pStatement.executeBatch()移入for循环中 - 那么这将不像批处理添加那样工作,但通常每次添加都是如此。

我正在使用批量添加,因为我需要快速处理我的应用程序。 所有建议都将被通缉

    Database database = new Database();
    Connection connection = database.GetConnection();

    PreparedStatement pStatement = null;

    for(int x=0; x<=allRowsInCSVFile.size()-1; x++){
      Rows row = allRows.get(x);


      pStatement = connection.prepareStatement("INSERT INTO \""+ row.getDate() +"\" (cost) VALUES (?);");
      pStatement.setLong(1, row.getCost());
      pStatement.addBatch();

      }
      pStatement.executeBatch();
      connection.close();

3 个答案:

答案 0 :(得分:2)

我认为你应该将allRowsInCSVFile分成多个列表,每个列表一个日期,然后你可以从循环中抽出准备好的语句(排序)。它不会像你想要的那样,但它会为每个日期批量生产。我认为这将是你必须做的妥协。

答案 1 :(得分:0)

不确定这对社区维基来说有多么好看

    Object obj1 = new Object();
    PreparedStatement pStatement = 
      connection.prepareStatement("insert into " + obj1.toString() );
        while(true)
        {
             obj1.setSomeValue
        }

答案 2 :(得分:0)

您可以只使用jdbcTemplate.batchUpdate。在此处查看示例:http://www.mkyong.com/spring/spring-jdbctemplate-batchupdate-example/ 这允许您使用不同的sql但仍然批量执行。

使用preparedstatement,您必须将具有相同日期值的所有插入组合在一起,并为每个日期准备不同的语句。