Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вы справляетесь с null в ps.setInt(1, x) ? / 18 сообщений из 18, страница 1 из 1
07.04.2006, 13:16
    #33651933
syncat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы справляетесь с null в ps.setInt(1, x) ?
Вот есть такая сногим знакомая конструкция:
Код: 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
07.04.2006, 14:06
    #33652143
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы справляетесь с null в ps.setInt(1, x) ?
вынести в метод
...
Рейтинг: 0 / 0
08.04.2006, 12:39
    #33653711
syncat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы справляетесь с null в ps.setInt(1, x) ?
А как определить тип, если x=null?

---------------------------------------
http://subscribe.ru/archive/rest.funny.time4gonivo/
...
Рейтинг: 0 / 0
08.04.2006, 14:35
    #33653768
z
z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы справляетесь с null в ps.setInt(1, x) ?
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
08.04.2006, 16:50
    #33653841
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы справляетесь с null в ps.setInt(1, x) ?
Хм. Я уже отхожу от Java, подзабываю и могу сказать глупость - но имхо это может потребоваться только для out-параметров, которым все равно нужно делать registerOutParameter (не помню, поддерживает ли их Prepared или только Callable). Для in-параметров смело можно писать любой тип, разницы не вижу.

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

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

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

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

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

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

А вот так как раз нельзя, если x==null то сохранит `0` а не `null`, сам проверь ;)
...
Рейтинг: 0 / 0
09.04.2006, 15:54
    #33654344
Как вы справляетесь с null в ps.setInt(1, x) ?
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
09.04.2006, 16:34
    #33654374
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы справляетесь с null в ps.setInt(1, x) ?
softwarerЯ не не считаю ...
а чо - по-русски сказать - уже чиста западло?
...
Рейтинг: 0 / 0
09.04.2006, 20:22
    #33654537
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы справляетесь с null в ps.setInt(1, x) ?
авторЯ согласен, что в документации для методов 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
09.04.2006, 20:35
    #33654550
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вы справляетесь с null в ps.setInt(1, x) ?
хотя не то написал. Проверил как раз 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
10.04.2006, 07:56
    #33654834
Как вы справляетесь с null в ps.setInt(1, x) ?
Partisan M авторЯ согласен, что в документации для методов setObject четко не оговорено, что должно происходить, если x == null

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


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