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


Автор: Abeke 11.8.2006, 15:21
     Как можно получить доступ к чтению DBF-файлов . Нужно ли что-то дописывать в CLASSPATH?
Где можно взять драйвер для этого? И если не трудно,    smile     какой-нибудь небольшой примерчик чтения из DBF-файла.  
   Спасибо.

Автор: AntonSaburov 11.8.2006, 18:00
Так на крайний случай можно использавоть ODBC драйвер. Прмер в нашем FAQ - http://vingrad.ru/JAVA-JAV-000098

Или посмотреть тут - http://forum.java.sun.com/thread.jspa?threadID=679848
Хотя там платно практически все.

Автор: Bozo 11.8.2006, 22:36
Цитата(AntonSaburov @ 11.8.2006,  18:00)
Так на крайний случай можно использавоть ODBC драйвер. Прмер в нашем FAQ - http://vingrad.ru/JAVA-JAV-000098

Зачем париться?

http://dbmt.sourceforge.net/xmlformat.html

Автор: tux 12.8.2006, 10:54
Бесплатных JDBC-драйверов для DBF похоже нет, по крайней мере я в свое время не нашел ничего. Есть несколько проектов для чтения из DBF и записи, работающих по похожему принципу, но не JDBC. Все простые и несложно разобраться. Вот ссылки на них:
  • http://www.svcon.com/jdbf/index.html. Махонькая библиотека, всего 4 класса. Простая как палка. Документация - только очень краткий javadoc, хотя вообще для нее больше и не надо. Но у меня не со всеми dbf-файлами смогла справиться
  • http://sarovar.org/projects/javadbf/. Библиотека немногим побольше, проблема та же - не со всеми файлами смогла справится, хотя результаты и получше. Документация более развернутая
  • опять https://javadbf.dev.java.net/. Написана по большей части на основе предыдущего. Документации нет, javadoc - на португальском. smile Зато смогла у меня прочитать все, что ни подсовывал.

Автор: Abeke 14.8.2006, 06:22
    Большое спасибо! Обязательно попробую.

Автор: Abeke 14.8.2006, 09:09
Попробовал сделать как здесь описано http://vingrad.ru/JAVA-JAV-000098 ,  но при компиляции выдаёт :

JavX1.java:32: unreported exception java.lang.ClassNotFoundException; must be ca
ught or declared to be thrown
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Код такой:
Код


import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.net.URL;
import java.io.*; 
import java.util.Date; 
import sun.jdbc.odbc.*; 

public class JavX1 extends Applet {
    private Button fButton;
    private List  fileCombo ;
    private static Label fLabelForTextField;
    private Checkbox fCheckbox;
    private Label fLabelForChoice;
    private Panel theNORTHPanel;
    private Panel theCenterPanel;
    private Panel theSouthPanel;
    private String[] columns1;
    public Choice theChoice ;
    public static Connection conn ;
    public static int Kol ;
    public static void main(String [] args ) throws SQLException {
    
       { 
             try{
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                    String url = "jdbc:odbc:Driver={Microsoft dBase Driver (*.dbf)};DBQ=C:/JavX1D/12";
                    Connection con = DriverManager.getConnection(url);
                    checkForWarning (con .getWarnings ()); 
             }

             catch( SQLException ex ) {
                       ex.printStackTrace();

             }

         JavX1ApplicationFrame theApplication = new JavX1ApplicationFrame(
         "Vend-------Таблицы!");
         theApplication.setSize(600, 450);
         theApplication.show();

       };
    }
    
    public void init()  {
        setLayout(new BorderLayout());
        setBackground(java.awt.Color.white);
        theNORTHPanel=new Panel();
        theCenterPanel=new Panel();
        theSouthPanel=new Panel();
        fileCombo = new List(4);
   
       theSouthPanel.add(fileCombo );
       
       add(theSouthPanel, BorderLayout.SOUTH); 
        
        
        theChoice = new Choice();
        theNORTHPanel.add(theChoice);
        fLabelForTextField = new Label();
       add(theNORTHPanel, BorderLayout.NORTH); 
       
        add(fLabelForTextField, BorderLayout.CENTER);


        fButton = new Button("Соединение");
        fButton.setBackground(java.awt.Color.green);
        theCenterPanel.add(fButton);
        add(theCenterPanel, BorderLayout.CENTER); 

        fButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e)  {
 
             }
        }); 

    }
     private static boolean checkForWarning (SQLWarning warn) 
     throws SQLException {
     boolean rc = false;

         if (warn != null) {
             System.out.println ("\n *** Warning ***\n");
             rc = true;
             while (warn != null) {
                  warn = warn.getNextWarning ();
              }
         }
         return rc;
     }

}
      class JavX1ApplicationFrame extends Frame {
        private JavX1 fApplet;
        public JavX1ApplicationFrame(String name) {
          super(name);
          addWindowListener(new JavX1WindowAdapter());
          fApplet = new JavX1();
          fApplet.init();
          fApplet.start();
          add(fApplet);
        }

        class JavX1WindowAdapter extends WindowAdapter {
          public void windowClosing(WindowEvent e) {
            fApplet.stop();
            fApplet.destroy();
            System.exit(0);
          }
        }
      }




Может быть сначала надо драйвер загрузить отсюда http://www.svcon.com/jdbf/index.html, прописать в CLASSPATH путь к JAR-файлу?

Автор: LSD 14.8.2006, 10:37
Вместо:
Код
catch(SQLException ex)
{
  ex.printStackTrace();
}

поставь
Код
catch(Exception ex)
{
  ex.printStackTrace();
}


Автор: Abeke 14.8.2006, 12:06
     Благодарствую ! smile  Исправил получилось .
  Но вот если я например хочу узнать про характеристики таблицы (число колонок, число полей, записей, тип колонок), то есть ли способ узнать об этом кроме такого:
ResultSet rs = st.executeQuery(“SELECT * FROM MYTABLE”);  ?
Можно ли воспользоваться методом getMetaData()
  Ну то есть conn.getMetaData().




Автор: LSD 14.8.2006, 12:13
Цитата(Abeke @  14.8.2006,  13:06 Найти цитируемый пост)
Можно ли воспользоваться методом getMetaData()  Ну то есть conn.getMetaData().

Можешь попробовать, но не знаю поддерживает ли такую функцию драйвер DBF и мост JDBC-ODBC.

Автор: Abeke 14.8.2006, 15:20
     Прошу извинения , эти DBF-файлы не имеют отношения к DBASE ,  они оракловские оказывается.
Вот здесь описание траблы:  http://forum.vingrad.ru/index.php?showtopic=107852&st=0&#entry821762 .
   А как к этим DBF-ам получить доступ и работать с ними через JAVA?

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