Невозможно вставить продукты в MS Access DB - PullRequest
0 голосов
/ 27 мая 2019

Я получаю ряд различных ошибок при попытке вставить продукты в мою базу данных доступа. Например, Malformed String:). Пользователю не хватает привилегий или объект не может быть найден. Различные ошибки, когда я пытаюсь вставить разные продукты.

попытался воссоздать БД, отладить до рукояти.

public boolean addNewProduct (Продукт продукта) {

    String Make = "";
    String Model = "";
    String Type = "";
    String Genre = "";
    String AttConsole = "";
    String Desc = "";

    if(product.getClass().getName().equals("Models.Game"))
    {
         Game game = (Game)product;
         Genre = String.valueOf(game.getGenre());
         AttConsole = String.valueOf(game.getAttributedConsole());
         Desc = String.valueOf(game.getDescription());
    }
    else if(product.getClass().getName().equals("Models.Console"))
    {
         Console console = (Console)product;
         Make = String.valueOf(console.getMake());
         Model = String.valueOf(console.getModel());
         Desc = String.valueOf(console.getDescription());
    }
    else
    {
        Peripheral peripheral = (Peripheral)product;
        Type = String.valueOf(peripheral.getType());
        Desc = String.valueOf(peripheral.getDescription());
    }

     try
    {
        Class.forName(driver);
        Connection conn = DriverManager.getConnection(connectionString);
        Statement stmt = conn.createStatement();
        stmt.executeUpdate("INSERT INTO Products (ProductName, Price, StockLevel, Description, Genre, AttributedConsole, Make, Model, Type) VALUES "
                + "('" + product.getProductName() + "','" + product.getPrice() + "','" + product.getStocklevel() 
                + "','" +  Desc + "','" + Genre + "','" + AttConsole + 
                "','"  + Make + "','" + Model + "'," + Type + ")");
        //sql statement to add new products to database
        conn.close();
        return true;
    }

     catch(Exception ex)
     {
          String message = ex.getMessage();    
          return false;
     }

}

ex = (net.ucanaccess.jdbc.UcanaccessSQLException) net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc ::: 4.0.4 неожиданный токен:) ex = (net.ucanaccess.jdbc.UcanaccessSQLException) net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc ::: 4.0.4 пользователю не хватает привилегии или объект не найден: RAZOR

1 Ответ

0 голосов
/ 29 мая 2019

Не используйте конкатенацию строк для вставки столбца значения в текст команды SQL.Ищите «SQL-инъекции» или «Маленькие таблицы Бобби» для получения дополнительной информации о том, почему это «плохая вещь» ™.

Вместо этого используйте PreparedStatement для запуска параметризованного запроса например,

String sql = "INSERT INTO tableName (intColumn, textColumn) VALUES (?, ?)";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
    ps.setInt(1, 12345);
    ps.setString(2, "my text value");
    ps.executeUpdate();
}
...