Java:无法使用JDBC ODBC更新Excel

时间:2010-11-20 07:15:49

标签: java excel jdbc odbc

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

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驱动程序]错误   行

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

我按照步骤在此处应用在ResultSet对象中更新行http://download.oracle.com/javase/tutorial/jdbc/basics/retrieving.html

5 个答案:

答案 0 :(得分:2)

您可以考虑使用Apache POI进行Excel集成。

答案 1 :(得分: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)我认为更新时不会出现任何问题

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

resultSet不是通过JDBC更新的典型方法。 (通常使用insert,update语句。)

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

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

答案 4 :(得分:0)

我可以使用JDBC更新excel文件,您可以使用下面的代码,此代码更新D:/Test.xls中的文件和使用'Test'更新Col1,其中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();