Java:无法使用JDBC ODBC更新Excel

我可以读取行/列很好,但我不能更新,插入或删除。

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();时失败rs.updateRow(); 并显示这个错误:

java.sql.SQLException:行中的[Microsoft] [ODBC Excel驱动程序]错误

注意:有些人说这是因为READONLY没有设置为false或0,但我已经完成了,并且Excel文件也没有设置为只读

我遵循以下步骤在这里应用更新ResultSet对象中的 : http : //download.oracle.com/javase/tutorial/jdbc/basics/retrieving.html

你可能应该考虑Apache POI的Excel集成。

我build议你使用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)我认为在更新时不会有任何问题

如果您有任何问题,请写信给我

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

结果集不是通过JDBC更新的典型手段。 (通常插入,使用更新语句。)

您发布的教程链接中有一段说明了默认结果集是只读的。 它说:

默认的ResultSet并发性是CONCUR_READ_ONLY。 注意:并不是所有的JDBD驱动程序和数据库都支持并发。 如果驱动程序支持指定的并发级别,则DatabaseMetaData.supportsResultSetConcurrency方法返回true,否则返回false。

我可以使用JDBC更新excel文件,你可以使用下面的代码,这个代码更新D:/Test.xls中的一个文件,并更新Col1与'testing',其中Col2是'testing':

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