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中创建另一个问题。