Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > DBF deleted rows


Автор: agR 13.8.2007, 12:44
Есть файл DBF.
Читаю записи через jdbc:odbc:Driver={Microsoft dBase Driver (*.dbf)}, но игнорятся записи, помеченные как удаленные.
Как можно прочитать и их тоже? Может есть параметр какой-то?

Автор: AntonSaburov 13.8.2007, 13:59
Попробуй настроить в драйвере ODBC "Show Deleted Rows" (есть там такой флажок)

Автор: agR 13.8.2007, 14:09
Цитата(AntonSaburov @  13.8.2007,  13:59 Найти цитируемый пост)
Попробуй настроить в драйвере ODBC "Show Deleted Rows" (есть там такой флажок) 

Пробовал, но не пошло... я ж думаю комп перезагружать не надо было? smile
смотрел еще в документации, но до конца не понял.... есть метод 
Цитата

boolean ownDeletesAreVisible(int type) throws SQLException

но что он и как делает... проблемы перевода так сказать...

Автор: AntonSaburov 13.8.2007, 14:22
Цитата(agR @  13.8.2007,  14:09 Найти цитируемый пост)
Пробовал, но не пошло... 

Жаль. Пока мыслей нет - если что встречу - напишу. Если сам накопаешь - будем признательны. Очень.

Цитата(agR @  13.8.2007,  14:09 Найти цитируемый пост)
ownDeletesAreVisible

Я думаю, это вряд ли поможет - во-первых это не обязательно должно быть реализовано. Во-вторых - это информация, а не установка. Так что тут вряд ли что выйдет.

Автор: agR 13.8.2007, 15:33
Цитата(AntonSaburov @  13.8.2007,  14:22 Найти цитируемый пост)
Если сам накопаешь

Мои познания в английском не велики, но вродь то, что надо находится https://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=/com.ibm.db2.luw.apdv.java.doc/doc/t0052613.html.
Попытался адаптировать под себя, натыкаюсь на ошибку:
Цитата

java.lang.ArrayIndexOutOfBoundsException: -1
    at sun.jdbc.odbc.JdbcOdbcResultSet.rowDeleted(JdbcOdbcResultSet.java:3089)
    at DBFdeCoder.ReadOtv.<init>(ReadOtv.java:30)
    at DBFdeCoder.WriteDBF.<init>(WriteDBF.java:172)
    at DBFdeCoder.DBFdeCoderFrame$DecoderAction.actionPerformed(DBFdeCoderFrame.java:277)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:273)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Вот тестовый код (почти не изменял):
Код

package DBFdeCoder;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;



public class ReadOtv {
    public ReadOtv(String openPath) throws Exception{
        Connection conn = createConnection(openPath);
        
    
        Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
        ResultSet rs = st.executeQuery("SELECT * FROM matotv.dbf");
        DatabaseMetaData meta = conn.getMetaData();
        boolean dbSeesDeletes = 
              meta.deletesAreDetected(ResultSet.TYPE_SCROLL_SENSITIVE);
        System.out.println(dbSeesDeletes);                                           
            rs.beforeFirst();                         
            while (rs.next()) {                 
             if (dbSeesDeletes) {
            
             if (!(rs.rowDeleted()))              
               {
                 System.out.println(rs.getRow());
                 s = rs.getString(1);             
                 System.out.println("Employee number = " + s);
                                                    
               }
              }
            }
        
        i = 0;
        while (rs.next()) {
            i++;
        }
        
        matOtv = new String[i];
        i=1;
        
        rs.beforeFirst();
        while(rs.next()) {
            matOtv[i-1] = rs.getString(1);
            System.out.print(i+ "   ");
            System.out.println(matOtv[i-1]);
            i++;
        }
        System.out.println(i-1);
        conn.close();
        
    }
    
    public Connection createConnection(String openPath) throws Exception {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        //Properties connInfo = new Properties();
        //connInfo.put("charSet","cp1251");
        String url = "jdbc:odbc:Driver={Microsoft dBase Driver (*.dbf)};DBQ="+openPath;
        Connection con = DriverManager.getConnection(url/*,connInfo*/);
        return con;
    }
    private int i;
    private String[] matOtv;
    private String s;
    
}

 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)