2012-03-14 51 views
1

我是新來的mysql,並且從我的java程序更新我的sql數據庫時出現問題。我的java程序執行所有計算並將值更新存儲在大小爲2000的字符串數組中。我的sql數據庫包含以下列 名稱價格高低 我的字符串數組存儲價格,高,低用逗號分隔(我實際上查詢雅虎財務並將csv文件存儲在一個字符串中)。 現在我需要使用字符串中的數據更新價格,高,低。我該怎麼做。或者是否可以直接上傳從雅虎財經返回的數據到我的數據庫。從字符串數組更新mysqldatabase

代碼

  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

構建一個事先準備好的聲明:

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(); 
+0

謝謝s爲您的幫助 – user1092042 2012-03-14 11:00:58

+0

我有問題。當我嘗試更新具有負號的double時,會引發以下錯誤您的SQL語法中有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的'change = -0.1 where SYMBOL ='附近使用正確的語法。 – user1092042 2012-03-15 09:45:28

+0

這與您的原始問題無關,並且您不顯示代碼。請嘗試自己理解它,如果您不知道,請使用您的代碼提出另一個問題。 – 2012-03-15 09:47:30