Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [java] database

  1. #1

    [java] database

    Ciao a tutti,
    ho un piccolo problemino con JDBC: non riesco ad effettuare una query del tipo "SELECT * FROM info WHERE nickname = ?" dove al posto del "?" devo passare un parametro. Come si fa? Info è una query di unione tra due tabelle.

    io ho provato in 2 modi:
    il primo

    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(ClassNotFoundException pe){
    System.out.println(pe.toString());
    System.out.println("Il driver non può essere caricato");
    }
    try{
    Connection conn = DriverManager.getConnection("jdbcdbc:utentiJChat","","");
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT *FROM info WHERE nickname=\"+nick+"\"");
    while(rs.next()){

    // richiamo i dati con rs.getString("dati");

    }
    }
    catch(SQLException _sql){
    System.out.println(_sql.getMessage());
    _sql.printStackTrace(System.out);
    System.out.println("Problemi di lettura del DB");
    }

    il secondo

    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(ClassNotFoundException pe){
    System.out.println(pe.toString());
    System.out.println("Il driver non può essere caricato");
    }
    try{
    Connection conn = DriverManager.getConnection("jdbcdbc:utentiJChat","","");
    ResultSet rs=null;
    PreparedStatement pstmt= conn.prepareStatement("SELECT * FROM info WHERE nickname = ?");
    pstmt.setString(1,nick);
    rs=pstmt.executeQuery();



    if(rs.getString("visualInfo").equals("si") && rs.getString("autorPosta").equals("si")){
    info=rs.getString("nome")+"¤"+rs.getString("dataNa scita")+"¤"+rs.getString("stato")+"¤"+rs.getString ("prov")+"¤"+rs.getString("citta")+"¤"+rs.getStrin g("mail")+"¤"+rs.getString("segniPart")+"¤"+rs.get String("hobby")+"¤"+rs.getString("autorPosta")+"¤" +rs.getString("visualInfo")+"§"+rs.getString("avat ar");
    }else if(rs.getString("visualInfo").equals("si") && !rs.getString("autorPosta").equals("si")){
    info=rs.getString("nome")+"¤"+rs.getString("dataNa scita")+"¤"+rs.getString("stato")+"¤"+rs.getString ("prov")+"¤"+rs.getString("citta")+"¤"+"Non Autorizzato"+"¤"+rs.getString("segniPart")+"¤"+rs. getString("hobby")+"¤"+rs.getString("autorPosta")+ "¤"+rs.getString("visualInfo")+"§"+rs.getString("a vatar");
    }else if(!rs.getString("visualInfo").equals("si") && rs.getString("autorPosta").equals("si")){
    info="Non Autorizzato"+"¤"+rs.getString("dataNascita")+"¤"+r s.getString("stato")+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+rs.getString("mail")+"¤"+"Non Autorizzato"+"¤"+rs.getString("hobby")+"¤"+rs.getS tring("autorPosta")+"¤"+rs.getString("visualInfo") +"§"+rs.getString("avatar");
    }else if(!rs.getString("visualInfo").equals("si") && !rs.getString("autorPosta").equals("si")){
    info="Non Autorizzato"+"¤"+rs.getString("dataNascita")+"¤"+r s.getString("stato")+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+rs.getString("hobby")+"¤"+rs.getS tring("autorPosta")+"¤"+rs.getString("visualInfo") +"§"+rs.getString("avatar");
    }

    }
    catch(SQLException _sql){
    System.out.println(_sql.getMessage());
    _sql.printStackTrace(System.out);
    System.out.println("Problemi di lettura del DB");
    }

    Cosa sbaglio?

  2. #2
    la seconda soluzione è quella corretta (funziona anche meglio se ad esempio hai dei nick con apostrofi)
    quello che manca è l'istruzione
    while(rs.next())
    subito dopo l'esecuzione dello statement, altrimenti il cursore si troverà prima del primo elemento e quando tenti di leggere i dati verosimilmente ti darà errore
    23-08-2005: Udinese in cémpions lìg
    Questa estate l'ho passata a Tallin

  3. #3
    Grazie l'ho corretta in questo modo ma non va ancora, mi da errore: Data no found!

    private String leggiInfoDb(String nick){
    String info="";
    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(ClassNotFoundException pe){
    System.out.println(pe.toString());
    System.out.println("Il driver non può essere caricato");
    }
    try{
    Connection conn = DriverManager.getConnection("jdbcdbc:utentiJChat","","");
    ResultSet rs=null;
    PreparedStatement pstmt= conn.prepareStatement("SELECT * FROM info WHERE nickname = ?");
    pstmt.setString(1,nick);
    rs=pstmt.executeQuery();
    while(rs.next()){
    if(rs.getString("visualInfo").equals("si") && rs.getString("autorPosta").equals("si")){
    info=rs.getString("nome")+"¤"+rs.getString("dataNa scita")+"¤"+rs.getString("stato")+"¤"+rs.getString ("prov")+"¤"+rs.getString("citta")+"¤"+rs.getStrin g("mail")+"¤"+rs.getString("segniPart")+"¤"+rs.get String("hobby")+"¤"+rs.getString("autorPosta")+"¤" +rs.getString("visualInfo")+"§"+rs.getString("avat ar");
    }else if(rs.getString("visualInfo").equals("si") && !rs.getString("autorPosta").equals("si")){
    info=rs.getString("nome")+"¤"+rs.getString("dataNa scita")+"¤"+rs.getString("stato")+"¤"+rs.getString ("prov")+"¤"+rs.getString("citta")+"¤"+"Non Autorizzato"+"¤"+rs.getString("segniPart")+"¤"+rs. getString("hobby")+"¤"+rs.getString("autorPosta")+ "¤"+rs.getString("visualInfo")+"§"+rs.getString("a vatar");
    }else if(!rs.getString("visualInfo").equals("si") && rs.getString("autorPosta").equals("si")){
    info="Non Autorizzato"+"¤"+rs.getString("dataNascita")+"¤"+r s.getString("stato")+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+rs.getString("mail")+"¤"+"Non Autorizzato"+"¤"+rs.getString("hobby")+"¤"+rs.getS tring("autorPosta")+"¤"+rs.getString("visualInfo") +"§"+rs.getString("avatar");
    }else if(!rs.getString("visualInfo").equals("si") && !rs.getString("autorPosta").equals("si")){
    info="Non Autorizzato"+"¤"+rs.getString("dataNascita")+"¤"+r s.getString("stato")+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+rs.getString("hobby")+"¤"+rs.getS tring("autorPosta")+"¤"+rs.getString("visualInfo") +"§"+rs.getString("avatar");
    }
    }
    }
    catch(SQLException _sql){
    System.out.println(_sql.getMessage());
    _sql.printStackTrace(System.out);
    System.out.println("Problemi di lettura del DB");
    }

    return info;
    }
    -----------------------------------------------------------------

    i campi "visualInfo" e "autorPosta" sono campi boolean che Access descrive come Si/No. E' giusto fare i controlli come ho fatto io?

  4. #4
    Siccome sono dei campi boolean, puoi utilizzare il metodo getBoolean, in modo che si prende il dato nativo
    Non ha senso fare il controllo sulla stringa sì/no, perchè quella è la rappresentazione a video del dato (Access potrebbe anche memorizzarlo come intero)

    A parte questo dettaglio, il tutto mi sembra corretto, magari potresti mettere in rilievo la riga alla quale ti dà errore,
    e assicurarti che ci siano dati validi
    23-08-2005: Udinese in cémpions lìg
    Questa estate l'ho passata a Tallin

  5. #5
    Grazie non ci avevo pensato al getBoolean!!!
    Ci Provo subito.

  6. #6
    Ho modificato i getString in getBoolean all'interno de controlli ma mi da questi errori in esecuzione:

    No data found
    java.sql.SQLException: No data found
    at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java :6287)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(JdbcOdbc. java:3211)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Jdb cOdbcResultSet.jav
    :5434)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(JdbcOdbcRes ultSet.java:571)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getBoolean(JdbcOdb cResultSet.java:43
    )
    at sun.jdbc.odbc.JdbcOdbcResultSet.getBoolean(JdbcOdb cResultSet.java:44
    )
    at NetServer.leggiInfoDb(JChatServer.java:155)
    at NetServer.access$300(JChatServer.java:6)
    at NetServer$ConnessioneClient.run(JChatServer.java:2 99)
    at java.lang.Thread.run(Thread.java:536)
    Problemi di lettura del DB
    java.lang.ArrayIndexOutOfBoundsException
    at NetServer$ConnessioneClient.run(JChatServer.java:3 01)
    at java.lang.Thread.run(Thread.java:536)

    ----------------------------------------------------------------------

    Sai che vuol dire?

  7. #7
    sei sicuro che ci siano i dati all'interno dei campi?
    e poi potresti visualizzare la riga dell'errore? la VM ha detto che l'errore si trova alla riga 155, ma io non so qual è
    se magari la metti si riesce a capire di + ...
    23-08-2005: Udinese in cémpions lìg
    Questa estate l'ho passata a Tallin

  8. #8
    scusa non avevo capito cosa intendevi...

    La riga 155 è il primo else if

    ---------------------------------------------------------------------
    private String leggiInfoDb(String nick){
    String info="";
    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(ClassNotFoundException pe){
    System.out.println(pe.toString());
    System.out.println("Il driver non può essere caricato");
    }
    try{
    Connection conn = DriverManager.getConnection("jdbcdbc:utentiJChat","","");
    ResultSet rs=null;
    PreparedStatement pstmt= conn.prepareStatement("SELECT * FROM info WHERE nickname = ?");
    pstmt.setString(1,nick);
    rs=pstmt.executeQuery();
    while(rs.next()){
    if(rs.getBoolean("visualInfo") && rs.getBoolean("autorPosta")){
    info=rs.getString("nome")+"¤"+rs.getString("dataNa scita")+"¤"+rs.getString("stato")+"¤"+rs.getString ("prov")+"¤"+rs.getString("citta")+"¤"+rs.getStrin g("mail")+"¤"+rs.getString("segniPart")+"¤"+rs.get String("hobby")+"¤"+rs.getString("autorPosta")+"¤" +rs.getString("visualInfo")+"§"+rs.getString("avat ar");
    (155) }else if(rs.getBoolean("visualInfo") && !rs.getBoolean("autorPosta")){
    info=rs.getString("nome")+"¤"+rs.getString("dataNa scita")+"¤"+rs.getString("stato")+"¤"+rs.getString ("prov")+"¤"+rs.getString("citta")+"¤"+"Non Autorizzato"+"¤"+rs.getString("segniPart")+"¤"+rs. getString("hobby")+"¤"+rs.getString("autorPosta")+ "¤"+rs.getString("visualInfo")+"§"+rs.getString("a vatar");
    }else if(!rs.getBoolean("visualInfo") && rs.getBoolean("autorPosta")){
    info="Non Autorizzato"+"¤"+rs.getString("dataNascita")+"¤"+r s.getString("stato")+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+rs.getString("mail")+"¤"+"Non Autorizzato"+"¤"+rs.getString("hobby")+"¤"+rs.getS tring("autorPosta")+"¤"+rs.getString("visualInfo") +"§"+rs.getString("avatar");
    }else if(!rs.getBoolean("visualInfo") && !rs.getBoolean("autorPosta")){
    info="Non Autorizzato"+"¤"+rs.getString("dataNascita")+"¤"+r s.getString("stato")+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+"Non Autorizzato"+"¤"+rs.getString("hobby")+"¤"+rs.getS tring("autorPosta")+"¤"+rs.getString("visualInfo") +"§"+rs.getString("avatar");
    }
    }
    }
    catch(SQLException _sql){
    System.out.println(_sql.getMessage());
    _sql.printStackTrace(System.out);
    System.out.println("Problemi di lettura del DB");
    }

    return info;
    }

    ---------------------------------------------------------------------

  9. #9
    non so, a prima vista sembrerebbe tutto a posto
    23-08-2005: Udinese in cémpions lìg
    Questa estate l'ho passata a Tallin

  10. #10
    Grazie lo stesso, ma ho risolto il problema facendo i controlli al di fuori di questa funzione perchè mi sono accorto che se li eliminavo e richiedevo solo i dati tutto funzionava.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.