firebird嵌入模式中的碎片行
我正在做这个代码,并发生了一些奇怪的事情。 我从外部文件进行批量插入。但结果只是支离破碎,或者可能已经损坏。firebird嵌入模式中的碎片行
cnx=factoryInstace.getConnection();
pstmt = cnx.prepareStatement("DELETE FROM TEMPCELULAR");
pstmt.executeUpdate();
pstmt = cnx.prepareStatement("EXECUTE BLOCK AS BEGIN if (exists(select 1 from rdb$relations where rdb$relation_name = 'EXT_TAB')) then execute statement 'DROP TABLE EXT_TAB;'; END");
pstmt.executeUpdate();
pstmt = cnx.prepareStatement("CREATE TABLE EXT_TAB EXTERNAL '"+txtarchivoProcesar.getText()+"'(CELULAR varchar(11))");
pstmt.executeUpdate();
pstmt = cnx.prepareStatement("INSERT INTO TEMPCELULAR (CELULAR)SELECT CELULAR FROM EXT_TAB");
pstmt.executeUpdate();
pstmt = cnx.prepareStatement("SELECT CELULAR FROM TEMPCELULAR");
ResultSet rs=pstmt.executeQuery();
while(rs.next()){
System.out.println("::"+rs.getString(1));
}
而现在,突然对我表中的行看起来是这样的:
::[email protected]
::[email protected]
::m
[email protected]
::.com
[email protected]
::ail.com
ab
::@gmail.com
::[email protected]
::[email protected]
::com
[email protected]
::il.com
abc
::gmail.com
::[email protected]
::
结果之间的空白不是由我做的。这是结果。对于外部表
源文件:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
¿什么是错我的代码?
我已经多年没见过这个怪人的结果。 数据库是在第一次运行时为用户pc创建的。因此,每当我运行程序时都在生产中。
任何帮助,将不胜感激。
在火鸟外部表文件不只是一个纯文本文件,它是一个固定宽度的格式有特殊要求的内容和布局。见海伦·博里281-287页Interbase的6.0数据定义指南,107-111页(提供下载http://www.firebirdsql.org/en/reference-manuals/)或火鸟书。
我看到现在的问题是:
- 您在外部表声明列是VARCHAR(11), 而在你的文件最短EMAILADDRESS是13个字符,则 最长为21字符,所以火鸟将永远无法从文件
- 阅读 全EMAILADDRESS你没有指定你的换行符一个单独的列,所以你 换行符只会是被读取数据的一部分
- 你有德clared柱为VARCHAR,这需要记录 有一个非常特殊的格式,其中前两个字节声明其次是长度的字符串 的实际数据长度(而且当时 只读取高达的声明长度柱)。要么确保 您按照VARCHAR列的要求,或者干脆使用 CHAR数据类型,并确保你垫柱高达的 声明的长度空间。
我不是100%确定的,但是您的默认数据库字符集也可能涉及数据的读取方式。
你能否提供示例文件?看来你准备查询的方式是错误的
也许你可以分割的步骤,每一个经过检查,第一次将文件读取,文件插入,然后如果你想要更多的从数据库中选择
主要支持列表帮助是火鸟支持和Firebird的Java
实例文件位于底部:“外部表的源文件”。这是一个纯文本文件。我已经查询了每个查询,并且在创建外部表的部分出错:“CREATE TABLE EXT_TAB EXTERNAL'”+ txtarchivoProcesar.getText()+“'(CELULAR varchar(11))”。外部表输出根据数据类型和长度而不同,因此如果将varchar(300)或varchar(50)放在一起,那么输出会有很大差异。啧啧,我的意思是在我与我的老板进行演示之前的一个小时,这个工作正常... – jRam90 2012-08-03 14:30:01
由于我工作地点的网络限制,我只是无法进入邮件列表。 – jRam90 2012-08-03 14:36:52
您可以通过发送电子邮件到您的工作地址,通过发送电子邮件到[email protected] – 2012-08-04 17:52:53
我非常惊讶,这段代码在我的老板发表演讲前一小时工作完美。 – jRam90 2012-08-04 22:08:57
有了这个确切的代码,你总是会丢失任何字符串的前2个字符。 – 2012-08-05 08:14:38
我坚信外部表格查询应该更加详细,它应该支持不同的标记,变量长度或更多的档案,如.xls(x)文件等等。我该如何推荐给开发者? – jRam90 2012-08-14 15:40:55