Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    13

    Eccezione SQL che non capisco

    Salve,
    ho realizzato un'applicazione che accede ad un database mdb. Tramite il relativo metodo eseguo una query del seguente tipo:

    insert into Nometab(campo1, campo2, campo3, campo4) values('val1','val2','val3','val4')

    dove i campi della tabella sono tutti di tipo testo. La query viene eseguita correttamente tranne in quei casi in cui uno dei valori contiene a sua volta un apice o una parentesi perchè chiaramente viengono considerati come apici o parentesi di chiusura.

    Ho provato allora ad eseguire la seguente query tramite access:
    insert into Nometab(campo1, campo2, campo3, campo4) values("val1","val2","val3","val4")

    Il risultato è che su access esegue correttamente la query inserendo nei campi i valori contenti anche apici o parentesi. In java invece, la stessa query sql mi genera questa eccezzione:

    SQLException: [Microsoft][Driver ODBC Microsoft Access] Paramentri insufficienti. Previsto 4.

    Come mai?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Come la fai la query?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    309
    Ciao
    io quando devo inserire stringhe che contengono apici faccio un replace:
    String s= s.replaceAll("'","\\\\'");
    tomcat 6.016
    netbeans 6.1

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da dardo
    Ciao
    io quando devo inserire stringhe che contengono apici faccio un replace:
    String s= s.replaceAll("'","\\\\'");
    E usare PreparedStatement?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    13
    La query la eseguo con questo metodo

    public void executeUpdate(String query){
    Connection con;
    Statement stmt;

    try{
    con = DriverManager.getConnection(url);
    stmt = con.createStatement();
    stmt.executeUpdate(query);
    stmt.close();
    con.close();
    }
    catch(SQLException ex){
    System.err.print("SQLException: ");
    System.err.println(ex.getMessage());
    }
    }


    il replace è una buona soluzione. Potrei sostituire un apice con un doppio apice mentre per le parentesi ho controllato meglio che le accetta comunque.

  6. #6
    Come già ti è stato suggerito usa la classe PreparedStatement che esegue tutti i replace del caso automaticamente:

    Codice PHP:
    try { 
        
    String sql "insert into Nometab(campo1, campo2, campo3, campo4) values(?,?,?,?)";
        
    PreparedStatement pstmt con.prepareStatement(sql);
        
    pstmt.setString(1"val1");
        
    pstmt.setString(2"val2");
        
    pstmt.setString(3"val3");
        
    pstmt.setString(4"val4");

        
    pstmt.executeUpdate(); 

    } catch (
    SQLException e) {
        
    //gestire eccezione

    Al mio segnale... scatenate l'inferno!

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    13
    Grazie mille, mi sembra la soluzione migliore

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.