powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вы справляетесь с null в ps.setInt(1, x) ?
18 сообщений из 18, страница 1 из 1
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33651933
Фотография syncat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот есть такая сногим знакомая конструкция:
Код: plaintext
1.
2.
3.
4.
                if (x== null )
               	ps.setNull( 1 , Types.INTEGER);
                else 
               	ps.setInt( 1 , x);
Как бы её автоматизировать что бы не писать каждый раз столько строк?
Для JDBC или SpringJDBC
---------------------------------------
Код: plaintext
Registered L i nux user #391155
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33652143
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вынести в метод
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33653711
Фотография syncat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как определить тип, если x=null?

---------------------------------------
http://subscribe.ru/archive/rest.funny.time4gonivo/
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33653768
z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
z
Гость
syncatВот есть такая сногим знакомая конструкция:
Код: plaintext
1.
2.
3.
4.
                if (x== null )
               	ps.setNull( 1 , Types.INTEGER);
                else 
               	ps.setInt( 1 , x);
Как бы её автоматизировать что бы не писать каждый раз столько строк?
Для JDBC или SpringJDBC
---------------------------------------
Код: plaintext
Registered L i nux user #391155

знакома не всем.
нафига setNull?
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33653841
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм. Я уже отхожу от Java, подзабываю и могу сказать глупость - но имхо это может потребоваться только для out-параметров, которым все равно нужно делать registerOutParameter (не помню, поддерживает ли их Prepared или только Callable). Для in-параметров смело можно писать любой тип, разницы не вижу.

А автоматизировать.... надо писать обвязку. JDBC как он есть - непригодный к использованию продукт.
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33653867
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zзнакома не всем.
нафига setNull?
Вот именно. Раз ты имеешь право на сравнение x с null, и который потом отдаешь в setInt(), то имхо имеешь дело с JDK 1.5 и ее автобоксингом. НУ и пиши на все случаи ps.setInt(1, x), в чем проблема?
softwarerJDBC как он есть - непригодный к использованию продукт.
Только вот используют его все кому ни лень, и порой только его.
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33653881
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis PopovТолько вот используют его все кому ни лень, и порой только его.
Ну дык и строителей, роющих яму лопатами, нетрудно найти :))
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33653894
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer wrote:
> Ну дык и строителей, роющих яму лопатами, нетрудно найти :))

Да нет, нормально, работа только с JDBC это даже не из серии в гамаке и стоя:)
Конечно, использование оболочек вокруг него помогает, но я пока допускаю прямое
написание запросов к БД с ее спецификой, не через ORM. "непригодный к
использованию продукт" - можно истолковать по-разному, "непригодный к
использованию напрямую" имхо более точный предмет для обсуждения.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33653918
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis PopovДа нет, нормально, работа только с JDBC это даже не из серии в гамаке и стоя:)
Не соглашусь. Ни с "нормально", ни с "даже не в гамаке".

Denis PopovКонечно, использование оболочек вокруг него помогает, но я пока допускаю прямое написание запросов к БД с ее спецификой, не через ORM.
Я не не считаю, что этим противопоставлением исчерпываются все варианты. Просто - как факт - если долго программировать на ассемблере, появляется желание написать над ним более высокоуровневую обвязку, хотя бы в виде макросов и подпрограмм на типичные ситуации. Точно так же и с JDBC - после того, как чуть-чуть им попользуешься, возникает точное и правильное ощущение:

eВот есть такая сногим знакомая конструкция:
.....
Как бы её автоматизировать что бы не писать каждый раз столько строк?[/quote]

[quote]"непригодный к использованию напрямую"
Безусловно, это более точная и удачная формулировка.
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33653926
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор"непригодный к
использованию продукт" - можно истолковать по-разному, "непригодный к
использованию напрямую" имхо более точный предмет для обсуждения.

Нечего тут обсуждать. Не умеешь - не берись, а тем более не учи. Я использую "продукт" (как вы выражаесь) напрямую, и как ни удивительно, работает.
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33654041
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
Согласен с Partisan M, плохим танцорам ... мешают.
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33654095
Код: plaintext
1.
2.
Integer x = ...;
ps.setObject( 1 , x);
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33654245
jumperFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ненавижу регистрацию
Код: plaintext
1.
2.
Integer x = ...;
ps.setObject( 1 , x);

А вот так как раз нельзя, если x==null то сохранит `0` а не `null`, сам проверь ;)
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33654344
jumperFF Ненавижу регистрацию
Код: plaintext
1.
2.
Integer x = ...;
ps.setObject( 1 , x);

А вот так как раз нельзя, если x==null то сохранит `0` а не `null`, сам проверь ;)
Я согласен, что в документации для методов setObject четко не оговорено, что должно происходить, если x == null. За то для getObject оговорено. Поэтому, вполне логично, чтобы для setObject(index, null) в БД отправлялся NULL. JDBC-драйвер Oracle (и другие) именно так и поступает. А поведение вашего JDBC-драйвера хотя напрямую и не противоречит документации, трудно назвать логичным.
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33654374
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЯ не не считаю ...
а чо - по-русски сказать - уже чиста западло?
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33654537
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ согласен, что в документации для методов setObject четко не оговорено, что должно происходить, если x == null

Сказано в спецификации JDBC 3.0 пункты 13.2.2.3 и 17.7.
В общем, не понял, зачем setObject вместо setInt - и так должен вставиться NULL.

авторА вот так как раз нельзя, если x==null то сохранит `0` а не `null`, сам проверь ;)

Как производилась проверка? В ResulSet после getInt () получится 0 независимо от того, что в базе - 0 или NULL. Поэтому для их различения надо применить метод wasNull() к ResulSet-у. Вот не поленился проверить в PostgreSQL: сначала в PreparedStatement для вставки в базу задал setInt (номерПаврметра, null), затем при чтении ResultSet из базы применил wasNull () и он действительно показал,что в базе NULL.

авторА как определить тип, если x=null?

никак, да и не нужно.
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33654550
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя не то написал. Проверил как раз setObject на сохранение null.
Вот фрагмент примера:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
//таблица  t1 с двумя колонками - num (числа) и str (строки) 

		try {

			Connection con = DriverManager.getConnection(args[0]);


			System.out.println("Connection attempt successful");


			PreparedStatement stmt0;

			PreparedStatement stmt;


			stmt0 = con.prepareStatement("INSERT INTO t1 VALUES (?, 'ZZZ')");

			stmt0.setObject(1, null);

			int nInserted = stmt0.executeUpdate();

			System.err.println("inserted: " + nInserted); 

			stmt0.close();
	

			stmt = con.prepareStatement("SELECT * FROM t1 WHERE str='ZZZ'");

		

			ResultSet rs = stmt.executeQuery();

			printResults (rs);


			con.close();



		} catch (SQLException e) {

			System.err.println("Connection failed(SQLException)");

			System.err.println(e.getMessage());

		}


	}



	static void printResults(ResultSet res) {

		System.out.println(" num | str");

		System.out.println("---------+--------------------------");


		try {

			while (res.next()) {

				String val;

				

				Integer i = res.getInt(1);

				if (res.wasNull()) {

					val = ("NULL");

				} else {

					val = Integer.toString(i.intValue());

				}

					

				System.out.print(val);

				System.out.print(" | ");



				String s = res.getString(2);

				if (res.wasNull())

					val = "(null)";

				else

					val = s;



				System.out.print(val);

				System.out.println("");

			}

		} catch (SQLException e) {

			System.err.println("Fetch failed: " + e.getMessage());

		}

	}
...
Рейтинг: 0 / 0
Как вы справляетесь с null в ps.setInt(1, x) ?
    #33654834
Partisan M авторЯ согласен, что в документации для методов setObject четко не оговорено, что должно происходить, если x == null

Сказано в спецификации JDBC 3.0 пункты 13.2.2.3 и 17.7.
Спасибо, действительно, такое есть.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вы справляетесь с null в ps.setInt(1, x) ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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