Java: 无法使用JDBC ODBC更新Excel

4

我可以正常阅读行/列,但无法更新、插入或删除。

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();时失败,并显示以下错误:

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

注意:有些人说这是因为READONLY未设置为false或0,但我已经设置过了,并且Excel文件也没有设置为只读。我按照此处的更新ResultSet对象中的行步骤进行操作:http://download.oracle.com/javase/tutorial/jdbc/basics/retrieving.html

为了减少出错的可能性,为什么不将您的选择语句更改为SELECT username FROM [users$]呢?总有可能真的存在“行中错误”。 - jcomeau_ictx
5个回答

2
也许你应该考虑使用Apache POI来集成Excel。

谢谢。现在我正在使用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)中则教我使用带有HSSF包的POI!有什么区别!!我现在很困惑!请帮忙 - evilReiko
抱歉之前没有回复,因为我不是POI专家。也许邮件列表中的某个人可以提供帮助。或者您可以使用POI术语在StackOverFlow上创建另一个问题。 - John John Pichler

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) 我认为在更新时不应该有任何问题。

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


谢谢。现在我正在使用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)则教我使用带有HSSF包的POI!有什么区别!!我现在很困惑!请帮忙 - evilReiko

1

可以进行更新、插入和删除操作。使用stmt.executeUpdate("query")而不是stmt.executeQuery("query")


0

resultSet 不是通过 JDBC 进行更新的典型方式。通常使用 insert、update 语句。

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

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


0

我能够使用JDBC更新Excel文件,您可以使用以下代码,此代码将在D:/Test.xls中更新文件,并在Col2为“Testing”时将Col1更新为“Test”:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接