<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - przekazanie null do kolumny typu int - niezgodność typu Java]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=374</link>
		<description><![CDATA[Najświeższe odpowiedzi w przekazanie null do kolumny typu int - niezgodność typu Java.]]></description>
		<lastBuildDate>Wed, 13 Jan 2010 17:20:19 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: przekazanie null do kolumny typu int - niezgodność typu Java]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1702#p1702</link>
			<description><![CDATA[Już działa ok. a było to tak...

Dla sprawdzenia poprawności zapisu bezpośrednio w środowisku postgresa wysłano dane do bazy:
INSERT INTO teren (nr_t, rodz, opis, ip_ost_p, uwagi) VALUES (11,'mia','wie',null,null);
INSERT 0 1
 
zatem dowód, że problem jest z przekazem z Javy i tu z pomocą przyszedł niespodziewanie sławny Zbyszek M. podając:

[url]http://java.sun.com/j2se/1.4.2/docs/api/java/sql/PreparedStatement.html#setNull(int,[/url] int) 
a tu jest 
setNull(int parameterIndex, int sqlType) 
ale bez przykładu nie dotarło do mnie jak to praktycznie zapisać zwłaszcza drugą zmienną w nawiasie.
Ale wiedząc już o istnieniu setNull przykład się znalazł  w googlach i praktycznie wygląda to tak:

pobieram wartość z edytowanego pola tabeli (GUI)
getPole5str= (String)t_teren.getValueAt(wiersz,4);

buduję polecenie do bazy:
zapytanieRozkaz = "UPDATE teren SET nr_ter=?, rodz=?, opis=?, ip_ost_p=?, uwagi=? WHERE ip_teren=?"; 

zmienWiersz = con.prepareStatement(zapytanieRozkaz);

i teraz przepraszam za tę konstrukcję ale to tylko dla celów testowych:

if (getPole5str.equals("") || getPole5str==null )
       {
      // getPole5 = Integer.parseInt(getPole5str);     --- no właśnie to nie działało dla ==null
       zmienWiersz.setNull(4, java.sql.Types.INTEGER);   // to jest to !!!
       } 
     else
       {
       getPole5 = Integer.parseInt(getPole5str);
       zmienWiersz.setInt(4, getPole5);
       }

I teraz jest ok.]]></description>
			<author><![CDATA[dummy@example.com (r_k2)]]></author>
			<pubDate>Wed, 13 Jan 2010 17:20:19 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1702#p1702</guid>
		</item>
		<item>
			<title><![CDATA[Odp: przekazanie null do kolumny typu int - niezgodność typu Java]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1701#p1701</link>
			<description><![CDATA[A jak wstawiasz dane? Zwykły INSERT?, możesz go pokazać?]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Wed, 13 Jan 2010 06:07:43 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1701#p1701</guid>
		</item>
		<item>
			<title><![CDATA[przekazanie null do kolumny typu int - niezgodność typu Java]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1700#p1700</link>
			<description><![CDATA[Witam, to forum jakoś wyjątkowo mi się spodobało i lubię "rski" więc co wy na to, że spróbuję pod SQL podpiąć temat zapytań w SQLu ale z Javy...

Zatem usiłuję wysłać z programu w Javie dane do bazy w postgreSQLu.
Kolumna w postgresie jest typu int i na początku jest nieuzupełniona a potem jest np. 1, 12, 5...
Ale w pewnym momencie pole tej kolumny ma być puste.
Wydawało się mi, że (w kodzie Java) wystarczy int a = null; 
i takie a przekażę do bazy ale niestety:
incompatible types
found   : <nulltype>
required: int
a po próbie bardziej bezpośredniego przekazania null:
zmienWiersz.setInt(4, null);
błąd:
SQLException: ERROR: column "ip_ost_p" is of type smallint but expression is of type character varying 

No i nie wiem jak pośrednio wykasować dane z pola w postgresie?]]></description>
			<author><![CDATA[dummy@example.com (r_k2)]]></author>
			<pubDate>Tue, 12 Jan 2010 22:42:11 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1700#p1700</guid>
		</item>
	</channel>
</rss>
