SQL Statement работает в SQLiteManager, но не в моей программе - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь взять соответствующие значения из существующей таблицы и поместить их в виртуальную таблицу, в которой я могу затем выполнить поиск и получить нужные записи.

У меня все более или менее работает, кроме фактической загрузки записей в эту виртуальную таблицу через программу. Я проверил эти операторы в меру своих возможностей в sqliteManager, и у них, похоже, нет проблем, но когда я пытаюсь выполнить их через программу, ничего не происходит, и stmt.execute() возвращает false.

Код вопроса:

public void getResults() {

    String sqlGetData = "INSERT INTO VirtualProductTable SELECT * FROM 
    H4HProductTable WHERE id = ? AND price <= ?" + 
         " AND length <= ? AND width <= ? AND height <= ?";

    switch (((Categories)this.categorySelect.getValue()).toString()) {
    case "Furniture":
        sqlGetData = sqlGetData.concat(" AND isFurniture = 1");
        break;
    case "Appliances":
        sqlGetData = sqlGetData.concat(" AND isAppliance = 1");
        break;
    case "Building_Materials":
        sqlGetData = sqlGetData.concat(" AND isBuildingMaterial = 1");
        break;
    case "Tools":
        sqlGetData = sqlGetData.concat(" AND isTool = 1");
        break;
    default:
        break;
    }

    // corrects for empty/unimportant fields //
    try {
        Connection conn = DBConnection.getConnection();
        PreparedStatement stmt = conn.prepareStatement(sqlGetData);

        if(this.idSearch.getText().equals(null) || 
        this.idSearch.getText().isEmpty()) {
            stmt.setString(1, "id");
        } else {
            stmt.setString(1, this.idSearch.getText());
        }

        if(this.priceSearch.getText().equals(null) || 
        this.priceSearch.getText().isEmpty()) {
            stmt.setString(2, "price");
        } else {
            stmt.setString(2, this.priceSearch.getText());
        }

        if(this.lengthSearch.getText().equals(null) || 
        this.lengthSearch.getText().isEmpty()) {
            stmt.setString(3, "length");
        } else {
            stmt.setString(3, this.lengthSearch.getText());
        }

        if(this.widthSearch.getText().equals(null) || 
        this.widthSearch.getText().isEmpty()) {
            stmt.setString(4, "width");
        } else {
            stmt.setString(4, this.widthSearch.getText());
        }

        if(this.heightSearch.getText().equals(null) || 
        this.heightSearch.getText().isEmpty()) {
            stmt.setString(5, "height");
        } else {
            stmt.setString(5, this.heightSearch.getText());
        }

        if(!stmt.execute()) {
            System.out.println("insert statement not executed");
        }
        stmt.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }

затем вызывается функцией searchProduct():

public void searchProduct (ActionEvent event) throws Exception {
    // makes sure we are not just piling entry after entry every consecutive search //

    String drop = "DELETE FROM VirtualProductTable";
    PreparedStatement stmt = this.newSearchModel.connection.prepareStatement(drop);
    stmt.execute();
    stmt.close();


    // 1. Creates a virtual table and inserts all entries of the category we're looking for, that are also within our other criteria 
    // 2. Sort that table into a list and print out the fields we need row by row 
    getResults();
    showFirstSix();
}

Теперь я знаю, что моя программа, по крайней мере, подключена к моей базе данных, поскольку оператор «DELETE FROM VirtualProductTable» работает нормально (я проверил его, уже вручную введя элементы в рассматриваемой таблице).

Единственное, о чем я мог подумать, может быть причиной этой проблемы, это то, что мои stmt.setString(...) не работают должным образом, но я не знаю, как правильно их проверить и посмотреть, какие значения на самом деле принимаются.

Я должен прояснить, я не получаю никакого фактического сообщения об ошибке от затмения, поэтому я думаю, что я синтаксически обоснован с точки зрения формулировки.

...