Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132

    quest su database e carattere ' (apice)

    Ciao a tutti, ho un problema stupido ma fastidioso :
    Ho un'applicazione con database che gestisco con Apache Derby.
    quando eseguo delle query (sotto posto un esempio di query) , il sistema si blocca in corrispondenza del carattere ' , suppongo perchè viene considerato sintassi della query e non della stringa estratta.
    Ho pensato di sostituire tutti i ' nel database con un altro carattere, che poi trasformerò di nuovo dopo la lettura, ma è laborioso, devo splittare tutte le stringhe.

    Qualche idea ?

    codice:
    String QueryString2 = "SELECT * from APP.CALIBRO";
                ResultSet rs2 = null;
                rs2 = exe.executeQuery(QueryString2);
                int cont2=0;
            while (rs2.next()) {
                Listino_111View.JVcalibroDb[cont2][0]=rs2.getString(1);
                Listino_111View.JVcalibroDb[cont2][1]=rs2.getString(2);
                Listino_111View.JVcalibroDb[cont2][2]=rs2.getString(3);
                cont2=cont2+1;
                }

    Grazie.

  2. #2

    Re: quest su database e carattere ' (apice)

    Originariamente inviato da andreu
    Ciao a tutti, ho un problema stupido ma fastidioso :
    Ho un'applicazione con database che gestisco con Apache Derby.
    quando eseguo delle query (sotto posto un esempio di query) , il sistema si blocca in corrispondenza del carattere ' , suppongo perchè viene considerato sintassi della query e non della stringa estratta.
    Ho pensato di sostituire tutti i ' nel database con un altro carattere, che poi trasformerò di nuovo dopo la lettura, ma è laborioso, devo splittare tutte le stringhe.

    Qualche idea ?

    codice:
    String QueryString2 = "SELECT * from APP.CALIBRO";
                ResultSet rs2 = null;
                rs2 = exe.executeQuery(QueryString2);
                int cont2=0;
            while (rs2.next()) {
                Listino_111View.JVcalibroDb[cont2][0]=rs2.getString(1);
                Listino_111View.JVcalibroDb[cont2][1]=rs2.getString(2);
                Listino_111View.JVcalibroDb[cont2][2]=rs2.getString(3);
                cont2=cont2+1;
                }

    Grazie.
    Non ho capito dove sta l'apice in quell'esempio di query. Poi cosa vuol dire che "Il sistema si blocca"? Ti da un eccezzione? Se è così posta lo stacktrace.
    lolide
    Java Programmer

    Informati

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132
    Si, scusa, sarò più preciso.
    L'apice è contenuto nei record del database (es:fichi d'india)
    L'errore è :
    java.sql.SQLSyntaxErrorException: Errore di sintassi: Encountered "INDIA" at line 1, column 48.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.g etSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLExcep tion(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl .wrapInSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl .handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.handleE xception(Unknown Source)
    at org.apache.derby.impl.jdbc.ConnectionChild.handleE xception(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.execute( Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.executeU pdate(Unknown Source)

    Ho provato a sostituire apice con "£" nel database, ma adesso ho il problema quando vado a sostituire "£" con " ' ".

    codice:
     
     for (int r = 0; r < arrayRow.length; r++)  {
            for (int c = 0; c < arrayCol.length; c++)  {
                if (arrayRow[r][3]==null)  {
                fine=r;
                break;
                }
            for(int i=0; i<arrayRow[r][c].length(); i++){
            char car = arrayRow[r][c].charAt(i);
            if(car=='£'){
            arrayRow[r][c] = arrayRow[r][c].substring(0,i) + ''
            + arrayRow[r][c].substring(i+1);
            }}
    Alla riga arrayRow[r][c] = arrayRow[r][c].substring(0,i) + '' dovrei scrivere :
    arrayRow[r][c] = arrayRow[r][c].substring(0,i) + '''

    ma da errore, insomma l'apice non riesco a farlo accettare come carattere di stringa, viene sempre interpretato come codice.

    Grazie.

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    La query la metti in uno Statement? Lascia perdere e usa PreparedStatement: oltre al problema degli apicetti risolvi un sacco di altre cosine (come SQL injection ecc).
    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
    Nov 2010
    Messaggi
    132
    Mitico, era propio quello il problema : )
    Mi è bastato sostituire la query che riempie i DB, e funziona tutto.

    codice:
    String sql =  "insert INTO APP.SPECIE(COD,DESCRIZIONE,ELIMINATO,GRUPPO)"
                + " values(?, ?, ?, ?)";
                PreparedStatement pstmt = conn.prepareStatement(sql);
        for (int a = 0; a < DATspecieDb.length; a++)  {      
            if (DATspecieDb[a][0]!=null)  {
                pstmt.setString(1, DATspecieDb[a][0]);
                pstmt.setString(2, DATspecieDb[a][1]);
                pstmt.setString(3, DATspecieDb[a][2]);
                pstmt.setString(4, DATspecieDb[a][3]);
                pstmt.executeUpdate();
        }}
    Molte grazie.

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.