Wpis z mikrobloga

Cześć, mam pytanie. Łączę się z PostgreSQL i chcę dodać jakiś rodzaj dania wraz ze składnikami. Wyskakuje mi błąd
ERROR: column "lunch" does not exist. Nie wiem gdzie szukać problemu. Zapis wydaje mi się poprawny.

String DB_URL = "jdbc:postgresql:meals_db";
String USER = "postgres";
String PASS = "1111";

Connection connection = DriverManager.getConnection(DB_URL, USER, PASS);
connection.setAutoCommit(true);

Statement statement = connection.createStatement();
statement.executeUpdate("drop table if exists meals");
statement.executeUpdate("drop table if exists ingredients");

statement.executeUpdate("create table meals (" +
"category varchar(20)," +
"meal varchar(20)," +
"meal_id integer" +
")");

statement.executeUpdate("create table ingredients (" +
"ingredient varchar(50)," +
"ingredient_id integer," +
"meal_id integer" +
")");

System.out.println("Which meal do you want to add (breakfast, lunch, dinner)?");
String categoryOfMeal = getCategory();

System.out.println("Input the meal's name:");
String mealName = getMealName();

System.out.println("Input the ingredients:");
String ingredients = getIngredients();

meals.add(new Meals(categoryOfMeal, mealName, ingredients));

System.out.println("The meal has been added!");

int mealId = 1;
int id = 100;

statement.executeUpdate(String.format("insert into meals(category, meal, meal_id) values (%s, %s, %d)",
categoryOfMeal, mealName, mealId
));
statement.executeUpdate(String.format("insert into ingredients(ingredient, ingredient_id) values (%s, %d)",
ingredients, id));

statement.executeUpdate("insert into ingredients(meal_id)" +
"meal_id" +
"from" +
"meals");

statement.close();
connection.close();

#java
  • 8
@Yakooo: statement.executeUpdate(String.format("insert into meals(category, meal, meal_id) values (%s, %s, %d)",
categoryOfMeal, mealName, mealId
));

Robię to za pomocą tego. Czy ten zapis jest błędny ?
@Kamishimi meals.add(new Meals(categoryOfMeal, mealName, ingredients));
moze cos w tej klasie masz #!$%@? :)
ogólnie kompilator to się czepia ze nie masz KOLUMNY lunch , a nie tabeli, w tym kodzie co dałeś nigdzie nie wystepuje kolumna lunch, więc szukaj jej gdzieś głębiej np. wlasnie w klasie Meals , albo tutaj getCategory();
@Krzyhuu: Tylko że ja właśnie nie chcę dodawać żadnej nowej kolumny. Stworzyłem tablicę meals z trzema kolumnami:
1.category
2.meal
3.mealid

I teraz jak skanuję dane -> categoryOfMeal tą wartość chcę dodać do kolumny "category", a mealName do kolumny "meal".
I to powinien robić ten zapis :

statement.executeUpdate(String.format("insert into meals(category, meal, meal_id) values (%s, %s, %d)",
categoryOfMeal, mealName, mealId
));

A tego nie robi.
statement.executeUpdate(String.format("insert into meals(category, meal, meal_id) values (%s, %s, %d)",

categoryOfMeal, mealName, mealId

));


@Kamishimi: Poczytaj o tym jak powinno się przekazywać parametry w takich poleceniach, czemu String,format jest złym wyborem i co ma to wspólnego z SQL-injection, które właśnie się Tobie wykonało. Wstrzyknąłeś nazwę posiłku jako nazwę kolumny tabeli, a złośliwie można dużo więcej tak popsuć ( ͡° ͜ʖ ͡°) #hackerman
PaaD - >statement.executeUpdate(String.format("insert into meals(category, meal, meal...

źródło: radar3-418x350

Pobierz
@Kamishimi lunch podajesz jako category więc może coś tam się #!$%@? formatuje i traktuje to jako kolumne, wyprintuj se co zwraca getCategory i wyprintuj te sql statementy już po string.format i zobacz czy tam się coś nie #!$%@? (może jak przyjmujesz lunch jako input to razem ze znakiem końca linii \n?)

no i ogólnie docelowo się tak nie robi bo sql injection