UCanAccess数据异常:数值超出范围

时间:2015-10-04 15:07:03

标签: java database exception ucanaccess

我有一个名为[Elenco_Az​​iende]的表,我从中提取结果集中的所有记录。 [Elenco_Az​​iende]与其他两个名为[Elenco_Autisti]和[Elenco_Veicoli]的表通过名为[Partita_IVA_Azienda]的字段处于一对多关系中,该字段也是[Elenco_Az​​iende]表中的主键。

从[Elenco_Az​​iende]中提取所有记录后,我为[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_Az​​iende]很小(不超过10条记录)。

1 个答案:

答案 0 :(得分:0)

根据我对SQL的了解,我应该用撇号写下带有文本字段的WHERE:

String qryautisti = "SELECT * FROM Elenco_Autisti WHERE Partita_IVA_Azienda='"
                    + partitaivazienda + "'";