[Gvsig_english] How to open, modify and edit a dbasefile ?
Jose Manuel Vivó (Chema)
josemanuel.vivo at iver.es
Thu May 17 17:56:50 CEST 2007
Hi Matthieu,
Yes, you have to initialize the 'DriverManager'. Copy the gvSIG driver folder
("{workspace}\_fwAndami\gvSIG\extensiones\com.iver.cit.gvsig\drivers") to
"c:" drive and add this line at top of your test:
LayerFactory.setDriversPath("C:\\drivers");
Reguards
Chema
El Jueves 17 Mayo 2007 17:27, Matthieu Voorons escribió:
> Hi Vicente,
> Thanks for your quick reply.
> I've wrote a test to read a dbf file based on your suggestions :
>
> String filename = "C:\\properties.dbf";
> LayerFactory.getDataSourceFactory().addFileDataSource("gdbms dbf
> driver", "properties.dbf", filename);
> DataSource dataSource;
> try {
> dataSource =
> LayerFactory.getDataSourceFactory().createRandomDataSource("properties.dbf"
>, DataSourceFactory.AUTOMATIC_OPENING);
> SelectableDataSource sds;
> sds = new SelectableDataSource(dataSource);
> EditableAdapter auxea = new EditableAdapter();
> auxea.setOriginalDataSource(sds);
> } catch (DriverException ex) {
> ex.printStackTrace();
> } catch (DriverLoadException ex) {
> ex.printStackTrace();
> } catch (NoSuchTableException ex) {
> ex.printStackTrace();
> }
>
> but it results in :
>
> Exception in thread "main" java.lang.NullPointerException
> at
> com.hardcode.gdbms.engine.data.DataSourceFactory.getDriver(Unknown Source)
> at
> com.hardcode.gdbms.engine.data.DataSourceFactory.createRandomDataSource(Unk
>nown Source)
> at
> com.hardcode.gdbms.engine.data.DataSourceFactory.createRandomDataSource(Unk
>nown Source)
> at testdbf.Main.main(Main.java:52)
> Java Result: 1
>
> Apparently the dbf driver is not loaded, do I have to set a path to some
> libs or register a driver ?
> Thanks for you time,
> Regards
> Matthieu
>
> Vicente Caballero Navarro a écrit :
> > Hello.
> > You are trying it at too low level. You should better try it in an
> > upper-level way
> >
> > To create an access to a dbf you may have a look to the piece of code
> > in the method createFromGUI in the class ProjectTableFactory at appgvSIG
> >
> > LayerFactory.getDataSourceFactory().addFileDataSource("gdbms dbf driver",
> > name, "C:\\properties.dbf");
> > DataSource dataSource = LayerFactory.getDataSourceFactory()
> > .createRandomDataSource(name,
> > DataSourceFactory.AUTOMATIC_OPENING);
> > SelectableDataSource sds = new SelectableDataSource(dataSource);
> > EditableAdapter auxea = new EditableAdapter();
> > auxea.setOriginalDataSource(sds);
> >
> >
> > To make sql queries, in the extension called FiltroExtension we have
> > methods to which the expression is passed to as a parameter and return
> > a vector of long with the Selection produced by such query.
> >
> > private long[] doSet(String expression) {
> > try {
> > DataSource ds =
> > LayerFactory.getDataSourceFactory().executeSQL(expression,
> > DataSourceFactory.MANUAL_OPENING);
> >
> > return ds.getWhereFilter();
> > } catch (DriverLoadException e) {
> >
> > JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),Pl
> >uginServices.getText(this,"driver_error")+"\n"+e.getMessage());
> >
> > } catch (com.hardcode.gdbms.engine.data.driver.DriverException
> > e) {
> >
> > JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),Pl
> >uginServices.getText(this,"driver_error")+"\n"+e.getMessage());
> >
> > } catch (ParseException e) {
> >
> > JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),Pl
> >uginServices.getText(this,"parse_expresion_error")+"\n"+e.getMessage());
> >
> > } catch (SemanticException e) {
> >
> > JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),Pl
> >uginServices.getText(this,"semantic_expresion_error")+"\n"+e.getMessage())
> >;
> >
> > } catch (IOException e) {
> >
> > JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),Pl
> >uginServices.getText(this,"input_output_error")+"\n"+e.getMessage());
> >
> > } catch (EvaluationException e) {
> >
> > JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),Pl
> >uginServices.getText(this,"parse_expresion_error")+"\n"+e.getMessage());
> >
> > } catch (com.hardcode.gdbms.parser.TokenMgrError e) {
> >
> > JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),Pl
> >uginServices.getText(this,"expresion_error")+"\n"+e.getMessage());
> >
> > }
> >
> > return null;
> > }
> >
> > Matthieu Voorons escribió:
> >> Hi list,
> >> I'm trying to develop a new extension for gvsig. I wish to open the
> >> dbf file related to a shapefile, modify it (add some fields and
> >> change some entries) and make some sql queries. How could I do that ?
> >> I've seen that there is a dbf driver in the package
> >> com.iver.cit.gvsig.fmap.drivers.dbf, and a dbf reader in the package
> >> com.iver.cit.gvsig.fmap.drivers.shp. Which one should I use ?
> >> I've played a little with the code, the DbaseFileNIO and
> >> DbaseFileHeaderNIO.
> >> Reading the header is not a problem, but I'm not able to acces the
> >> data when using DbaseFileReaderNIO :
> >>
> >> String filename = "C:\\properties.dbf";
> >> File f = new File(filename);
> >> try {
> >> FileChannel in = new FileInputStream(filename).getChannel();
> >> DbaseFileReaderNIO r = new DbaseFileReaderNIO(in);
> >> int fields = r.getHeader().getNumFields();
> >> int recordCount = r.getHeader().getNumRecords();
> >> System.out.println("fields: " + fields + " recordCount: "
> >> + recordCount);// This return 0 and 0 even if there are
> >> 10
> >>
> >> // fields and 20 records
> >> String fieldUniqueValueArr[] = new String[recordCount];
> >> int j = 0;
> >> while (r.hasNext()) {
> >> DbaseFileReaderNIO.Row row = r.readRow();
> >> System.out.println(row.read(0).toString());
> >> fieldUniqueValueArr[j] = row.read(0).toString();
> >> j++;
> >> }
> >> } catch (IOException ex) {
> >> ex.printStackTrace();
> >> }
> >>
> >> I'm also wondering how to make a SQL query on the dbf data.
> >> I would be very grateful if you could send me some code snippets or
> >> some hints to where to digg.
> >>
> >> Best regards,
> >> Matthieu Voorons
> >> _______________________________________________
> >> Gvsig_internacional mailing list
> >> Gvsig_internacional at runas.cap.gva.es
> >> http://runas.cap.gva.es/mailman/listinfo/gvsig_internacional
> >
> > Un saludo.
>
> _______________________________________________
> Gvsig_internacional mailing list
> Gvsig_internacional at runas.cap.gva.es
> http://runas.cap.gva.es/mailman/listinfo/gvsig_internacional
--
=============
Jose Manuel Vivó (Chema)
Equipo de gvSIG
IVER T.I. S.A.
C/ Salamanca, 50-52
46005-Valencia
Tlf.+34963163400
Spain
www.iver.es
www.gvsig.com
More information about the Gvsig_internacional
mailing list