2017-07-06 1 views
0

Je suis en train d'implémenter un morceau de code pour un projet utilisant eclipse. L'une des fonctionnalités que je suis invité à faire est de savoir s'il y a deux valeurs dans une table de base de données (créée avec h2). Tout cela doit être implémenté en utilisant des classes DAO et une classe Manager qui passe entre les classes principale et DAO. Mon problème est que, ce faisant, une exception est toujours levée qui me dit que la table "liste des paquets" n'a pas été trouvée. Mais cela ne peut pas être parce que:org.h2.jdbc.JdbcSQLException: Tableau "PACCHETTIVISITETURISTICHE" introuvable; Instruction SQL:

  • Je l'ai vérifié dans la base de données et il y a la table
  • La base de données a été correctement connecté avec Eclipse
  • Si je mets en œuvre toutes les fonctions dans la principale la table est reconnu!

Ce sont les classes:

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

public class DaoPacchetti { 


public static boolean Ricerca(String citta, String periodo) throws SQLException{ 
    boolean verifica=false; 
    PreparedStatement stat=null; 
    ResultSet rs=null; 
    Connection con=null; 


    con= DBManager.getConnection(); 
    stat=con.prepareStatement("SELECT * FROM pacchettivisiteturistiche " 
      + " WHERE citta=? AND disponibilitaSottoscrizione=?"); 
    stat.setString(1, citta); 
    stat.setString(2, periodo); 
    rs=stat.executeQuery(); 
    if(rs.next()){ 
     verifica=true; 
    } 

    //rs.close(); 
    //stat.close(); 
    con.close(); 
    return verifica; 

    } 
} 

Classe Manager:

import dao.DaoPacchetti; 
//import dao.DAOException; 
import java.sql.SQLException; 



public class GestorePacchetti { 

private static GestorePacchetti istance; 

public static GestorePacchetti getIstance() { 
    if (istance == null) 
     istance = new GestorePacchetti(); 
    return istance; 
} 

public boolean RicercaPacchetto(String citta,String periodo){ 
    boolean trovato=false; 
    try{ 
    trovato=DaoPacchetti.Ricerca(citta, periodo); 
    return trovato; 
    } 
    catch(SQLException e){ 
     System.err.println("errore nella ricerca del pacchetto"); 
     e.printStackTrace(); 
    } 

    return trovato; 
} 
} 

Classe principale:

import pacchetti.GestorePacchetti; 
import java.util.Scanner; 

public class Terminale { 

public static void main(String[] args) { 


    boolean trovato; 
    String citta; 
    String codice_pacchetto; 
    String data; 
    String nPartecipantistringa; 
    int nPartecipanti; 

    GestorePacchetti g= GestorePacchetti.getIstance(); 

System.out.println("immetti la città e la data per la ricerca del pacchetto 
delle visite turistiche"); 

    Scanner input = new Scanner(System.in); 

    do{ 
     System.out.println("immetti prima la citta"); 
     citta = input.nextLine(); 
     System.out.println("ora immetti la data"); 
     data=input.nextLine(); 

     trovato=g.RicercaPacchetto(citta, data); 


     if(trovato==false) 
     System.out.println("Reinserire i parametri per favore"); 
    }while(trovato==false); 

    System.out.println("Trovato!!"); 

} 

} 

J'écris aussi la fonction principale qui contient l'ensemble de la fonction sans invoquer d'autres classes (ici la table est reconnue):

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.Scanner; 


public class Main { 

public static void main(String[] args) throws Exception{ 

    boolean trovato; 
    String citta; 
    String codice_pacchetto; 
    String data; 
    String nPartecipantistringa; 
    int nPartecipanti; 

    GestoreVisiteTuristiche g= new GestoreVisiteTuristiche(); 

    System.out.println("immetti la città e la data per la ricerca del 
    pacchetto delle visite turistiche"); 

    Scanner input = new Scanner(System.in); 


     System.out.println("immetti prima la citta"); 
     citta = input.nextLine(); 
     System.out.println("ora immetti la data"); 
     data=input.nextLine(); 

     Connection con=null; 
     PreparedStatement stat=null; 
     ResultSet rs=null; 

     try{ 


     con=DBManager.getConnection(); 
     stat=con.prepareStatement("SELECT * FROM PacchettiVisiteTuristiche P 
" 
       + "WHERE ?=P.citta AND ?=P.disponibilitaSottoscrizione"); 
     stat.setString(1, citta); 
     stat.setString(2, data); 
     rs=stat.executeQuery(); 

     if(rs.next()){ 
      System.out.println("trovato!!"); 
      citta=rs.getString("citta"); 
      data=rs.getString("disponibilitaSottoscrizione"); 
      System.out.println(citta+" "+data); 
     } 
     else{ 
      System.out.println("errore, nessuna corrispondenza"); 
     } 

     rs.close(); 
     stat.close(); 
     } 
     catch(Exception e){System.out.println("errore");} 
     finally { 
      if (con != null) { 
     try { 
      con.close(); 
     } catch (SQLException e){} 
     } 
     } 





} 
} 

DBManager Classe:

import java.sql.Connection; 


public class DBManager { 
protected static Connection conn; 

final protected static ConnectionFactory CONNECTION_FACTORY=new 
H2ConnectionFactory(); 

public static Connection getConnection(){ 
    if (conn == null) { 
     try { 
      conn = CONNECTION_FACTORY.createConnection(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    return conn; 

} 
} 

ConnectionFactory:

public interface ConnectionFactory { 
java.sql.Connection createConnection() throws Exception; 
} 

import java.sql.DriverManager; 


public class H2ConnectionFactory implements ConnectionFactory { 

protected final static String DB_PATH= "./test"; 
protected final static String CONNECTION_STRING = "jdbc:h2:" + DB_PATH ; 


@Override 
public java.sql.Connection createConnection() throws Exception { 
    Class.forName("org.h2.Driver"); 
    return DriverManager.getConnection(CONNECTION_STRING, "sa", "12345"); 
} 
} 

Ceci est l'exception soulevée:

org.h2.jdbc.JdbcSQLException: Table "PACCHETTIVISITETURISTICHE" not found; 
SQL statement: 
SELECT * FROM pacchettivisiteturistiche WHERE citta=? AND 
disponibilitaSottoscrizione=? [42102-195] 
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 
at org.h2.message.DbException.get(DbException.java:179) 
at org.h2.message.DbException.get(DbException.java:155) 
at org.h2.command.Parser.readTableOrView(Parser.java:5506) 
at org.h2.command.Parser.readTableFilter(Parser.java:1260) 
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1940) 
at org.h2.command.Parser.parseSelectSimple(Parser.java:2089) 
at org.h2.command.Parser.parseSelectSub(Parser.java:1934) 
at org.h2.command.Parser.parseSelectUnion(Parser.java:1749) 
at org.h2.command.Parser.parseSelect(Parser.java:1737) 
at org.h2.command.Parser.parsePrepared(Parser.java:448) 
at org.h2.command.Parser.parse(Parser.java:320) 
at org.h2.command.Parser.parse(Parser.java:292) 
at org.h2.command.Parser.prepareCommand(Parser.java:257) 
at org.h2.engine.Session.prepareLocal(Session.java:573) 
at org.h2.engine.Session.prepareCommand(Session.java:514) 
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1204) 
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73) 
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288) 
at dao.DaoPacchetti.Ricerca(DaoPacchetti.java:22) 
at pacchetti.GestorePacchetti.RicercaPacchetto(GestorePacchetti.java:21) 
at ui.Terminale.main(Terminale.java:30) 
+0

assurez-vous que vous ne devez pas utiliser 'schemaName.TableName' et vous avez mentionné bonne base de données –

+0

J'ai essayé le faire aussi, mais la situation ne change pas –

+0

votre message DBManager classe –

Répondre

-1

jdbc:h2:~/test","sa","password"OUjdbc:h2:file:~/test;USER=sa;PASSWORD=password

essayer une de ces chaînes de connexion.

0

D'accord, mais je ne suis pas sûr que l'erreur est h Parce que dans la classe principale où la fonction fonctionne, j'utilise la même classe DBManager. Ceci est mon DBManager Classe:

import java.sql.Connection; 


public class DBManager { 
protected static Connection conn; 

final protected static ConnectionFactory CONNECTION_FACTORY=new 
H2ConnectionFactory(); 

public static Connection getConnection(){ 
    if (conn == null) { 
     try { 
      conn = CONNECTION_FACTORY.createConnection(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    return conn; 

} 
} 

Ceci est l'interface et la classe de la ConnectorFactory:

public interface ConnectionFactory { 
java.sql.Connection createConnection() throws Exception; 
} 

import java.sql.DriverManager; 


public class H2ConnectionFactory implements ConnectionFactory { 

protected final static String DB_PATH= "./test"; 
protected final static String CONNECTION_STRING = "jdbc:h2:" + DB_PATH ; 


@Override 
public java.sql.Connection createConnection() throws Exception { 
    Class.forName("org.h2.Driver"); 
    return DriverManager.getConnection(CONNECTION_STRING, "sa", "12345"); 
} 
} 
+0

' jdbc: h2: ~/test » , "sa", "mot de passe" '** OU **' jdbc: h2: fichier: ~/test; USER = sa; PASSWORD = mot de passe J'ai utilisé l'une de ces chaînes de connexion –

+0

J'ai utilisé "jdbc: h2: ~/test "au lieu de CONNECTION_STRING et cela a fonctionné Comment c'est possible ??? –

+0

problème est avec ça'.'only :) –