从字符串数组更新mysql数据库

时间:2012-03-14 08:52:48

标签: java mysql database

我是mysql的新手,从我的java程序更新我的sql数据库时遇到问题。我的java程序执行所有计算并将要更新的值存储在大小为2000的字符串数组中。我的sql数据库包含以下内容列     名称价格高低 我的字符串数组存储由逗号分隔的价格,高,低。(我实际上查询了yahoo finance并将csv文件存储在一个字符串中)。 现在我需要使用字符串中的数据更新价格,高,低。我该怎么做。或者是否可以直接将从yahoo finance返回的数据上传到我的数据库中。

代码

            URL yahoofin = new URL("http://finance.yahoo.com/d/quotes.csv?s=" + symbol + "&f=nl1sjkm3m4r"); 

            URLConnection yc = yahoofin.openConnection(); 
            BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); 
            String inputLine; 

            while ((inputLine = in.readLine()) != null) 
            {  

            }

我用来更新单一股票的代码

 Statement stmt = conn.createStatement() ;
   // Execute the Update
  int rows = stmt.executeUpdate( "UPDATE tablename SET id = 9842 WHERE name='name'" ) 

2 个答案:

答案 0 :(得分:2)

构建准备好的声明:

String sql = "update stock set price = ?, high = ?, low = ? where name = ?"; 
PreparedStatement stmt = connection.prepareStatement(sql);

然后遍历CSV文件的行,并将每行解析为包含4个字段的数据结构(或简单数组):

while ((inputLine = in.readLine()) != null) {  
    StockLine line = parseStockLine(inputLine);
}

对于每一行,绑定参数并执行语句:

while ((inputLine = in.readLine()) != null) {  
    StockLine line = parseStockLine(inputLine);
    stmt.setBigDecimal(1, line.getPrice());
    stmt.setBigDecimal(2, line.getHigh());
    stmt.setBigDecimal(3, line.getLow());
    stmt.setString(4, line.getName());
    stmt.executeUpdate();
}

为了加快速度,您可以使用批处理:

while ((inputLine = in.readLine()) != null) {  
    StockLine line = parseStockLine(inputLine);
    stmt.setBigDecimal(1, line.getPrice());
    stmt.setBigDecimal(2, line.getHigh());
    stmt.setBigDecimal(3, line.getLow());
    stmt.setString(4, line.getName());
    stmt.addBatch();
}
stmt.executeBatch();

答案 1 :(得分:0)