powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / PreparedStatement и RETURN_GENERATED_KEYS
18 сообщений из 18, страница 1 из 1
PreparedStatement и RETURN_GENERATED_KEYS
    #39336336
AlexOk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть необходимость сразу после операции insert получать id строки, сделал так:
ResultSet result;

Connection conn = DriverManager.getConnection(URL, USER, PASS);
Statement stmt = conn.createStatement();

String sql = "INSERT INTO tbl_Contractor (contractor_name) " +
"VALUES ('"+ContractorName+"')";

PreparedStatement prep = conn.prepareStatement(sql ,stmt.RETURN_GENERATED_KEYS);
result = prep.getGeneratedKeys();
if(result.next() && result != null){
System.out.println("Key: " + result.getInt(1));
} else {
System.out.println("null");
}
conn.close();


К сожалению не работает)
пишет: java.lang.UnsupportedOperationException
на строку: PreparedStatement prep = conn.prepareStatement(sql ,stmt.RETURN_GENERATED_KEYS);
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336374
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexOk,

Зачем вам Prepared Statement если вы параметры инжектите непосредственно в запрос нарываясь сразу на несколько граблей?
И не желаете ли вы нас просветить по поводу названия JDBC драйвера и его версии?
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336392
AlexOk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, oracle.jdbc.driver.OracleDriver, ojdbc6, jdk1.7, intelij idea
Хм, вообщем нужен просто insert и сразу вытащить id строки. Если у вас есть какие-то мысли на этот счет буду признателен.
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336410
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexOk,
http://stackoverflow.com/a/4224729 For some JDBC drivers (for example, Oracle) you have to explicitly list the column names or indices of the generated keys:
Код: java
1.
PreparedStatement ps = con.prepareStatement(sql, new String[]{"USER_ID"})
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336411
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexOkBlazkowicz, oracle.jdbc.driver.OracleDriver, ojdbc6, jdk1.7, intelij idea
Хм, вообщем нужен просто insert и сразу вытащить id строки. Если у вас есть какие-то мысли на этот счет буду признателен.

IMHO & AFAIK Прочитать документацию по Oracle, например SQL Reference: INSERT...RETURNING. В общем - RTFM и будет Вам счастье.

Ну, или в крайнем случае, поискать в гугле. Тут же находится пример кода на данном форуме.

http://www.sql.ru/forum/154796/insert-returning-into-v-oracle-9-2-cherez-jdbc
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336428
AlexOk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, я пробовал
[автор]
ResultSet result;

Connection conn = DriverManager.getConnection(URL, USER, PASS);
Statement stmt = conn.createStatement();

String sql = "INSERT INTO tbl_Contractor (contractor_name) " +
"VALUES ('"+ContractorName+"')";

PreparedStatement prep = conn.prepareStatement(sql ,new String[]{"id"});
result = prep.getGeneratedKeys();
if(result.next() && result != null){
System.out.println("Key: " + result.getInt(1));
} else {
System.out.println("error");
}
conn.close();
[/quote]
Тоже самое пишет =(
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336433
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevINSERT...RETURNING.
+1
проще и железобетонно раз Оракл.
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336437
AlexOk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Окей спасибо за наводку, дальше сам разберусь)
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336457
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Leonid KudryavtsevINSERT...RETURNING.
+1
проще и железобетонно раз Оракл.
проще прочитать Oracle документацию. Вот лично мне - читать в лом, к тому же, экспериментировать не на чем (Oracle под руками нет).

https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html
https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#getGeneratedKeys()

https://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OraclePreparedStatement.html

https://docs.oracle.com/cd/B19306_01/java.102/b14355/jdbcvers.htm#CHDEGDHJ

etc...

Ну и версии драйвера AlexOk так и не сказал. Вполне возможно, что там действительно UnsupportedOperation
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336469
AlexOk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexOk,
С БД access Returning провернуть получится?
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336472
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой JDBC драйвер Вы будете для MS Access использовать? Вот по нему доку и смотрите.
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336476
AlexOk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MS Access Driver version 14.00.7010.1000
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336490
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кинь url. Что то не верится, что приведенная тобой строчка относится к JDBC driver'у.
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336492
AlexOk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,
jdbc:odbc:DEVEL
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336499
AlexOk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это url который я настроил руками. В диспетчере odbcad32 выбран именно тот драйвер который я линканул, где задан путь к файлу БД.
Может чего не понимаю
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336503
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO & AFAIK

JDBC -- ODBC бридж только для 32 разрядной Java работает - т.ч. в топку, такая глюка даже не интересна.
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336507
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexOkMS Access
плюнь на него. Оракле XE ставится за 30 мин
...
Рейтинг: 0 / 0
PreparedStatement и RETURN_GENERATED_KEYS
    #39336729
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
			String insertTableSQL = "INSERT INTO sensor(id, deviceId, tmStmp, name, val) values(nextval( 'hibernate_sequence'),"
		                            + sensor.getDeviceId()
			                        + ",  NOW()" 
			                        + ", " + "'" + sensor.getName() + "'"
			                        + ", " + sensor.getVal() +")";

			System.out.println("*** run statement: " + insertTableSQL);
			Statement statement = dbConnection.createStatement();
			// execute insert SQL statement
			
			statement.executeUpdate(insertTableSQL, Statement.RETURN_GENERATED_KEYS);
			
			// set id 
			try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
	            if (generatedKeys.next()) {
	                sensor.setId(generatedKeys.getLong(1));
	            }
	            else {
	                throw new SQLException("Creating sensor failed, no ID obtained.");
	            }
	        }



Working code
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / PreparedStatement и RETURN_GENERATED_KEYS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]