2014-09-09 1 views
0

У меня есть код ниже, где я вставляю записи в таблицу. Когда я пытаюсь получить набор результатов, он возвращает null. Как получить последнюю добавленную строку в набор результатов?Получение результатов из инструкции insert

String sql1 = "INSERT INTO [xxxx].[dbo].[xxxxxx](WORKFLOW_SEQ_NBR," + 
         " WORKFLOW_LOG_TYPE_CODE, WORKFLOW_STATUS_CODE, DISP_CODE, DISP_USER, DISP_COMMENT, DISP_TITLE, DISP_TS)" + 
         "VALUES(?,?,?,?,?,?,?,?)"; 
     PreparedStatement pst = connect.prepareStatement(sql1); 
     pst.setString(1, ...); 
     pst.setString(2, ...); 
     ... 
     ... 
     ... 
     pst.executeUpdate(); 

     ResultSet rstest = pst.executeQuery(); 
//   ResultSet rstest = pst.getResultSet(); 

EDIT: Решено

добавлен следующий метод перехода к последней добавленной строке

st.execute("Select * from [xxxx].[dbo].[xxxxxxxxx]"); 
     ResultSet rstest = st.getResultSet(); 
     rstest.afterLast(); 
     GETLASTINSERTED: 
     while(rstest.previous()){ 
      System.out.println(rstest.getObject(1)); 
      break GETLASTINSERTED;//to read only the last row 
     } 
+0

Какого результата вы ожидаете от оператора вставки? –

+0

Что вы ожидаете? Вы должны запустить запрос выбора, чтобы получить некоторые результаты. –

+0

Вы не можете получить результат, как вы ожидали, из 'INSERT, UPDATE & DELETE (через executeUpdate())' операций, но можете делать из 'SELECT (FIND) (vis executeQuery())' op. –

ответ

5

При использовании SQL заявление, таких как INSERT, UPDATE или DELETE с PreparedStatement, вы должны использовать executeUpdate , который вернет количество украшенных строк. В этом случае просто нет ResultSet, созданного операцией sql, и, таким образом, вызов executeQuery будет вызывать SQLException.

Если вам действительно нужен ResultSet, вы должны сделать другой оператор с операцией SQL-кода SELECT.

Смотрите Javadoc для PreparedStatement#executeQuery и PreparedStatement#executeUpdate

1

Connection#prepareStatement() - Создает объект PreparedStatement для отправки параметризованных инструкций SQL в базу данных.

, что означает, что connect.prepareStatement(sql1); создал объект PreparedStatement, используя ваш запрос на вставку.

и когда вы сделали pst.executeUpdate(); он возвращает количество строк для SQL Data Manipulation Language (DML) заявления или 0 для операторов SQL, которые не возвращают ничего

Теперь, если вы снова хотите получать данные вставляются необходимые для создания новый объект PreparedStatement с запросом Select.

PreparedStatement pstmt = connect.prepareStatement("SELECT * FROM tableName"); 

, то это даст вам объект ResultSet, который содержит данные, полученные по запросу

ResultSet rstest = pstmt.executeQuery();