Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jferard/jxbase
JxBase is a fork from [jdbf](https://github.com/iryndin/jdbf), a Java utility to read/write DBF files
https://github.com/jferard/jxbase
Last synced: 1 day ago
JSON representation
JxBase is a fork from [jdbf](https://github.com/iryndin/jdbf), a Java utility to read/write DBF files
- Host: GitHub
- URL: https://github.com/jferard/jxbase
- Owner: jferard
- License: apache-2.0
- Created: 2019-10-26T10:28:18.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-05-27T09:53:04.000Z (over 1 year ago)
- Last Synced: 2023-12-11T22:04:05.404Z (about 1 year ago)
- Language: Java
- Size: 924 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
JxBase
======
* JxBase - Copyright (c) 2019-2021 Julien Férard (https://github.com/jferard)
* JDBF - Copyright (c) 2012-2018 Ivan Ryndin (https://github.com/iryndin)[![Build Status](https://travis-ci.com/jferard/JxBase.svg?branch=master)](https://travis-ci.com/jferard/JxBase)
[![codecov](https://codecov.io/gh/jferard/JxBase/branch/master/graph/badge.svg)](https://codecov.io/gh/jferard/JxBase)JxBase is a fork from [jdbf](https://github.com/iryndin/jdbf), a Java utility to read/write DBF files
## Convert a DBF file to SQLite from command line
Call, from command line, the class `com.github.jferard.jxbase.tool.DatabaseLoader`. Here's an example:...$ java -cp "$HOME/.m2/repository/com/github/jferard/jxbase/0.0.1-SNAPSHOT/jxbase-0.0.1-SNAPSHOT.jar" com.github.jferard.jxbase.tool.DatabaseLoader
Usage: java -cp 'path/to/jxbase/jar:path/to/jdbc/driver/jar' com.github.jferard.jxbase.tool.DatabaseLoader [option] [source] [connect_string]
-h, --help Print this message
-c driver_class Load the driver using Class.forName
-d Drop tables if they exist
-s N Chunk size (default is one chunk of the size of the file)
Use this to avoid an out of memory for big files
source A directory or a single dbf file
connection_string A connection string to the database
...$java -cp "$HOME/.m2/repository/org/xerial/sqlite-jdbc/3.32.3.2/sqlite-jdbc-3.32.3.2.jar:$HOME/.m2/repository/com/github/jferard/jxbase/0.0.1-SNAPSHOT/jxbase-0.0.1-SNAPSHOT.jar" com.github.jferard.jxbase.tool.DatabaseLoader -d -s 10000 $HOME/prog/java/jxbase/src/test/resources/data1 "jdbc:sqlite:./test.sqlite"
oct. 17, 2020 10:52:55 PM com.github.jferard.jxbase.tool.DatabaseLoader buildAndFillTables
INFOS: Build tables
oct. 17, 2020 10:52:55 PM com.github.jferard.jxbase.tool.DatabaseLoader buildAndFillTable
INFOS: > /home/jferard/prog/java/jxbase/src/test/resources/data1/gds_im.dbf
oct. 17, 2020 10:52:55 PM com.github.jferard.jxbase.tool.DatabaseLoader buildAndFillTable
INFOS: > /home/jferard/prog/java/jxbase/src/test/resources/data1/tir_im.dbf
## User Guide
### Read a DBF file
TODO
See [the integration test example](src/test/java/com/github/jferard/jxbase/it/ReaderIT.java)
### Read a DBF file with MEMO fields
TODO
See [the integration test example](src/test/java/com/github/jferard/jxbase/it/ReaderWithMemoIT.java)
### Write a DBF file
TODO
See [the integration test example](src/test/java/com/github/jferard/jxbase/it/WriterIT.java)
### Write a DBF file with MEMO fields
TODO
See [the integration test example](src/test/java/com/github/jferard/jxbase/it/WriterWithMemoIT.java)
## Design of an xBase database
The database is a simple set of files.### References
See:
* https://www.clicketyclick.dk/databases/xbase/format/
* http://www.dbase.com/KnowledgeBase/int/db7_file_fmt.htm
* http://devzone.advantagedatabase.com/dz/webhelp/Advantage12/index.html?master_advantage_isam_file_types.htm
* https://dbfread.readthedocs.io/en/latest/field_types.html: comprehensive list of data types.
* http://fox.wikis.com/wc.dll?Wiki~TableFileStructure~Wiki: comprehensive list of data types.### The DBF file
The main file. Contains the header and the records.+------- Header ---------+
| Metadata | <- XBaseMetaDataReader/Writer
| Field Descriptor Array | <- XBaseFieldDescriptorArrayReader/Writer
| Optional | <- XBaseOptionalReader/Writer
+------------------------+
| Records | <- XBaseRecordReader/Writer
+------------------------+### DBT file (memo: optional)
This file contains block of data.+------------------------+ \
| Header | |
+------------------------+ } <- XBaseMemoReader/Writer
| Records | |
+------------------------+ /### NDX file (index: optional)
TODO## Design of JxBase
###
JxBase aims to build DBF format reader and writer by layers. Each dialect derives an existing format
and adds fields, formats, files.### The covariance parameter problem
Whereas a `GenericRecordReader` has a `GenericDialect` parameter, a `FoxProRecordReader` needs
a `FoxProDialect` parameter. A covariant parameter (the parameters type varies with the class type)
is a real problem because it violates the Liskov substitution principle: the subclass
`FoxProRecordReader` won't work with a `GenericDialect` parameter (see https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)#Covariant_method_parameter_type).
Usually, one solves this problem with generics:```
class GenericRecordReader {
...
}
class FoxProRecordReader extends GenericRecordReader {
...
}
```Currently, JxBase doesn't use generics for covariance because this would lead to a really complex situation. The fallaback used to achieve the covariance is
a simple cast: we accept a `GenericDialect` and try to cast the instance into a `FoxProDialect`