0

現在、テスト SQL の実行を使用して Customer テーブルにオブジェクトを挿入しようとしています。ただし、テストを実行すると、コンパイラは次の例外を返します。

Exception in thread "main" java.lang.RuntimeException: error finding Customer
    at edu.depauw.csc480.dao.CustomerDAO.find(CustomerDAO.java:78)
    at edu.depauw.csc480.dao.CustomerDAO.insert(CustomerDAO.java:87)
    at edu.depauw.csc480.dao.DatabaseManager.insertCustomer(DatabaseManager.java:84)
    at edu.depauw.csc480.Test.main(Test.java:18)
Caused by: java.sql.SQLSyntaxErrorException: Table/View 'CUSTOMER' does not exist.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)

コードを何度も見直しましたが、正常にコンパイルされ、実行されないため、エラーを見つけることができないようです。以下は、CustomerDAO クラスの create メソッドと find メソッドです。

public Customer find(int custID) {
        if (cache.containsKey(custID)) return cache.get(custID);

        try {
            String qry = "select name from CUSTOMER where custID = ?";
            PreparedStatement pstmt = conn.prepareStatement(qry);
            pstmt.setInt(1, custID);
            ResultSet rs = pstmt.executeQuery();

            String name = rs.getString("name");
            String address = rs.getString("address");
            String email = rs.getString("email");

            rs.close();

            Customer cust = new Customer (this, custID, name, address, email);

            cache.put(custID, cust);
            return cust;
        } catch (SQLException e) {
            dbm.cleanup();
            throw new RuntimeException("error finding department", e);
        }
    }

    // Insert new CartItem & returns it if the key does not already exist.

    public Customer insert (int custID, String name, String address, String email) {
        try {
            // make sure that the deptid is currently unused
            if (find(custID) != null)
                return null;

            String cmd = "insert into CUSTOMER(custID, name, address, email) "
                       + "values(?, ?, ?, ?)";
            PreparedStatement pstmt = conn.prepareStatement(cmd);
            pstmt.setInt(1, custID);
            pstmt.setString(2, name);
            pstmt.setString(3, address);
            pstmt.setString(4, email);

            pstmt.executeUpdate();

            Customer cust = new Customer(this, custID, name, address, email);

            cache.put(custID, cust);

            return cust;
        }
        catch(SQLException e) {
            dbm.cleanup();
            throw new RuntimeException("error inserting new department", e);
        }
    }

エラーの原因についてのアイデアはありますか?

編集:これは私のCustomerDAO.javaクラスで、他のSQLコマンドとともにテーブルの作成を処理します。

public class CustomerDAO {

    private Connection conn;
    private DatabaseManager dbm;
    private Map<Integer, Customer> cache;

    public CustomerDAO (Connection conn, DatabaseManager dbm) {
        this.conn = conn;
        this.dbm = dbm;
        this.cache = new HashMap<Integer, Customer>();
    }

    static void create(Connection conn) throws SQLException {
        Statement stmt = conn.createStatement();
        String s = "create table CUSTOMER("
                + "name string, "
                + "custID string, "
                + "address string, "
                + "email string " 
                + "primary key(custID))";
        stmt.executeUpdate(s);
    }

    // Modifies CartItem table and adds foreign key constraints (tables need to already be created)

    //static void addConstraints(Connection conn) throws SQLException {
        //Statement stmt = conn.createStatement();
        //String s = "alter table Customer "
        //      + "foreign key(shoppingCartID) references shoppingCart(shoppingCartID)";
        //stmt.executeUpdate(s);
    //}

    //Finds CartItem object by primary key.

    public Customer find(int custID) {
        if (cache.containsKey(custID)) return cache.get(custID);

        try {
            String qry = "select name from CUSTOMER where custID = ?";
            PreparedStatement pstmt = conn.prepareStatement(qry);
            pstmt.setInt(1, custID);
            ResultSet rs = pstmt.executeQuery();

            String name = rs.getString("name");
            String address = rs.getString("address");
            String email = rs.getString("email");

            rs.close();

            Customer cust = new Customer (this, custID, name, address, email);

            cache.put(custID, cust);
            return cust;
        } catch (SQLException e) {
            dbm.cleanup();
            throw new RuntimeException("error finding department", e);
        }
    }

    // Insert new CartItem & returns it if the key does not already exist.

    public Customer insert (int custID, String name, String address, String email) {
        try {
            // make sure that the deptid is currently unused
            if (find(custID) != null)
                return null;

            String cmd = "insert into CUSTOMER(custID, name, address, email) "
                       + "values(?, ?, ?, ?)";
            PreparedStatement pstmt = conn.prepareStatement(cmd);
            pstmt.setInt(1, custID);
            pstmt.setString(2, name);
            pstmt.setString(3, address);
            pstmt.setString(4, email);

            pstmt.executeUpdate();

            Customer cust = new Customer(this, custID, name, address, email);

            cache.put(custID, cust);

            return cust;
        }
        catch(SQLException e) {
            dbm.cleanup();
            throw new RuntimeException("error inserting new department", e);
        }
    }


    //Clears Data from CartItem Table

    void clear() throws SQLException {
        Statement stmt = conn.createStatement();
        String s = "delete from CUSTOMER";
        stmt.executeUpdate(s);
        cache.clear();
    }

}
4

2 に答える 2

0

エラーは、「顧客」テーブルが見つからないことを示しています。テーブル名のスペルが間違っている可能性がある場合は、データベースを確認してください。接続に問題がある可能性があります。データベース内の他のテーブルからデータを取得してみてください。

于 2012-04-17T02:36:06.823 に答える
0

鍵はここ

Caused by: java.sql.SQLSyntaxErrorException: Table/View 'CUSTOMER' does not exist.

解決方法:

まず、create メソッドと query メソッドの接続が同じデータベースかどうかを確認します。

2 番目のステップでは、コードをデバッグします。メソッドが実行されたときに create メソッドにブレークポイントを設定し、
テーブル 'CUSTOMER' が create または not であることを確認します。

于 2012-04-17T02:49:48.927 に答える