Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dbf CREATE TABLE抛出java.sql.SQLException:语法错误:在处停止解析_Java_Sql_Database_Dbf - Fatal编程技术网

dbf CREATE TABLE抛出java.sql.SQLException:语法错误:在处停止解析

dbf CREATE TABLE抛出java.sql.SQLException:语法错误:在处停止解析,java,sql,database,dbf,Java,Sql,Database,Dbf,我有一个dbf文件,我可以在视图中看到感兴趣的字段类型是L(我想是逻辑类型)和M(我想是备忘录类型) 我尝试使用dbf_jdbc重新创建dbf模板,如表: private static final String TABLE = "create table SAMPLE ( " + " SM Logical, " + " PRIM MEMO " + ")"; ... String url = "jdbc:DBF:/C:\\TEST"; Conne

我有一个dbf文件,我可以在视图中看到感兴趣的字段类型是L(我想是逻辑类型)和M(我想是备忘录类型)

我尝试使用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时,一切都很好

Dbf_jdbc版本(来自jar清单文件):


所以我的问题是我应该使用哪种sql类型,这样我就可以使用代码创建dbf模板,当我使用dbf查看器打开一个文件时,我可以看到字母M和L作为类型缩写名。

我不知道基于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 )

dBase III文件支持:

  • 字符
    名称C(40)
  • 日期
    出生日期D
  • 逻辑
    成员L
  • 备忘录
    desc M
  • 数值
    速率N(6,2)
类型的第一个字母是您要使用的

此外,其他dbf格式允许:

  • 货币
    价格Y
    (注意
    Y
    ,而不是
    C
  • 日期时间
    appt T
    (注意
    T
    ,而不是
    D
  • 质量B
    (注意
    B
    ,而不是
    D
  • 浮点(与数字相同)
  • 常规
    bin\u数据G
  • 整数
    年龄I
  • 图片
    photo P

Currency、Double、Integer、General和Picture都将数据存储为二进制,而其他的将数据存储为文本。

我无法找到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" );
创建表格示例(“ +“SM位,” +“PRIM longvarchar”+”


早期版本的dbf中Create Table at

的SQL数据类型没有备注字段。您确定,您的版本匹配吗?我添加了版本信息。我在哪里可以找到有关版本和支持的类型的信息?如果您查看我的代码示例,您会发现我正在尝试使用逻辑和备注作为类型,并且我得到了““在备注处停止解析”和“在逻辑处停止解析”错误。这个问题的原因是为什么在支持类型的情况下我总是会收到错误。@Alexandr:您是否尝试过使用
L
m
而不是
逻辑
备注
?是的,我尝试过,但得到了相同的结果:java.sql.SQLException:语法错误:在L“@Alexandr:Huh处停止解析--我没有其他想法。
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" );