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

    java : ricerca in Firebird

    Ciao a tutti , sono alle "seconde armi" con il linguaggio Java e mi trovo con questo problema ;
    Faccio una ricerca con qualche left join e, mentre dal prompt di DOS mi risponde restituendomi i dati richiesti,implementando la cosa in Java e, sorpreso, dopo aver messo una System.out.prinln("Res",+res) mi restituisce res=false!!!
    Vi posto la query che faccio dal prompt ed il pezzo di codice ...
    Grazie in anticipo

    SELECT fcpro,fcnpi,gpdes,d4des,d4de1,d4de2 FROM CLIENT left join gespag on gpcod='RD00' left join destin on (d4cod='00000867' and d4ser=0) WHERE fccod=00000867;

    try
    {
    query = "SELECT fcpro,fcnpi,gpdes,d4des,d4de1,d4de2 FROM CLIENT left join gespag on gpcod='"+sCpg+"' left join destin on (d4cod='"+sCli+"' and d4ser="+sDest+") WHERE fccod="+sCli+"";
    System.out.println("Faccio "+query);
    String sDriver = ("jdbc:firebirdsql:127.0.0.1/3050:" + sPathDB);
    Driver drv = null;
    Connection conn = null;
    Statement stm = null;
    ResultSet res = null;
    try {
    Class.forName("org.firebirdsql.jdbc.FBDriver");
    }
    catch (ClassNotFoundException ex) {
    ex.printStackTrace();
    }
    conn = DriverManager.getConnection(sDriver, DB_USER, DB_PASS);
    stm = conn.createStatement();
    res = stm.executeQuery(query);
    System.out.println("Res "+res.next());
    while (res.next())
    {
    System.out.println("Ho trovato il record");
    ++trovato;
    sPro = res.getString("fcpro");
    sPiva= res.getString("fcnpi");
    sPaga = res.getString("gpdes");
    sDe1 = res.getString("d4des");
    sDe2 = res.getString("d4de1");
    sDe3 = res.getString("d4de2");
    System.out.println("Dati "+sCli+" "+sDesCli+" "+sInd+" "+sCit+" "+sPro+" "+sPaga);
    break;
    }
    res.close();
    stm.close();
    conn.close();
    }
    catch (SQLException e) {}

    Tutte le variabili nonchè il sPath sono ampiamente esatti ...

  2. #2
    Al di là dell'implementazione del codice e il modo non molto corretto di chiudere la connessione al DB (se c'è una Exception tra l'apertura della connessione e il conn.close() lasci la connessione aperta), ho notato che intercetti la SQLException ignorandola...
    può darsi che viene lanciata quella eccezione e ignorandola non sai se effettivamente c'è stata.
    Per sicurezza togli tutti quei try catch e mettine uno unico in tutto il codice catchando Exception e facendo printStackTrace() così vediamo qualsiasi errore ci fosse stato...
    poi non creare un normale Statement, usa i PreparedStatement facendo
    codice:
     PreparedStatement pstm = conn.prepareStatement(String query);
    e poi executeQuery su pstm
    Implementa la stringa query dove, invece di settare i parametri manualmente inserendoli direttamente nella stringa, metti dei punti interrogativi ed li imposti tramite pstm.setString setInt ecc... (se non sai come fare segui qualche tutorial su JDBC PreparedStatement... mandare i parametri direttamente nella query non è proprio corretto...

    cmq l'output che ti avrebbe dovuto dare non è "res=false" ma "Res false"... se è così allora la query non ha restituito risultati, forse proprio perchè mandi i parametri direttamente nella stringa.

    Cmq per capire meglio fai queste modifiche al codice.
    lolide
    Java Programmer

    Informati

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    11
    Innanzitutto grazie per la risposta,ed approfitto per chiederti come posso implementere le tue indicazioni nel pezzo di codice che ti ho postato.
    Ovviamente andrò a farmi una lettura su quel tutorial ...
    grazie ancora

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    11

    Ricerca in Firebird

    Ho seguito l'indicazione di lolide, che ringrazio, ma temo di non aver capito . Ad ogni modo ho modificato il codice precendentemente postato in :
    Connection con = null;
    PreparedStatement prest;
    try
    {
    Class.forName("org.firebirdsql.jdbc.FBDriver");
    String sDriver = ("jdbc:firebirdsql:127.0.0.1/3050:" + sPathDB);
    con = DriverManager.getConnection(sDriver, DB_USER, DB_PASS);
    try
    {
    String sql = "SELECT * FROM client WHERE fccod = ?";
    prest = con.prepareStatement(sql);
    prest.setString(1,"+sCli+");
    ResultSet rs1 = prest.executeQuery();
    System.out.println("Rs1"+rs1.next());
    while (rs1.next())
    {
    System.out.println("Entrato");
    String mov_name = rs1.getString(1);
    String mov_name1 = rs1.getString(2);
    String mov_name2 = rs1.getString(3);
    String mov_name3 = rs1.getString(4);
    System.out.println(""+mov_name+" "+mov_name1+" "+mov_name2+" "+mov_name3);
    }
    }
    catch (SQLException s)
    {
    System.out.println("SQL statement is not executed!");
    }
    }
    catch (Exception e){
    e.printStackTrace();
    }
    ma non cambia nulla ...

  5. #5
    Intanto è sbagliato il modo in cui setti il parametro della query.
    fccode che tipo di dato è? Una varchar oppure un intero? Se è una stringa non devi usare
    prest.setString(1,"+sCli+"); visto che così setti il parametro con valore stringa "+sCli+" , devi usare
    prest.setString(1,sCli);
    Se poi è un intero allora devi usare setInt non setString.
    lolide
    Java Programmer

    Informati

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.