Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:无法使用JDBC ODBC更新Excel_Java_Excel_Jdbc_Odbc - Fatal编程技术网

Java:无法使用JDBC ODBC更新Excel

Java:无法使用JDBC ODBC更新Excel,java,excel,jdbc,odbc,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";

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

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对象中的行:

ResultSet不是通过JDBC进行更新的典型方法。(通常使用insert、update语句。)

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

默认结果集并发性为CONCUR\u READ\u。
注意:并非所有JDBD驱动程序和数据库都支持并发。如果驱动程序支持指定的并发级别,则FraseMeMeDATA.SupRelsReultStand并发返回true。否则,>/P>> P>您可以考虑Excel集成。

< P>我建议您使用Apache POI和这里的一些代码:

代码如下:

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

为了限制出错的可能性,为什么不将select语句更改为从[users$]中选择用户名?总是有可能真的有“行中的错误”。谢谢。现在我正在使用ApachePOI,但我也有同样的问题,我不能更新行!在这个链接中,我说我应该使用工作簿和其他不属于HSSF包的实例,而第二个链接()教我如何在HSSF包中使用POI!有什么区别!!我现在很困惑!请帮忙,谢谢。现在我正在使用ApachePOI,但我也有同样的问题,我不能更新行!在这个链接中,我说我应该使用工作簿和其他不属于HSSF包的实例,而在本教程中()教我如何将POI与HSSF包一起使用!有什么区别!!我现在很困惑!对不起,我之前没有回答,因为我不是POI专家。也许邮件列表中的某个人应该提供帮助。或者使用POI术语在StackOverFlow中创建另一个问题。