我有一个名为[Elenco_Aziende]的表,我从中提取结果集中的所有记录。 [Elenco_Aziende]与其他两个名为[Elenco_Autisti]和[Elenco_Veicoli]的表通过名为[Partita_IVA_Azienda]的字段处于一对多关系中,该字段也是[Elenco_Aziende]表中的主键。
从[Elenco_Aziende]中提取所有记录后,我为[Partita_IVA_Azienda]的每个值执行一个循环,然后打开一个新的结果集,尝试读取[Elenco_Autisti]和[Elenco_Veicoli]表的相关字段中的值,并为每个他们的一些操作。
这就是奇怪的事情:只要[Partita_IVA_Azienda](在Access数据库中被定义为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条记录)。
答案 0 :(得分:0)
根据我对SQL的了解,我应该用撇号写下带有文本字段的WHERE:
String qryautisti = "SELECT * FROM Elenco_Autisti WHERE Partita_IVA_Azienda='"
+ partitaivazienda + "'";