dbf CREATE TABLE抛出java.sql.SQLException:语法错误:在处停止解析
我有一个dbf文件,我可以在视图中看到感兴趣的字段类型是L(我想是逻辑类型)和M(我想是备忘录类型) 我尝试使用dbf_jdbc重新创建dbf模板,如表: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
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)
- 货币
(注意价格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" );