dbf CREATE TABLE throws java.sql.SQLException: синтаксическая ошибка: остановлен синтаксический анализ в - PullRequest
1 голос
/ 16 января 2012

У меня есть файл dbf, и я вижу в представлении, что типы интересующих полей: L (я полагаю, это логический тип) и M (я полагаю, это тип Memo)

Я пытаюсьпересоздайте шаблон dbf, используя dbf_jdbc, например таблицу:

 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, все этонормально.

Версия 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 как короткие имена типов.

Ответы [ 4 ]

2 голосов
/ 23 января 2012

создать таблицу SAMPLE (" + "SM BIT" + "ПРИМ Лонгварчар" + ")";

Типы данных SQL для создания таблицы в http://www.hxtt.com/dbf/sqlsyntax.html#createtable

1 голос
/ 18 января 2012

Я не смог найти причину проблемы с 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" );
0 голосов
/ 18 января 2012

Поддержка файлов dBase III:

  • Char name C(40)
  • Дата birth D
  • Логический member L
  • Памятка desc M
  • Числовой rate N(6, 2)

Первая буква типа - это то, что вы хотите использовать.

Кроме того, другие форматы DBF позволяют:

  • Валюта price Y (примечание Y, а не C)
  • DateTime appt T (примечание T, а не D)
  • Двойной mass B (примечание B, а не D)
  • Число с плавающей запятой (аналогично Числовому)
  • Общая информация bin_data G
  • Целое число age I
  • Изображение photo P

Валюта, Double, Integer, General и Picture хранят данные в двоичном виде, в то время как остальные хранят данные в виде текста.

0 голосов
/ 17 января 2012

Я не знаю о драйвере dbc на основе Java, но подразумеваемая сокращенная версия - просто использовать "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 )
...