我可以很好地读取行/列,但我无法更新,插入或删除。
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
答案 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();