FAQ for HXTT DBF Packages of type 4 JDBC Driver for dbase, Visual DBASE, SIx Driver, PowerPlus, SoftC, Codebase, Clipper, Foxbase, Foxpro, and VFP
The most recent version of this document can be viewed at here.
Table of Contents
1. How to know the detailed version information of HXTT DBF package?
1st way: "java com.hxtt.sql.dbf.DBFDriver" will print that information.
2nd way: check that MANIFEST.MF file in jar file.
3rd way: Class.forName("com.hxtt.sql.dbf.DBFDriver").newInstance().toString();
4rd way: DriverManager.getDriver( url ).toString()
2. Can I use it in an iSeries OS/400 IBM machine that has Java 1.4 running
in it?
The HXTT DBF packages can run on any platform with Java VM, which includes Microsoft
Windows, Novell Netware, OS2, UNIX, and LINUX. It supports Personal Java, JDK1.0.X,
JDK1.1.X, JDK1.2.X, JDK1.3.X, JDK1.4.X, JDK1.5.X, JDK1.6.X, JDK1.7.X, JDK1.8.X, Java 9, Java 10, Java 11, Java 12, Java 13, and Java 14. It supports JDBC1.2, JDBC2.0, JDBC3.0, JDBC4.0, JDBC4.1, JDBC4.2, and JDBC4.3 now.
3. What is difference between the HXTT DBF Package, Embedded Package,
and Remote Access Package? Can I get some sample code to use the HXTT DBF?
The HXTT DBF supports Embedded and Remote Access. HXTT DBF Package includes a Database GUI manager. If you're accessing the local data, you can use the HXTT DBF Package or Embedded Package. If
you're accessing the remote data, you can use the HXTT DBF Package or Remote
Access Package. There is no any difference for your code to use anyone of three
packages. Please download the demo package from here.
4. What causes the 'No suitable driver' SQLException?
This error usually occurs during a call to DriverManager.getConnection(). The
cause can be failing to load the appropriate JDBC driver before calling getConnection(),
or specifying an invalid JDBC URL that isn't recognized by your JDBC driver.
If you're using a trial version, you will get "No suitable driver"
SQLException, and "Evaluation period over" after using about 30 days.
The HXTT DBF driver's name is com.hxtt.sql.dbf.DBFDriver, and its JDBC URL:
Embedded: jdbc:dbf:[//]/[DatabasePath][?prop1=value1[;prop2=value2]] (You can omit that "//" characters sometimes) For example: "jdbc:dbf:/." "jdbc:dbf:/c:/data" "jdbc:dbf:////usr/data" for unix or linux: "jdbc:dbf:/./data" Access by DBF Server: Skip it if you don't use TCP, RMI or JINI. jdbc:dbf://host:port/[DatabasePath] For example: "jdbc:dbf://domain.com:3099/c:/data" if one DBFServer is run on the 3099 port of domain.com
5. How to setup DBF url on the Novell Server?
DBF driver can run on Novell server. You can use directly access
or DBFServer to visit your data on Novell server. If your DBF
files is at sys:/java/yourdata, the direct URL should be:
jdbc:dbf:///sys:/java/yourdata
or
jdbc:dbf:////java/yourdata
6. I got "java.io.IOException: Permission denied" sometimes for
my SELECT query.
Please figure out what directory Java's java.io.tmpdir system property points
to, and make sure that directory is writable by the user that runs your Java
applications, otherwise you should set tmpdir properity in Connection properity
to a writable directory. tmpdir properity indicates whether set a temp directory,
Default: the value of JVM's "java.io.tmpdir" property. If that value
is incorrect, using the directory of JDBC url.
7. When I used jdbc:dbf:/<DatabasePath>, the connection's
schema was empty. "create catalog if not exists dbffiles".
What is Catalog?
DBF's schema is always empty. You can use catalog to query subdirectory.
Catalog means a directory, which contains some DBF files.
8. Can HXTT DBF support JDK 1.0.2?
Yeah. You need to download JDBC 1.22 from the Sun's JDBC download page and add
JDBC1.22 into JDK 1.0.2. HXTT DBF hasn't be tested on JDK1.0.X since we have
not received such a complement request from our users. If you meet any problem,
please let us know.
1. I already configured the .java.policy for my applet, but I continue with
problems of "acess denied".
For instance, you're using "jdbc:dbf:/C:/test", and grant
codeBase "file:/C:/test" in your policy file, but your applet is running
from "D:\sample\CargaStatApplet.html". You should grant codeBase "file:/D:/sample",
not "file:/c:/test".
2. http://localhost:8080/jdbcapplet.html, the applet started but returns
a Classnotfound com.hxtt.sql.dbf.DBFDriver error in the gui list.
Please add a codebase tag. For instance, "<applet code="jdbcapplet.class"
codebase="DBF_Remote_Access_JDBC40.jar"></applet>".
The DBF_Remote_Access_JDBC40.jar should be at the same directory of
jdbcapplet.html.
3. I put a DBF file in the Tomcat root directory and want to access
it from the client browser.
It seems that you wish to access remotely your database by applet. You need
to use "java com.hxtt.sql.admin.Admin" to run a "jdbc:dbf://yourhostname:yourport/c:\apache~1.0\webapps\root\"
DBFServer on your host. Then your applet should use
"jdbc:dbf://yourhostname:yourport/c:\apache~1.0\webapps\root\".
Remote Access Questions and Client/Server Mode Questions
1. Client/Server mode question: The data directory is not in the IBM machine where the Java program should
run, but instead those DBF files are in another machine with Windows
operating system.
com.hxtt.sql.admin.Admin provides a GUI manger for DBF server. For instance, you wish to provide JDBC4.0 remote data access. Please use "java -cp yourdirectrory/DBF_JDBC40.jar
com.hxtt.sql.admin.Admin" to start GUI manager, and add a url setting of
'"jdbc:dbf://10.32.90.48:" + 8029 +"/"+databaseDirectory'
on your host of 10.32.90.48(just an IP sample), then click Start button. Third,
you can use 'String url =
"jdbc:dbf://10.32.90.48:" + 8029 +"/"+databaseDirectory;'
to visit your DBF database from your IBM machine. If you're running
that GUI manager on "yourNT.com" host to visit "c:/database"
directory, you can use "jdbc:dbf://yourNT.com:8029/c:/database"
on your web application. jdbc:dbf://yourNT.com:8029/c:/database?user=oneuser&password=onepassword can provide a simply user/password verification for client/server mode. If you wish to write a secure DBF server
for some sensitive information, embedded encrypt/decrypt functions can help
you.
2. Remote access through map network drive question: How to remote access DBF data without DBFServer?
You can share your remote directory which contains your data files, then map
it to a local driver.
For Windows: You can connect remote DBF database
by sharing the directory and map it to local drive. You should disable the OPLOCKS of your Samba/NT/2000 server. How to turn off opportunistic locking in windows on client and on server side? This is done by manipulating the following registry key:
For client side: oplocks.reg file REGEDIT4 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MRXSmb\Parameters] "OplocksDisabled"=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters] "UseOpportunisticLocking"=dword:00000000 For server side: oplocksServer.reg REGEDIT4 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters] "EnableOplocks"=dword:00000000 You should put additional registry entry like e.g. The following registry entries disable opportunistic locking and caching: HKey_Local_Machine \ System \ CurrentControlSet \ Services \ LanmanServer \ Parameters \ EnableOpLocks must be set to 0. HKey_Local_Machine \ System \ CurrentControlSet \ Services \ LanmanServer \ Parameters \ CachedOpenLimit must be set to 0. HKey_Local_Machine \ System \ CurrentControlSet \ Services \ LanmanWorkStation \ Parameters \ UseOpportunisticLocking must be set to 0. HKey_Local_Machine \ System \ CurrentControlSet \ Services \ LanmanWorkStation \ Parameters \ UtilizeNtCaching must be set to 0.For Linux: You can use mounting. One user uses Samba to maped NTFS partitions in Linux servers, and DBF driver works normally like mapping any mount point in Linux.
3. Remote access through UNC path question: Can I setup only one datasource to access four servers for my Cold Fusion?
To access one unc path, you can use jdbc:dbf:/\\PC17\c$\values or jdbc:dbf:/\\PC17\val.
To access four unc pathes in the same connection, you need to use a free JDBC url, "jdbc:dbf:/" or "jdbc:dbf:///".
Then you can use some full UNC path names in SQL to visit your four servers where your Java VM has right to access..
For instance:
select * from \\amd2500\e$\dbffiles\test; select * from "\\amd2500\d$\dbfiles".test; select * from ".".test;
4. Remote access through http/https/ftp protocol question: How to let my program to fetch data daily from our web host?
You need to use url database, which supports http protocol, https protocol, ftp protocol, and sftp protocol.
5. Remote access through SAMBA protocol question: How to let my servlet on Linux to access over 300 hundred shared folders that all are on Windows boxes
You need to use SAMBA table, which needn't to map or mount driver.
6. I can't get the com.hxtt.sql.admin.Admin runnig for internet --> intranet
HXTT DBF supports port mapping and NAT route. Let HXTT DBF listening a port on the database server, and modify your route table or NAT table to map an external port to that internal port. You can use "start java -Djava.security.policy=policy com.hxtt.sql.admin.Admin"
to start GUI manager. You should add a remote url, for instance, jdbc:dbf://localhost:8029/d:/dbffiles,
and click Start button to start that server. Then on your internet client side, you can use jdbc:dbf://externalIP:8029/d:/dbffiles to access your intranet host. externalIP means an external IP or domain name address of your gateway or database server.
BTW, except for TCPServer protocol, HXTT DBF can use also RMIServer protocol. For instance, you have used "start rmiregistry 1099 -J-Djava.security.policy=yourPolicyFile" to startup your rmi service. Then you can use jdbc:dbf://localhost:1099/d:/dbffiles?serverType=RMIServer to let HXTT DBF bind remote service in registry. The key is use "java -Djava.security.policy=policy -Djava.rmi.server.hostname=externalIP com.hxtt.sql.admin.Admin RMISERVER 8029" to start your server. RMIServer protocol is slower much than the default TCPServer protcol.
7. I would like to start a server (TCP) from our application, instead of DBAdmin. I need to be able to programmatically tell the application which profile to start.
Please read Start/Stop Server Programmatically.
8. Is there a way to specify a file path in the url that will connect to
a mapped drive in Windows 2000. ie drive \\gomer\pyle\db which is mapped to
f drive on the server.
DBF driver can work with mapped driver, and you should use "jdbc:dbf:/f:"
to access your data.
9. When I click Start button to start a remote service, I get a security
excaption: access denied (java.net.SocketPermission 127.0.0.1:8029 connect,resolve)
You have to enable java.net.SocketPermission right in your policy file if you
run a DBF server. Please read
file:///yourdriver|/jdk1.6/docs/guide/security/PolicyFiles.html for more
information about policy file. It is unnecessary to know the specific content
of a policy file, since you can use policy tool to create and maintain your
policy files. Please read
file:///yourdriver|/jdk1.6/docs/tooldocs/win32/policytool.html for policy tool.
10. How to start remote service as MS Windows service and Linux(Solaris) Daemon?
Please read Run HXTT DBFServer as Windows Service or Linux(Solaris) Daemon.
11. How to start remote control when DBFServer is running as Windows service or Linux(Solaris) Daemon?
You can use "java com.hxtt.sql.admin.Admin TCPCLIENT [host:]port [remoteControlPassword]" to start your remote control.
1. I need to use tables stored in a subdirectory.
table-name: [catalog.]tableName
For instance, you have many DBF files on c:\data. You can use "jdbc:dbf:/c:/data"
as JDBC url. Then you can use "select * from subdirectory1.table1"
to visit table1 file at subdirectory1. For instance, "select tableAlias.*
from "sales/2004/04".sale as tableAlias" can access sale table at "c:\data\sales\2004\04".
2. I can't use "select RIGHT from deldob"
RIGHT is a reserved SQL keyword. "variableName", [variableName] or
{v 'variableName'} is used to quote those columns which use reserved keyword,
so that you should use "RIGHT" or {v 'RIGHT'} to quote the RIGHT field,
for instance, select {v 'RIGHT'},'other' from states where "RIGHT"=32.
HXTT DBF supports using DATE, TIME, TIMESTAMP, GROUP, ORDER, KEY, DESC, UPDATE
directly in SQL, although they're reserved words too.
3. Can I get an example on how to do a query involving a boolean value.
eg. " Select * from tableName where exported = true", where exported
is a boolean column in a DBF file.
Supports. You can use "select * from tableName where exported" too.
All of NOT, AND, and OR operation are supported.
4. How to specify dates?
Please use SQL Escape Syntax, a date is specified in a JDBC SQL statement with
the syntax {d `yyyy-mm-dd'} where yyyy-mm-dd provides the year, month, and date,
e.g. 1996-02-28. There are analogous escape clauses for TIME and TIMESTAMP type:
{t `hh:mm:ss'} and {ts `yyyy-mm-dd hh:mm:ss.f...'}. The fractional seconds (.f...)
portion of the TIMESTAMP can be omitted. For instance,{d '1999-11-01'} and {ts
'3999-03-24 00:59:23.22222'}. You can use PreparedStatement.setDate to set date
columns too.
6. Can {d '2999-11-21'}={ts '2999-11-21 23:22:20.3335'} and {t '23:22:20'}={ts
'1999-01-01 23:22:20.333'}?
Supports.
7. I think this one is for use functions {fn abs(TEST.int1)}
You can use abs(TEST.int1) too. HXTT DBF supports more than 230 functions.
8. Update table_name set (fieldname1=X, fieldname2=X2, ....) where primary_index='blah'
throws a parse exception.
You should use "update table_name set fieldname1=X, fieldname2=X2, ....
where primary_index='blah'".
9. How to delete all deleted records permanently?
"PACK TABLE [IF EXISTS] table_name" will pack database.
"TRUNCATE TABLE [IF EXISTS] table-name"
will zap database.
"update tableName set _DeletedFlag=false[, column-identifier
= {expression | NULL}]... [WHERE search-condition]" will unmarks records
marked for deletion in the selected table.
With deletesAreBlank=true connection, DELETE sql will convert the destination data row into the deleted blank row.
10. Howcan i access to a information_schema of a subdirectory. ?
For instance, SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='TABLE' and TABLE_CAT='Northwind';
SELECT column_name,data_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='Klanten' and TABLE_CAT='DATA002.012'
11. How to see those deleted records without pack?
You can use deletesAreVisible property to indicate whether the resultSet include
deleted records. Default:false
properties.setProperty("deletesAreVisible","true");//Includes
deleted records.
Connection con = DriverManager.getConnection(url,properties);
ResultSet rs=stmt.executeQuery(sql);
Then you can use "ResultSet.rowDeleted()" to see whether a row is
a deleted row.
If you set deletesAreVisible to true, you can use the sql sample code to query
data:
select deleted(),* from test
select * from test where not deleted()
select deleted(),* from test where deleted()
select * from test where deleted()
select sum(int1),max(dec1),min(double1) from test where deleted()
12. I'm searching for a JAVA tool that can add a field to dbase-table. ALTER
TABLE Add Field ...
For instance, alter table Backup_of_UN1FIN_PreSort drop UN1FIN_PRES;
alter table Backup_of_UN1FIN_PreSort add UN1FIN_DM numeric(12,3),add UN1FIN_CAT
varchar(20), add UN1FIN_DENS varchar(10);.
1. How to rebuilding index in case of corrupted index?
REINDEX {ALL | indexFileName[,indexfileName2,...]} ON table-name
2. I receive 1 record back, however there should be 8 records returned.My
SQL is "SELECT * FROM Schshift@brian WHERE PSCHED='0001092478'"
You should have a UNIQUE index restriction on your PSCHED column in your index
file. You should use "CREATE INDEX PSCHED on Schshift (PSCHED)", not
"CREATE INDEX PSCHED on Schshift (PSCHED UNIQUE)". Then you can get
all ten records. DBF driver will use index to speed up the query which
contains some index expressions.
3. We tried to set a PRIMARY KEY constraint with: create unique index PROVA
on PROVA (COD)
You should try "CREATE INDEX prova ON prova (cod PRIMARY KEY).
4. I have a table that lists an index using: STR(ClassLink,4,0)+STR(StuLink,5,0)
as the column_name. I want to join it to another table that has an index that
uses the same columns... What should the join statement look like in order to
take advantage of the indexes?
For instance, you can use "select * from ACLS3295,AGRD3295 where STR(ACLS3295.ClassLink,4,0)+STR(ACLS3295.StuLink,5,0)='1234abcde'
and STR(AGRD3295.ClassLink,4,0)+STR(AGRD3295.StuLink,5,0)='5678abcde'",
or "select * from ACLS3295 as a,AGRD3295 as b where STR(a.ClassLink,4,0)+STR(a.StuLink,5,0)='1234abcde'
and STR(b.ClassLink,4,0)+STR(b.StuLink,5,0)='5678abcde'".
5. How can I specify the indexes which have to be used for clipper files?
Does
it recognize a cgp files? (as used by codebase, this file just lists the
names of the index files).
Clipper's CGP file has been supported.
6. The ntx can't be updated when I update the DBF file.
DBF driver will use index to speed up the query which contains some index expressions.
Clipper's CGP file has been supported. You can use a text editor to browse and
modify CGP file. If a table has a structural .CDX or .IDX file, the file is
opened automatically when the table is opened. For the nonstructural index
file which hasn't the same file name as its table name and is created by other
xbase applications, you can:
1.add an existed index file to the CGP file Programmatically
or
2. run the DBFIndex once to supply the necessary index file information. You can use "java com.hxtt.sql.dbf.DBFIndex"
to find out how to supply existent index files. Useage: java com.hxtt.sql.dbf.DBFIndex
dbfTablePath tableName indexFileFullName1 [indexFileFullName2 ...]. For instance,
you have a legacy 'product.dbf' file with prodname.idx, prodprice.idx and orderdate.idx
on "c:\proudct\data" directory, you can run "java com.hxtt.sql.dbf.DBFIndex
c:\proudct\data product prodname.idx prodprice.idx orderdate.idx" once.
Then DBF will create a special table.CGP file and maintain
the index files automatically.
Then DBF will create a special product.CGP file and maintain the index files
automatically. All operations of update, insert and delete will update the .IDX
files that are related to the DBF file. DBF doesn't index all deleted records except for setting deletesAreVisible connection property to true.
7. Failed to use "create index No, VALUES of 1216.cdx 'product' No
UNIQUE, VALUES)"
You should use "create index No, 'VALUES' of '1216.cdx' on '1216.dbf'(product,
{ v 'VALUES'})" since VALUES is a reserved word and 1216 is a number.
1. What is the most efficient method to insert records in a table, to use
an updatable RecordSet or to use a PreparedStatement?
PreparedStatement is smally quicker than updatable RecordSet. An updatable RecordSet
is quicker than PreparedStatement if you insert into more than 200 columns with
constant values. It can only cope with constant values. PreparedStatement can
cope with complicated expressions so that you can insert timestamp, function,
ResultSet, and so on.
One user reported that he uses DBF to transfer daily more
than 500MB data between two oracle databases and Clipper's databse.
2. "select count(*) from table" are worked a long time for large
tables.
You should use "select reccount() from table" to get the number of
records. Count(*) sums always up all records except deleted row.
3. Are there any data row count, data volume, memory minimums, maximums
imposed when using the HXTT DBF?
No limitation. The HXTT DBF supports to join query big databases with DISTINCT,
GROUP BY, and ORDER BY.
4. > Is there a scenario possible where we store frequently accessed
temporary data in memory-only tables (as a cache) and use these for query's*_mixed _*with real HXTT DBF tables?
_memory_ is a speical catalog name for memory-only database. Through _memory_ catalog, memory-only database is visible for all applications in the same JVM. For instance, in an embedded connection, you can use create table _memory_.abc (a char(10));insert into _memory_.abc values(333);select * from _memory_.abc, test where abc.a=test.b;drop table _memory_.abc; to do the same things.
1. Does HXTT DBF support multi-user access?
The HXTT DBF supports multi-user access, record lock, and table lock.
2. Is there any way to lock/unlock record programatically.
We have provided a _LockFlag_ virtual column as row lock flag. You can know it from Set Record Lock Manually.
3. Does that Xbase compatible lock work also with Linux ? I mean a DLL under
Linux
Yeah. DBF provides Xbase compatible lock work for Windows, Linux, and OS2.
4. When my program is inserting a record to DataBase using your DBF Driver,
another C program reads the data from the DBF file, Can it read the record data
that my program is inserting? In other words, Does the driver use records level
lock?
DBF driver supports Xbase's record lock. You can download the JNIFile.dll( or
libJNIFile.so) from here,
and add the JNIFile.dll ( or libJNIFile.so) into your library path. For instance,
your JNIFIle.dll ( or libJNIFile.so) is on lib directory, you can use 'java
-classpath lib/DBF_JDBC30.jar:./classes -Djava.library.path=lib testSQL
"jdbc:dbf:/." sql.txt'. Note: If you are using JDBC4.3, JDBC4.2, JDBC4.1, JDBC4.0 or JDBC3.0 package with JVM1.4.X, JVM1.5.X, JVM1.6.X, JVM1.7.X, JVM1.8.X, Java 9, Java 10, or Java 11, you needn't that library.
If you wish to use Xbase compatible lock under Tomcat, you should copy the JNIFile library file to one a directory of java.library.path java enviroment parameter. You can get the value of java.library.path java enviroment parameter by System.getProperty("java.library.path") code ,or in windows, which is $PATH, in solaris or linux, which is $LD_LIBRARY_PATH, in hp-unix, which is SHLIB_PATH.
Then please use lockType property to enable Xbase compatible lock:
Properities prop=new Properities();
prop.setProperty( "lockType", "CLIPPER" );//DBASE, DBASE4BDE, DBASEIII, DBASEIV, CLIPPER, CLIPPER5.3, PowerPlus, Alaska, SoftC, FOXBASE, FOXPRO, FOXPRO4UNIX, FOXPRO4BDE, and VFP.
Connection conn=DriverManager.getConnection( url,prop );
DBF driver will lock and unlock automatically when you execute SQL through DBF
driver. ROWLOCKED([nWorkArea | cTableAlias]) function indicates whether the
current row has been locked by other process or application. For instance, "SELECT
rowlocked() from test where recno()=1000", and "SELECT rowlocked('test'),*
from test".
5. There are some errors when I use com.hxtt.sql.dbf.DBFDriver to access
a DBF file which may be modified by other application at the same time.
DBF
driver can see other application's lock, and lock only records when it read/updates
them. Please use lock property to enable Xbase compatible lock:
Properities prop=new Properities();
prop.setProperty( "lockType", "VFP" );//DBASE, DBASE4BDE, DBASEIII, DBASEIV, CLIPPER, CLIPPER5.3, PowerPlus, FOXBASE, FOXPRO, FOXPRO4UNIX, FOXPRO4BDE, and VFP.
Connection conn=DriverManager.getConnection( url,prop );
You need download the JNIFile.dll ( or libJNIFile.so) from here, and add the JNIFile.dll ( or libJNIFile.so) into your library path. DBF driver will lock and unlock automatically when you execute SQL through DBF driver. Note: If you are using JDBC4.3, JDBC4.2, JDBC4.1, JDBC4.0 or JDBC3.0 package with JVM1.4.X, JVM1.5.X, JVM1.6.X, JVM1.7.X, JVM1.8.X, Java 9, Java 10, or Java 11, you needn't that library.
Internationalization Questions
1. Can the HXTT DBF support Czech MS - DOS 895?
The HXTT DBF supports all codepage, multilingual collation sequence, and unicode character set. Cp895(Czech MS - DOS 895), Cp620(Polish MS - DOS 620) and Mazovia are extra supported although JVM doesn't support those.
2. Do you have a solution for character translation to the right encoding?
The HXTT DBF supports CharacterEncoding. Please use charSet property.
//Default: null //You can find a Supported Encodings list of files:///yourdriver/jdk1.2/docs/guide/internat/encoding.doc.html //Extra supports: // Cp895 is supported by HXTT DBF driver. //Czech MS - DOS 895 // Cp620 is supported by HXTT DBF driver. //Polish MS - DOS 620 // Mazovia is supported by HXTT DBF driver. //Polish Properties properties=new Properties(); properties.setProperty("charSet","sv_SE"); Connection con = DriverManager.getConnection(url,properties);
3. While reading encrypted data in a DBF file using u'r parser
in java. The data retreived is different from the data in the DBF
file, certain characters are read as ? marks.( the encryption is done using
ASCII values ).
You can use ResultSet.getBytes(int columnIndex), not ResultSet.getString(int
columnIndex) and ResultSet.getObject(int columnIndex), to get your encrypted
data, since your encrypted data is binary stream.
4. When they insert accented characters, it comes out different at the Java
end. There seem to be some character set conversion problems. Is there a way
to solve that?
You can use ResultSet.getBytes() and ResultSet.setBytes() to avoid CharacterEncoding.
5. The charSet's default should be "auto", which means that it
will extract the codepage from the DBF header field?
The default is "null". If there isn't charSet property, DBF will try to use the codepage
flag in DBF header field. If the codepage flag in DBF header field is empty too, DBF will try to use the Java platform's default charset.
6. My DBF file has Chinese column names.
DBF driver supports Chinese, ant other two bytes languages.
1. How to set up HXTT DBF with Tomcat4.1 as PoolableConnection?
This sample shows three PoolableConnections ways through Database Connection
Pool (DBCP) Configurations and JNDI Resources( You should read JNDI
Datasource HOW-TO and JNDI
Resources HOW-TO also.):
In server.xml:
<Context path="" docBase="ROOT" debug="5" reloadable="true" crossContext="true"> <Resource name="jdbc/testdbfPool1" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/testDBFPool1"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>maxActive</name> <value>50</value> </parameter> <parameter> <name>maxIdle</name> <value>10</value> </parameter> <parameter> <name>maxWait</name> <value>10000</value> </parameter> <parameter> <name>username</name> <value></value> </parameter> <parameter> <name>password</name> <value></value> </parameter> <parameter> <name>driverClassName</name> <value>com.hxtt.sql.dbf.DBFDriver</value> </parameter> <parameter> <name>url</name> <value>jdbc:dbf:///d:/dbffiles</value> </parameter> </ResourceParams> <Resource name="jdbc/testDBFPool2" auth="Container" type="com.hxtt.sql.HxttConnectionPoolDataSource"/> <ResourceParams name="jdbc/testDBFPool2"> <parameter> <name>factory</name> <value>org.apache.naming.factory.BeanFactory</value> </parameter> <parameter> <name>url</name> <value>jdbc:dbf:///d:/dbffiles</value> </parameter> <parameter><name>username</name><value></value></parameter> <parameter><name>password</name><value></value></parameter> <parameter><name>host</name><value></value></parameter> <parameter><name>port</name><value>8029</value></parameter> </ResourceParams> <Resource name="jdbc/testDBFPool3" auth="Container" type="com.hxtt.sql.HxttConnectionPoolDataSource"/> <ResourceParams name="jdbc/testDBFPool3"> <parameter> <name>factory</name> <value>com.hxtt.sql.HxttObjectFactory</value> </parameter> <parameter> <name>url</name> <value>jdbc:dbf:///d:/dbffiles</value> </parameter> <parameter><name>username</name><value></value></parameter> <parameter><name>password</name><value></value></parameter> <parameter><name>host</name><value></value></parameter> <parameter><name>port</name><value>8029</value></parameter> </ResourceParams> </Context>
Then you can use the below code to test those PoolableConnections:
Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource ds1 = (DataSource)envContext.lookup("jdbc/testDBFPool1"); Connection conn1 = ds1.getConnection(); out.println("testDBFPool1 OK:)<br/>"); Statement stmt1 = conn1.createStatement(); ResultSet rs1 = stmt1.executeQuery("select * from test"); if(rs1.next()) out.println(rs1.getString(1)+":)<br/>"); rs1.close(); stmt1.close(); conn1.close(); DataSource ds2 = (DataSource)envContext.lookup("jdbc/testDBFPool2"); Connection conn2 = ds2.getConnection(); out.println("testDBFPool2 OK:)<br/>"); Statement stmt2 = conn2.createStatement(); ResultSet rs2 = stmt2.executeQuery("select * from test"); if(rs2.next()) out.println(rs2.getString(1)+":)<br/>"); rs2.close(); stmt2.close(); conn2.close(); DataSource ds3 = (DataSource)envContext.lookup("jdbc/testDBFPool3"); Connection conn3 = ds3.getConnection(); out.println("testDBFPool3 OK:)<br/>"); Statement stmt3 = conn3.createStatement(); ResultSet rs3 = stmt3.executeQuery("select * from test"); if(rs3.next()) out.println(rs3.getString(1)+":)<br/>"); rs3.close(); stmt3.close(); conn3.close();
If you use org.apache.commons.dbcp.BasicDataSource, but get "Cannot create PoolableConnectionFactory" Error, you should check your commons-pool-1.x.jar and commons-dbcp-1.*.jar file in $TOMCAT/common/lib directory to see whether two files have the same version. DBCP v1.2 requires Pool v1.2 so that you should update Pool v1.1 from the tomcat website.
If you wish to add more Connection properity, you should use connectionProperties, for instance:
<parameter>
<name>connectionProperties</name>
<value>charSet=Cp737</value>
</parameter>
2. How to set up HXTT DBF with vqServer 1.9.55 as web server?
The key is to use an absolute path as Java libraries' location, and restart
vqServer after modified Java libraries.
For instance, your vqServer is installed at C:\vqServer\.
1. Please use http://yourhost:9090/ to visit your administration server.
2. Click on Java libraries in the vqServer control centre menu (http://yourhost:9090/admin?action=libraries&serial=14)
3 Click New library (http://yourhost:9090/admin?lib=New_library&action=edit)
4. Enter C:\vqServer\classes\DBF_JDBC20.jar as location value, DBF
Driver as Description value, then click OK button.
5. Please copy DBF_JDBC20.jar into C:\vqServer\classes directory.
6. Please copy ex01.class into C:\vqServer\servlets\servlets
7. Stop and restart vqServer
8. Please use http://yourhost/servlet/yourServlets to get your result.
3. How to set up HXTT DBF with Coldfusion MX 6.1 Application Server?
For instance,your Coldfusion MX is installed at C:\CFusionMX\, and wish to use
DBF_JDBC30.jar.
1. Please copy DBF_JDBC30.jar into C:/CFusionMX/wwwroot/WEB-INF/classes/.
2. Use http://yourhost:8500/CFIDE/administrator/index.cfm to enter the CFMX
Administrator.
3. Go to the "Java and JVM" of Server Settings, http://yourhost:8500/CFIDE/administrator/settings/jvm.cfm
page, and enter the full path, C:/CFusionMX/wwwroot/WEB-INF/classes/DBF_JDBC30.jar,
in the Class Path. Then, click "Submit Changes".
4. Restart the CFMX Service.
5. Please go back to the administrator page, and go to the "Data Sources"
of Data & Services, http://yourhost:8500/CFIDE/administrator/datasources/index.cfm
page, and enter the name for the new datasource, for instance "DBFTest",
and select "Other" for the driver. Then Click "Add".
6. Enter the datasource information. JDBC URL is always in the format jdbc:dbf:[//[host:port]]/[DatabasePath],
for instance jdbc:dbf:/c:/data. You can set more connection properties in your JDBC URL, for instance: jdbc:dbf:/c:data?delayedClose=15;maxCacheSize=6144;lockTimeout=2000; . Driver class is always com.hxtt.sql.dbf.DBFDriver. Driver name is used to identify the driver in the datasources view, and you
can use DBF. Username and password are not required. They can also
be specified in the cfquery tag (but datasource verification will fail if you
don't enter them). Description is not required.
7. Lastly, please press "Submit" to finalize the entered data.
8. You can find edit.cfm and edit_action.cfm sample in demo pacakge.
4. HXTT DBF with If you run ColdFusion (Tomcat, or alexandria sw and tanuki sw wrapper) on Windows 2000 and Windows XP Pro does not work on mapped drives.
Note: If you're using a database file through a UNC path or a mapped drive of Windows, there is a Windows Security restriction. If you run ColdFusion (Tomcat, or tanuki sw wrapper) as a service on Windows, it operates by default as System, and cannot access directories on a remote system or mapped drive; to resolve this issue, do not run ColdFusion (Tomcat, or tanuki sw wrapper) using the local system account.The service(For instance, ColdFusion MX Application Server, ColdFusion MX 7 Application Server, or Apache Tomcat) built by ColdFusion (Tomcat, or tanuki sw wrapper) can not access the share directory
at other machine by default. But you can do as follows to solve this problem:
1. Right click the service built by ColdFusion (Tomcat, or tanuki sw wrapper) in service manager,
and click the property menu.
2. On the open window,select the login tab, click this account radio box, and
click the browse button.
3. Select the administrator account(it seems that you should select the administrator
account), input the correct password in the password textbox and confirm password
textbox.
4. Restart this service, you can find this service can access the share directory
at other machine.
5. How to resolve 'DataSet has no unique row identifiers.' issue in JBuilder's
QueryDataSet?
You can use __rowid__, a virtual column to avoid that issue, For instance:
//... queryDataSet = new QueryDataSet(); //... queryDataSet.setMetaDataUpdate(MetaDataUpdate.ALL-MetaDataUpdate.ROWID-MetaDataUpdate.TABLENAME); queryDataSet.setQuery(new QueryDescriptor(database, "select __rowid__,* from test", null, true, Load.ALL)); queryDataSet.open(); queryDataSet.setTableName("test"); queryDataSet.setRowId("__rowid__", true); //...
6. How to set HXTT DBF with WebSphere Application Server?
You can download a pdf guide from here.
7. How to set HXTT DBF with Hibernate?
You should download support package and sample from here.
8. How to set HXTT DBF Data Source with Oracle Application Server 10G?
You should read guide at Oracle Application Server 10G(v10.1.3) and Oracle Application Server 10G(v10.1.2.02).
9. How to set HXTT DBF Data Source with JBoss AS 7.0.2?
After downloading HXTT DBF driver jar file. just move the HXTT DBF driver jar file into Jboss 7 installation directory under standalone/deployments (jboss-as-web-7.0.2.Final/standalone/deployments).
Restart your jboss server
Then go to the url and type http://localhost:8080/
click Administration console.
In Jboss Administration console you can press Add button of Datasource Configurations. step 1/3 Datasource Attributes: enter datasource name(testdbf) and jndi name(testdbf) then click Next button. step 2/3 JDBC Driver: select HXTT DBF driver jar file. click Next Nutton. Step 3 Connection Settings: enter connection URL (jdbc:dbf:////data) , Username(null) and Password(null). finally click Done button.
10. How to set HXTT DBF Data Source with Railo 3.3.1 Express?
After downloading HXTT DBF driver jar file. just move the HXTT DBF driver jar file into Railo 3 installation directory under /lib/ext/railo-server/context/library (railo-3.3.1.000//lib/ext/railo-server/context/library).
Restart your Railo server
Then go to the url and type http://localhost:8888/
click Railo Server Administrator (or type http://localhost:8888/railo-context/admin/server.cfm).
In Services - Datasource of Railo Server Administrator console, you can Create new datasource: step 1/2 Name: enter datasource name(testdbf) and Type(Other - JDBC driver) then click create button. step 2/2 enter Class(com.hxtt.sql.dbf.DBFDriver), DSN(jdbc:dbf:////data), Username(null) and Password(null). finally click create button.
11. Where's JDBC Connection Pool Templates for GlassFish?
MS Access template is at http://www.hxtt.com/test/microsoft_access_type4_datasource.xml
Cobol data file template is at http://www.hxtt.com/test/microsoft_access_type4_datasource.xml
MS Excel template is at http://www.hxtt.com/test/microsoft_excel_type4_datasource.xml
Corel Paradox template is at http://www.hxtt.com/test/paradox_type4_datasource.xml
Xbase template is at http://www.hxtt.com/test/dbf_type4_datasource.xml
CSV template is at http://www.hxtt.com/test/csv_type4_datasource.xml
Text template is at http://www.hxtt.com/test/text_type4_datasource.xml
PDF template is at http://www.hxtt.com/test/pdf_type4_datasource.xml
Word template is at http://www.hxtt.com/test/word_type4_datasource.xml
XML template is at http://www.hxtt.com/test/xml_type4_datasource.xml
12. How to set HXTT DBF database in DBeaver?
1. Create a JDBC Data Source for HXTT DBF Data
Open the DBeaver application, in the Databases menu, click the Driver Manager item. Click New to open the Create New Driver form.
In the Driver Name box, enter a user-friendly name for the driver, for isntance, testDBF.
In the Class Name box, enter com.hxtt.sql.dbf.DBFDriver.
In the URL Template box, enter jdbc:dbf: .
In the Category box, enter DBF.
In the Libraries panel, click Add File so that load the driver JAR (for instance, DBF_JDBC40.jar) in DBeaver.
In the Open driver library dialog that appears, select the DBF_JDBC40.jar file.
2. Create a Connection to HXTT DBF Data
In the Databases menu, click New Connection item.
In the Create new connection wizard that results, select DBF, then testDBF.
On the next page of the wizard, click the Driver properties tab.
Add new property, Property Name is database, Value is the path of your database file, for instance, d:/test/dbf .
Click Finish button.
13. How to set HXTT DBF with Apache EmpireDB?
You should download support package from here.
13. Does HXTT DBF driver support XA connections ?
It provides an experimental com.hxtt.sql.HxttXADataSource .
14. How to set HXTT DBF into my projects maven pom.xml.?
For instance,
Once you've downloaded the JAR just add it to your computer repository with: mvn install:install-file -DgroupId=com.hxtt.sql.dbf -DartifactId=dbfjdbc4 \ -Dversion=v6.0 -Dpackaging=jar -Dfile=DBF_JDBC40.jar -DgeneratePom=true The last parameter for generating a POM will save you from pom.xml warnings. Include the new dependency by modifying your project's pom.xml. Add the following dependency: <dependency> <groupid>com.hxtt.sql.dbf</groupid> <artifactid>dbfjdbc4</artifactid> <version>v6.0</version> </dependency> Save the pom.xml file and build the project to make sure no errors exist.
15. How to set HXTT DBF Data Source with JBoss Application Server 4.0.1?
For instance,
<datasources> <local-tx-datasource> <jndi-name>TestData</jndi-name> <connection-url>jdbc:dbf:////data</connection-url> <driver-class>com.hxtt.sql.dbf.DBFDriver</driver-class> <connection-property name="delayedClose">-1</connection-property> <user-name/> <password/> <min-pool-size>5</min-pool-size> <max-pool-size>20</max-pool-size> <idle-timeout-minutes>5</idle-timeout-minutes> </local-tx-datasource> </datasources>
16. How to set HXTT DBF database dialect with EclipseLink of Glassfish?
You should download support package and sample from here.
17. How to set HXTT DBF database dialect with TopLink of Glassfish?
You should download support package and sample from here.
18. How to set HXTT DBF database in JasperSoft Studio?
1. right-click a project in the Project Explorer and select New > Data Adapter to open the Data Adapters Wizard.
2. In the DataAdapter File window, choose the project where you want to save the data adapter file. This should be the project that contains the report(s) you want to use with your data adapter.
3. Enter a file name for your adapter and click Next.
4. Select Database JDBC Connection as the data adapter typeand click Next.
5. Enter a name for your adapter. This name is used when you select an adapter for a report.
6. Enter com.hxtt.sql.dbf.DBFDriver for JDBC Driver
7. Enter jdbc:dbf:/yourDatabasePath for JDBC Driver
8. Click Driver Classpah tab.
9. Click Add button to select the DBF_JDBC40.jar file.
10. Click Finish to create the adapter.
The adapter is saved as an XML file in the project location you selected.
19. How to set HXTT DBF database in Jasper Server?
First, copy the Driver to the JasperReports Server Classpath
Now you need to copy the driver (the DBF_JDBC40.jar file) to the classpath of your application server to enable JasperServer to find it.
In general it's best to copy the driver to the application server's shared library location. Refer to your application server documentation for exact locations.
For example in a JapserServer Bundle install on windows this is located at: C:/Jaspersoft/jasperreports-server-cp-7.1.0/apache-tomcat/lib
After these modifications you will need to restart the application server for this settings to take effect.
For information on restarting your server see Chapter 3 of the JasperReport Server Install Guide (is located on the /docs folder of your Jasper Server install path)
1. Log into JasperReport Server from your browser using the jasperadmin or superuser account (e.g.: http://localhost:8080/jasperserver-pro)
2. Go to View | Repository, Select a folder where you want to create your Data Source (e.g.: /Data Sources). Right click on the folder name in the repository view and from the context menu select called Add Resource and then click on Data Source. Now you are presented with a screen to enter the settings of your Data Source connection
3. Type choose JDBC Data Source. JDBC Driver option choose Other... .
4. JDBC Driver (required): enter com.hxtt.sql.dbf.DBFDriver
5. URL (required): enter jdbc:dbf:/yourDatabasePath .
6. Click Save button.
7. Data Source Name (required): enter a user-friendly name for the driver, for isntance, testDBF.
8. Click Save button.
20. Met Error 'Property with name ... not found on ' for sql2o when complicated join or subquery.
Sql2o is using meta.getColumnLabel, but JDBC specification will use tableName.column for getColumnLabel when there is column name collision.
you can use
Sql2o sql2o = new Sql2o(url,null,null,new HxttQuirks());
import org.sql2o.quirks.NoQuirks;
public class HxttQuirks extends NoQuirks {
public HxttQuirks() {
super();
}
public HxttQuirks(Map
super(converters);
}
public String getColumnName(ResultSetMetaData meta, int colIdx) throws SQLException {
return meta.getColumnName(colIdx);//Sql2o is using meta.getColumnLabel, but JDBC specification will use tableName.column for getColumnLabel when there is column name collision.
}
}
20. Where's the support package for MySQL Migration?
The support package for MySQL GUI Tools 5.0 is at http://www.hxtt.com/test/mysql_migration.zip.
The support package for MySQL Migration Toolkit v1.0.21 is at http://www.hxtt.com/test/mysql_migration1.0.21.zip.
The support package for MySQL Migration Toolkit v1.0.20 is at http://www.hxtt.com/test/mysql_migration1.0.20.zip.
1. Does DBF support Clipper?
HXTT DBF supports dbase, Visual DBASE, SIx Driver, Clipper, Foxbase, Foxpro and VFP. It
supports IDX, CDX, NDX, MDX, NTX, and CGP. It supports DBF, DBC, DCT, DCX, DBT,
FPT, SMT, and user-defined extensions. It supports Multi-user
Access and Xbase applications' compatible lock.
2. VFP's max column number is 255, and max column name length is 10.
DBF driver supports more than 8000 column, and the max length of clolumn name
is 11. The max column size of varchar is 65535. A DB2K table supports at most
32 characters as column name.
3. I can create a dbf file with 3 char column and other programs can read
it; however, I ran into trouble with I add an integer column.
DBF driver supports many Xbase format files, such as Clipper, DbaseIII, Dbase
IV, Visual Dbase 5, Foxbase2.1, and VFP. It's normal that your other program
can't read integer column, since integer column doesn't be supported by some
Xbase programs. You can try decimal or numeric column.
4. How can I connect to a VFP container (e.g. <dbase>.DBC)? Specifically,
what URL
format is needed?
DBF supports VFP container(a kind of database file). For insance, your dbcsample1.DBC
is at c:/dbc". You can use "jdbc:dbf:/c:/dbc" as URL, then you
can use "select yourColumn from dbcsample1.yourTable". If you have
defined a long column name in your dbc, DBF will support that long column name
automatically in your sql. For instance, you have a table1.dbf in dbc1.dbc cotainer, you can use "select * from table1", or "select * from dbc1.table1".
If a "column1" column of table1.dbf has a long "goodColumnName"
definition in dbc1.dbc container. You can use "select column1 from table1",
or "select goodColumnName from table1".
5. I would like that you help me with a driver for connect databases .dbc
of Visual Fox Pro.
DBF supports DBC, DCT, and DCX files. You can use "select yourColumn from
yourDbc.yourTable" . If you wish to do more for your DBC files, you can
uses "OtherExtensions" property (Default:false) to indicate whether
DBF driver supports other extensions except for '.DBF'. Please use "properties.setProperty("OtherExtensions","true");"
for "DriverManager.getConnection(url,properties);". Then you can use
"select * from 'yourdatabase.dbc'", "update 'your.dbc' set ...",
and so on.
6. I have a program that works with data bases of dBase, but these have
extension .DEC and the index .INC instead of .DBF and .NTX.
Please use "properties.setProperty("DefaultExtension","DEC");properties.setProperty("DefaultNTXExtension","INC");"
for "DriverManager.getConnection(url,properties);".
7. One new problem that I have is how to access dbf files that have a numric
exetention. My files are not a.dbf or b.dbf they are like a.001 b.017.
Please use "properties.setProperty("OtherExtensions","true");"
for "DriverManager.getConnection(url,properties);". Then you can use
"select * from 'a.001'", "update 'b.017' set ...", and so
on.
8. Is there a way to create the table so that FoxPro 2.5 (DOS) can open
the table.
When create connection by using "DriverManager.getConnection(url, properties);",
you can use a "versionNumber" property (default value:30) to hint
DBF the format. DBF will try to use that version when it creates new table.
For instance:
properties.setProperty("versionNumber", "03");
The versionNumber value list:
02 FoxBase
03 dBASE III
04 dBASE IV
05 dBASE V
F5 FoxPro
30 Visual FoxPro
DB2K dbase2k, a variable of 04
DBF won't change the format of dbase 4, 5, or 2k when it edits those tables.
9. How to works simultaneously with BDE's DBASE and FOXFRO driver.
First of all, please use BDE Adminstrator to set LOCAL SHARE =TRUE on the INIT Definitions of System page in the BDE Configuration utility.
Secondly, you need to download the JNIFile.dll( or
libJNIFile.so) from here,
and add the JNIFile.dll ( or libJNIFile.so) into your library path.
Then, plese use lockType property to enable Xbase compatible lock:
Properities prop=new Properities();
prop.setProperty( "lockType", "DBASE4BDE" );//DBASE4BDE or FOXPRO4BDE.
Connection conn=DriverManager.getConnection( url,prop );
10. I need to read an update variables stored in one .mem file used by one third party application. Is there a way to do this in Java?
memoryFile connection property can be used to load a memory file.
For instance:
jdbc:dbf:/c:/dbfdata/?memoryFile=yf.MEM
Then all variables in yf.MEM are visible.
For instance,
slect abc; will return abc.