Java & SQL: ExecuteUpdate () / UPDATE неправильно обновляет запись - PullRequest
1 голос
/ 21 марта 2011

Я запускаю свой код с правильной настройкой. Все строки действительно являются строками, а все целые являются целыми. Здесь нет ошибок - программа выполняет обновление без ошибок, и входные значения должны быть такими, какие они должны быть. Например, я беру запись для человека с именем «First Last» и говорю коду изменить его на «Work Please», но после обновления база данных показывает, что она была изменена на «-1 Last». Ничего, кроме FirstName, не меняется, а FirstName меняется на -1 независимо от того, что я вставил.

Соответствующий фрагмент: я отлаживал его до того момента, когда он выполняет его, и все значения есть - даже «Джо». Но вместо этого он решает обновить всю запись без изменений, за исключением того, что FName равно «0» или «-1».

sql = "UPDATE Member SET FName = ? and LName = ? and Email = ? and "
                                + "Year = ? and Shirt = ? and Comm = ? and Phone = ? and PPhone = ? and Events = ? where MemberID = ? ";
pstmt = dbConnection.prepareStatement(sql);
pstmt.setString(1, "Joe");
pstmt.setString(2, tempm.getName().split(" ")[1]);
pstmt.setString(3, tempm.getEmail());
pstmt.setInt(4, tempm.getYear());
pstmt.setInt(5, tempm.getShirt());
pstmt.setInt(6, tempm.getComm());
pstmt.setString(7, phonea[0]);
pstmt.setString(8, phonea[1]);
pstmt.setString(9, tempm.getEvents());
pstmt.setInt(10, tempm.getmID());
pstmt.executeUpdate();

Изменение от и до, дает

sql = "UPDATE Member SET FName = ?, LName = ?, Email = ?, "
                                + "Year = ?, Shirt = ?, Comm = ?, Phone = ?, PPhone = ?, Events = ? where MemberID = ?";       

Что приводит к тому же результату.

Ответы [ 2 ]

3 голосов
/ 21 марта 2011

Вы должны использовать запятые вместо and в своем заявлении об обновлении:

sql = "UPDATE Member SET FName = ?, LName = ?, ... WHERE MemberID = ?";

Ваш текущий запрос интерпретируется как:

sql = "UPDATE Member SET FName = (? AND LName = ? AND ...) WHERE MemberID = ?";

Часть в скобках является логическимвыражение, где = - это оператор сравнения на равенство, а не присвоение, как вы предполагали.

1 голос
/ 21 марта 2011

Возможно, попробуйте окружить ваши ответы ''

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...