UCanAccess 数据异常:数值超出范围
Posted
技术标签:
【中文标题】UCanAccess 数据异常:数值超出范围【英文标题】:UCanAccess data exception: numeric value out of range 【发布时间】:2015-10-04 15:07:03 【问题描述】:我有一个名为 [Elenco_Aziende] 的表,我从中提取结果集中的所有记录。 [Elenco_Aziende] 通过一个名为 [Partita_IVA_Azienda] 的字段与另外两个名为 [Elenco_Autisti] 和 [Elenco_Veicoli] 的表存在一对多关系,该字段也是 [Elenco_Aziende] 表中的主键。
从 [Elenco_Aziende] 中提取所有记录后,我为 [Partita_IVA_Azienda] 的每个值执行一个循环,然后打开一个新结果集以尝试读取 [Elenco_Autisti] 和 [Elenco_Veicoli] 表的相关字段中的值并为每个表执行其中一些操作。
奇怪的事情来了:只要 [Partita_IVA_Azienda](在 Access DB 中定义为 Text
字段)值都是相同的长度,当我尝试读取 [Elenco_Autisti] 和 [ Elenco_Veicoli] 表,但如果某些 [Partita_IVA_Azienda] 的长度不同,则出现错误:
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.1 数据异常:数值超出范围
更准确地说是嵌套循环场景:
Connection con = DriverManager.getConnection("jdbc:ucanaccess://"
+ filepath);
String qry = "SELECT * FROM Elenco_Aziende";
ResultSet rs = stmt.executeQuery(qry);
String cognometest = "";
String nometest ="";
while (rs.next())
String partitaiva = "Partita IVA: "
+ rs.getString("Partita_IVA_Azienda") + "\n\r";
String partitaivazienda = rs.getString("Partita_IVA_Azienda");
Statement stmtautisti = con.createStatement();
System.out.println("Sto per eseguire la query per partita iva azienda = " + partitaivazienda + "\n\r");
String qryautisti = "SELECT * FROM Elenco_Autisti WHERE Partita_IVA_Azienda="
+ partitaivazienda; /*!!!!! AND HERE WHEN I EXECUTE NEXT QUERY IS WHERE I GET THE EXCEPTION net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.1 data exception: numeric value out of range more!!!!!*/
ResultSet rsautisti = stmtautisti.executeQuery(qryautisti);
while (rsautisti.next())
do something here
Statement stmtveicoli = con.createStatement();
String qryveicoli = "SELECT * FROM Elenco_Veicoli WHERE Partita_IVA_Azienda="
+ rs.getString("Partita_IVA_Azienda");
ResultSet rsveicoli = stmtveicoli.executeQuery(qryveicoli);
while (rsveicoli.next())
do something else here
只要我执行查询就可以了
String qryautisti = "SELECT * FROM Elenco_Autisti WHERE Partita_IVA_Azienda="+ partitaivazienda;
对于 [Partita_IVA_Azienda] 的不同长度值,我得到了问题。
我什至尝试以逗号分隔值导出数据库,然后以全新的值重新导入它,但没有帮助。此外,问题似乎只发生在表 [Elenco_Autisti](138 条记录)和 [Elenco_Veicoli](287 条记录)中的大量记录上,而少量记录似乎不会发生。 [Elenco_Aziende] 很小(不超过 10 条记录)。
【问题讨论】:
是否可以显示partitaivazienda
的所有值?我想你在这里可能是一个非常大的数字。
对于 文本字段 是否真的会出现“数值超出范围”这样的消息?您不必在 SELECT 语句中为字符串使用引号吗?
如果你只使用准备好的语句......
【参考方案1】:
根据我对 SQL 的了解,一个带有文本字段的 WHERE 应该用撇号中的值编写:
String qryautisti = "SELECT * FROM Elenco_Autisti WHERE Partita_IVA_Azienda='"
+ partitaivazienda + "'";
【讨论】:
@Alf 最好还是使用PreparedStatement
和参数化查询。以上是关于UCanAccess 数据异常:数值超出范围的主要内容,如果未能解决你的问题,请参考以下文章
从 Netezza 数据库创建 SAS 数据集时,SAS“CLI 游标扩展提取错误:数值超出范围”
PDO PHP - PDOException - 数值超出范围:1264 第 1 行的列“customer_id”的值超出范围