Проблема:
java.lang.NullPointerException
at mainPackagePaketverwaltung.Datenbank.savePaket(Datenbank.java:58)
at mainPackagePaketverwaltung.MainPV$12.actionPerformed(MainPV.java:507)
Причина:
Это строка (58):
myStatement.executeUpdate("INSERT INTO Relation VALUES(NULL, '"+ PaketID +"', '"+ atodb.getArtikelID() + "', '"+ atodb.getMenge() +"')");
Насколько я понимаю, это должно создать новую строку в базе данных, потому что для NULL / Primary_Key установлено значение Auto_Increment, но после одного короткого замыкания он выдает ошибку.
Этого не должно происходить, т.к. при каждом запуске Auto_Increment будет создавать новую строку.
Больше информации:
PaketID - это INT
atodb.getArtikelID - это INT
atodb.getMenge - это INT
Все поля БД - INT, с
а также myStatement не должен быть нулевым
@YCF_L Да, я могу подтвердить (только что проверил с помощью System.out.print), что они не равны нулю, первый набор данных попадает в БД, но ошибки секунд даже с данными в нем
@guleryuz я установил значение null после того, как .executeUpdate это неправильно?
Да ... это кажется неправильным
Можете ли вы опубликовать тело метода savePaket
@gargkshitiz да, это исправило, я даже не подумал об этом, потому что, на мой взгляд, это не должно быть проблемой, если после выполнения ставки мы находимся. Спасибо за быструю помощь! :)
Не могли бы вы показать нам полный код, @gargkshitiz верен, что, если ваша транзакция еще не зафиксирована, а вы уже установили для объекта значение null? и прочтите, пожалуйста, о «Подготовленном заявлении». Ваш код является жертвой заражения SQL и синтаксиса ошибок.
@gargkshitiz public static boolean savePaket(int PaketID, Artikel atodb) { try { myCon=DriverManager.getConnection(url, user, pwd); System.out.println(atodb.getArtikelID()); System.out.println(atodb.getMenge()); myStatement.executeUpdate("INSERT INTO Relation VALUES(NULL, '"+ PaketID +"', '"+ atodb.getArtikelID() + "', '"+ atodb.getMenge() +"')"); //myStatement=null; <= Dont do that anymore! myRS=null; return true; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; }
@LifeLifeLP Поместите код в качестве исправления в свой вопрос, а не в комментарии. читать без правильного отступа - кошмар.
@ L.Spillner Извините, я опоздал, прежде чем он был закрыт, я сделаю это, однако в следующий раз, когда я спрошу здесь: S
myCon, myStatement кажутся переменными уровня класса, поэтому присвоение им значения null означает, что второй вызов метода вызовет NPE




Пожалуйста, убедитесь в следующем
myStatement не равно нулю
atodb не равен нулю
вы уверены, что
atodbне нулевой?