我是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'" )
答案 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)
使用LOAD DATA INFILE