2010-11-20 91 views
4

我可以很好地讀取行/列,但無法更新,插入或刪除。Java:無法使用JDBC更新Excel ODBC

java.sql.SQLException: [Microsoft][ODBC Excel Driver]Error in row

注:

try{ 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      String myDB = "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=myExcelFile.xls;" 
+ 
          "DriverID=22;READONLY=false"; 
      con = DriverManager.getConnection(myDB, username, password); 
      stmt = con.createStatement(); 
      stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
      rs = stmt.executeQuery("SELECT * FROM [users$]"); 
      while (rs.next()) { 
       String str = rs.getString("username"); 
       System.out.println(str); 
       rs.updateString("username", str + "UPDATED"); 
       rs.updateRow(); 
      } 
      rs.close(); 
      stmt.close(); 
      con.close(); 
     }catch(Exception e){System.out.println(e);} 

此代碼則達到rs.updateRow();並顯示此錯誤失敗時有人說這是因爲READONLY的未設置爲false或0,但我已經做到了和Excel文件,也未設置爲只讀

我遵循的步驟,以在ResultSet中應用更新行對象在這裏:http://download.oracle.com/javase/tutorial/jdbc/basics/retrieving.html

+0

限制錯誤的可能性,爲什麼不把你的select語句改爲SELECT username FROM [users $]?總有可能存在真正的「行中錯誤」。 – 2010-11-20 07:32:50

回答

2

您是否應該考慮用於excel集成的Apache POI

+0

謝謝。現在我使用的是Apache POI,但是我遇到了同樣的問題,我無法更新行!在這個鏈接http://poi.apache.org/spreadsheet/quick-guide.html#ReadWriteWorkbook中,據說我應該使用Workbook和其他不屬於HSSF包的實例,而在本教程中(http:// onjava .com/pub/a/onjava/2003/04/16/poi_excel.html)教我使用POI和HSSF軟件包!有什麼不同!!我現在很困惑!Plz help – evilReiko 2010-11-22 12:07:52

+0

對不起,我之前沒有回答,因爲我不是POI專家。也許有人在郵件列表中應該有所幫助。或者使用POI術語在StackOverFlow中創建另一個問題。 – 2011-03-03 21:38:01

0

resultSet不是通過JDBC進行更新的典型手段。 (通常插入,使用更新語句。)

您發佈的教程鏈接中有一段說明默認結果集是隻讀的。它說:

默認的ResultSet併發性是CONCUR_READ_ONLY。 注意:並非所有的JDBD驅動程序和數據庫都支持併發。如果驅動程序支持指定的併發級別,則方法DatabaseMetaData.supportsResultSetConcurrency返回true,否則返回false。

2

我建議你使用Apache POI http://poi.apache.org/和一些代碼在這裏:http://onjava.com/pub/a/onjava/2003/04/16/poi_excel.html

下面是代碼:

FileInputStream myInput = new FileInputStream(inputFile); 
XSSFWorkbook wb = new XSSFWorkbook(myInput); 

XSSFSheet sheet = wb.getSheetAt(0); 
XSSFRow row = sheet.getRow(0); 
XSSFCell cell = row.getCell(1); 
cell.setCellValue(123); 


sheet.getRow(37).getCell(13). setCellValue("USD"); 

它成功地更新單元格或您可以將此代碼更改爲您的情況(更新行)。

HSSF是的Excel '97(-2007)文件格式和XSSF是Excel 2007中OOXML格式(.xlsx)。 (poi.apache.org/spreadsheet/index.html)我認爲有shouln't任何問題,同時更新

如果您有任何問題,請寫信給我

+0

謝謝。現在我使用的是Apache POI,但是我遇到了同樣的問題,我無法更新行!在這個鏈接http://poi.apache.org/spreadsheet/quick-guide.html#ReadWriteWorkbook據說我應該使用Workbook和其他不屬於HSSF包的實例,而第二個鏈接(http:// onjava .com/pub/a/onjava/2003/04/16/poi_excel.html)教我使用POI和HSSF軟件包!有什麼不同!!我現在很困惑! Plz的幫助 – evilReiko 2010-11-22 12:05:11

1

是可能的更新,插入和刪除。使用 stmt.executeUpdate("query")而不是stmt.executeQuery("query")

0

我能夠更新Excel中使用JDBC文件,可以使用下面的代碼,這個代碼更新d文件:/Test.xls和更新col1處「測試」,其中col2的是「測試」:

java.sql.Statement stmt=null; 
    PreparedStatement ps=null; 
    Connection con=null; 

    con = java.sql.DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=D:/Test.xls;ReadOnly=False;"); 

    ps=con.prepareStatement("Update [Sheet1$] Set Col1='Test' Where Col2='Testing'); 
    ps.executeUpdate();