2012-01-16 91 views
1

我有一個dbf文件,我可以在視圖中看到intersting字段的類型是L(我認爲它是邏輯類型)和M(我想這是一個備註型)dbf CREATE TABLE throws java.sql.SQLException:語法錯誤:停止解析

我嘗試使用dbf_jdbc重新DBF模板,如表:

private static final String TABLE = "create table SAMPLE (" 
      + " SM Logical, " 
      + " PRIM MEMO " + ")"; 
... 
String url = "jdbc:DBF:/C:\\TEST"; 
Connection dbfConn = null; 
PreparedStatement ps = null; 
... 
// instantiate it 
Class.forName("com.hxtt.sql.dbf.DBFDriver").newInstance(); 
dbfConn = DriverManager.getConnection(url, properties); 
Statement stmt = dbfConn.createStatement(); 
stmt.executeUpdate(TABLE); 

但我發現了以下錯誤:

java.sql.SQLException: Syntax error: Stopped parse at MEMO 
java.sql.SQLException: Syntax error: Stopped parse at LOGICAL 

原因 - 類型名字,因爲當我使用varchar,everythins是好的。

Dbf_jdbc版本(從JAR清單文件):

Manifest-Version: 1.0 
Created-By: HXTT Version Robot 
Main-Class: com.hxtt.sql.admin.Admin 

Name: com/hxtt/sql/dbf/ 
Specification-Title: HXTT DBF JDBC 3.0 Package 
Implementation-Title: com.hxtt.sql.dbf 
Specification-Version: 4.2.056 on April 01, 2009 
Specification-Vendor: Hongxin Technology & Trade Ltd. 
Comment: JDBC 3.0 Package for Xbase database 
Implementation-Version: 4.2.056 on April 01, 2009 
Implementation-Vendor: Hongxin Technology & Trade Ltd. 
Implementation-URL: http://www.hxtt.com/dbf.html 

Name: com/hxtt/sql/admin/ 
Specification-Title: HXTT Database Admin 
Implementation-Title: com.hxtt.sql.admin 
Specification-Vendor: Hongxin Technology & Trade Ltd. 
Specification-Version: 0.5 on April 01, 2009 
Comment: HXTT Database Admin 
Implementation-Version: 0.5 on April 01, 2009 
Implementation-Vendor: Hongxin Technology & Trade Ltd. 
Implementation-URL: http://www.hxtt.com/dbf/dbadmin.html 

所以我的問題是SQL類型,我應該使用哪一個,所以我可以使用代碼創建DBF模板,當我使用DBF的瀏覽器打開一個文件,我可以請參見字母M和L作爲類型短名稱。

+0

舊版本的dbf沒有備忘錄字段您確定您的版本匹配 – 2012-01-16 11:41:15

+0

我添加了版本信息我在哪裏可以找到關於版本和支持類型的信息? – Alexandr 2012-01-16 12:09:30

回答

0

我不知道基於java的DBC驅動程序,但是一個隱含的縮寫版本是隻使用「L」或「M」分別

create table SAMPLE (SM L, PRIM M)"; 

此外,對於一些其他類型的

C(?) = character (?=length of character based field) 
I = integer 
D = date (only date portion) 
T = date/time 
B(?) = double(?=decimal precision -- ex: B(3) = up to 3 decimals) 
0

的dBase III文件支持:

  • 字符name C(40)
  • 日期birth D
  • 邏輯member L
  • 備註desc M
  • 數字rate N(6, 2)

類型的第一個字母是你要使用的東西。

此外,其他DBF格式允許:

  • 貨幣price Y(注意Y,不C
  • 日期時間appt T(注意T,不D
  • mass B(注意B,不D
  • 浮動(與數字相同)
  • 一般bin_data G
  • 整數age I
  • 圖片photo P

貨幣,雙,整數,常規和圖片所有的數據存儲爲二進制,而其他的數據存儲爲文本。

+0

如果你看看我的代碼示例,會發現我試圖使用邏輯和備忘錄作爲類型和我得到「在MEMO處停止解析」和「在LOGICAL處停止解析」錯誤。這個問題的原因是爲什麼我得到錯誤,儘管類型支持。 – Alexandr 2012-01-18 06:46:42

+0

@Alexandr:您是否嘗試過使用'L'和'M'而不是'LOGICAL'和'MEMO'? – 2012-01-18 13:22:13

+0

是的,我試過了,但得到了相同的結果:「java.sql.SQLException:語法錯誤:在L停止解析」 – Alexandr 2012-01-20 08:20:02

1

我找不到dbf_jdbc問題的原因。我用javadbf框架來創建一個模板。下面的例子說明它:

File file = new File(filePathName); 
DBFWriter dbfWriter = new DBFWriter(file); 
dbfWriter.setCharactersetName("cp866"); 

DBFField[] fields = new DBFField[ 29 ]; 
fields[ 0 ] = new DBFField(); 
fields[ 0 ].setDataType(DBFField.FIELD_TYPE_L); 
fields[ 0 ].setName("SM"); 
... 
fields[ 19 ] = new DBFField(); 
fields[ 19 ].setDataType(DBFField.FIELD_TYPE_M); 
fields[ 19 ].setName("PRIM");