Java: не удается обновить Excel с использованием JDBC ODBC - PullRequest
4 голосов
/ 20 ноября 2010

Я могу читать строки / столбцы просто отлично, но не могу обновить, вставить или удалить.

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 ]

2 голосов
/ 21 ноября 2010

Возможно, вам стоит рассмотреть Apache POI для интеграции в Excel.

2 голосов
/ 22 ноября 2010

Я предлагаю вам использовать 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) Я думаю, что при обновлении

проблем быть не должно

Если у вас есть какие-либо вопросы, пожалуйста, напишите мне

1 голос
/ 03 февраля 2012

Можно обновить, вставить и удалить.Используйте stmt.executeUpdate("query") вместо stmt.executeQuery("query").

0 голосов
/ 22 января 2014

Я могу обновить файл Excel с помощью JDBC, вы можете использовать приведенный ниже код, этот код обновляет файл в D: /Test.xls и обновляет Col1 с помощью «Test», где 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();
0 голосов
/ 21 ноября 2010

Набор результатов не является типичным средством обновления через JDBC. (Обычно вставка, используются операторы обновления.)

В размещенной вами ссылке учебника есть параграф, объясняющий, что набор результатов по умолчанию доступен только для чтения. Там написано:

Параллелизмом ResultSet по умолчанию является CONCUR_READ_ONLY. Примечание. Не все драйверы и базы данных JDBD поддерживают параллелизм. Метод DatabaseMetaData.supportsResultSetConcurrency возвращает true, если указанный уровень параллелизма поддерживается драйвером, и false в противном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...