Java org.h2.jdbc.JdbcSQLException:Table";Pacchetti Visiteturistiche“;未找到;SQL语句:

Java org.h2.jdbc.JdbcSQLException:Table";Pacchetti Visiteturistiche“;未找到;SQL语句:,java,sql,eclipse,jdbc,h2,Java,Sql,Eclipse,Jdbc,H2,我正在使用eclipse为一个项目实现一段代码。 我被要求做的一个特性是找出是否有两个值​​在数据库表中(使用h2创建)。 所有这些都必须通过使用DAO类和在主类和DAO类之间传递的管理器类来实现。 我的问题是,通过这样做,总是会引发一个异常,告诉我没有找到“数据包列表”表。 但这不能是因为: 我在数据库里查过了,有一张表 数据库已与eclipse正确连接 如果我实现了主表中的所有函数,那么表就会被识别 这些是课程: import java.sql.Connection; import ja

我正在使用eclipse为一个项目实现一段代码。 我被要求做的一个特性是找出是否有两个值​​在数据库表中(使用h2创建)。 所有这些都必须通过使用DAO类和在主类和DAO类之间传递的管理器类来实现。 我的问题是,通过这样做,总是会引发一个异常,告诉我没有找到“数据包列表”表。 但这不能是因为:

  • 我在数据库里查过了,有一张表
  • 数据库已与eclipse正确连接
  • 如果我实现了主表中的所有函数,那么表就会被识别
这些是课程:

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;

    } 
}
经理级:

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;
}
}
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;

}
}
主要类别:

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!!");

}

}
我还编写了包含整个函数的主函数,而不调用其他类(这里可以识别表):

DBManager
Class:

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;

}
}
连接工厂

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");
}
}
这是提出的例外情况:

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)
org.h2.jdbc.JdbcSQLException:未找到表“PACCHETTIVISITETURISTICHE”;
SQL语句:
从pacchettivisiteturistiche中选择*其中citta=?及
disponibilitasottostrizione=?[42102-195]
位于org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
位于org.h2.message.DbException.get(DbException.java:179)
位于org.h2.message.DbException.get(DbException.java:155)
位于org.h2.command.Parser.readTableOrView(Parser.java:5506)
位于org.h2.command.Parser.readTableFilter(Parser.java:1260)
位于org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1940)
位于org.h2.command.Parser.parseSelectSimple(Parser.java:2089)
位于org.h2.command.Parser.parseSelectSub(Parser.java:1934)
位于org.h2.command.Parser.parseSelectUnion(Parser.java:1749)
位于org.h2.command.Parser.parseSelect(Parser.java:1737)
位于org.h2.command.Parser.parsePrepared(Parser.java:448)
位于org.h2.command.Parser.parse(Parser.java:320)
位于org.h2.command.Parser.parse(Parser.java:292)
位于org.h2.command.Parser.prepareCommand(Parser.java:257)
位于org.h2.engine.Session.prepareLocal(Session.java:573)
位于org.h2.engine.Session.prepareCommand(Session.java:514)
位于org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1204)
在org.h2.jdbc.JdbcPreparedStatement。(JdbcPreparedStatement.java:73)
在org.h2.jdbc.JdbcConnection.prepareStatement上(JdbcConnection.java:288)
在dao.DaoPacchetti.Ricerca(DaoPacchetti.java:22)
在pacchetti.GestorePacchetti.RicercaPacchetto(GestorePacchetti.java:21)
位于ui.Terminale.main(Terminale.java:30)

好的,但我不确定错误是否在这里,因为在函数工作的主类中,我使用了相同的DBManager类。 这是我的DBManager类:

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;
}
}
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;

}
}
这是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");
}
}

好的,但我不确定错误是否在这里,因为在函数工作的主类中,我使用了相同的DBManager类。 这是我的DBManager类:

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;
}
}
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;

}
}
这是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");
}
}
jdbc:h2:~/test”、“sa”、“password”
jdbc:h2:file:~/test;USER=sa;password=password

请尝试这些连接字符串中的任何一个。

jdbc:h2:file:~/test;用户=sa;密码=密码


试试这些连接字符串。

确保你不必使用
schemaName.TableName
并且你提到了正确的数据库我也尝试过这样做,但情况没有改变发布你的DBManager类确保你不必使用
schemaName.TableName
并且你提到了正确的数据库我也尝试过这样做,但是这种情况并没有改变,在发布您的DBManager类时,请尝试以下任何连接字符串。我使用了“jdbc:h2:~/test”、“sa”、“password”或
jdbc:h2:file:~/test;USER=sa;password=password
“而不是连接字符串,它工作了。这是怎么可能的???问题在于
仅限:)以及为什么如果我使用主类,而整个实现都使用同一个DBManager,它就可以工作?无论如何,非常感谢,您救了我。
jdbc:h2:~/test”、“sa”、“password”
jdbc:h2:file:~/test;USER=sa;password=password
尝试这些连接字符串中的任何一个。我使用了“jdbc:h2:~/test”“而不是连接字符串,它工作了。这是怎么可能的???问题在于
仅限:)以及为什么如果我使用主类,而整个实现都使用同一个DBManager,它就可以工作?无论如何,非常感谢,你救了我。