我正在做这个代码,发生了一些奇怪的事情。 我从外部文件中进行批量插入。但结果是它只是支离破碎,或者可能已经损坏。
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));
}
现在,我桌子上的行突然看起来像这样:
::c@gmail.com
::abc2@gmail.
::m
abc3@gma
::.com
abc4@
::ail.com
ab
::@gmail.com
::bc6@gmail.c
::abc7@gmai
::com
abc8@g
::il.com
abc
::gmail.com
::c10@gmail.c
::
结果之间的空白不是我做的。结果就是这样。
外部表的源文件:
abc@gmail.com
abc2@gmail.com
abc3@gmail.com
abc4@gmail.com
abc5@gmail.com
abc6@gmail.com
abc7@gmail.com
abc8@gmail.com
abc9@gmail.com
abc10@gmail.com
sneciosup@hotmail.com
¿我的代码出了什么问题?
多年来我没有看到这种怪异的结果。 数据库是在第一次运行时由用户pc创建的。因此,每次我运行程序时都在生产中。
任何帮助,将不胜感激。
答案 0 :(得分:0)
你能提供示例文件吗?似乎你准备查询的方式是错误的
也许你可以拆分步骤并检查每一步,首先是文件读取,文件插入然后从数据库中选择
如果您需要更多帮助,主要支持列表是Firebird支持和Firebird-Java
答案 1 :(得分:0)
Firebird中的外部表文件不仅仅是一个纯文本文件,它是一种固定宽度的格式,对内容和布局有特殊要求。请参阅 Interbase 6.0数据定义指南,第107-111页(可从http://www.firebirdsql.org/en/reference-manuals/下载)或 The Firebird Book ,作者:Helen Borrie,第281-287页。< / p>
我现在看到的问题是:
我不是百分百确定,但您的默认数据库字符集也可能涉及数据的读取方式。