JDBC, MySQL: выполняется возврат данных строки из PreparedStatement - PullRequest
0 голосов
/ 22 октября 2009

Я использую следующую настройку:

public MySQLProcessWriter(Connection con) throws SQLException { 
 String returnNames[] = {"processId","length","vertices"};
 addresser = con.prepareStatement("INSERT INTO addressbook (length, vertices, activity) VALUES (?, ?, ?)", returnNames);
}

processId соответствует столбцу с автоинкрементом в таблице адресной книги. Идея такова: у меня есть повторная вставка, я возвращаю часть того, что было вставлено + автоматически сгенерированный processId. Однако я получаю SQLException «столбец не найден», когда я пытаюсь addresser.getGeneratedKeys().getInt("processId"); после выполнения подготовленного оператора (после соответствующей установки значений). Код для этого

addresser.setInt(1, length);
addresser.setInt(2, vertices);
addresser.setDouble(3, activity);
addresser.executeUpdate();
int processId = addresser.getGeneratedKeys().getInt("processId");

внутри цикла, который обновляет длину, вершины, активность. Итак ... что дает? Я неправильно понимаю, что делает метод prepareStatement (sqlstring, string [])?

Ответы [ 2 ]

2 голосов
/ 22 октября 2009

Я думаю, вам нужно вызвать next () для возвращенного набора результатов

ResultSet keys = addresser.getGeneratedKeys();
int processId = -1;
if (keys.next())
{
  processId = keys.getInt("processId");
}
0 голосов
/ 22 октября 2009

Вы должны вызвать next() метод для ResultSet, возвращаемый из getGeneratedKeys() до вызова getInt()

ResultSet rs = addresser.getGeneratedKeys();
int processId = 0;
if (rs.next()) {
  processId = rs.getInt("processId");
}
...