[ ziris @ 08.10.2006. 16:44 ] @
Jel može neko da mi pojasni šta znači tačno ovaj izuzetak(NullPointerException)?
To mi izbacuje kad sam pokušala sa nekim kodom da ubacim tip podataka blob u moju tabelu u bazi...
Nisam sigurna gde grešim
[ antix @ 08.10.2006. 16:56 ] @
Taj exception se generiše kada probaš da pozoveš neki metod na referenci koja je null. Evo primjer:

java.lang.String objekti imaju metod length() koji vraća dužinu Stringa. Normalno radiš ovako:

Code:

String s = new String("test");
System.out.println(s.length());


ali ako uradiš ovako:

Code:

String s = null;
System.out.println(s.length());


generisaće se NullPointerException jer referenca s pokazuje na null.
[ Java Beograd @ 08.10.2006. 17:18 ] @
Da se nadovezem: javlja se kad pokusavas da radis sa objektom koji je samo deklarisan a ne i inicijalizovan.
To je run-time exception koji ne mora da se hendluje, ali moze.
U narodu je poznat kao: ZVEKETE EKSEPŠN.
[ ziris @ 08.10.2006. 17:47 ] @
ok,hvala sad mi je donekle jasno,ali pošto nisam ja pisala kod već sam ga samo modifikovala,staviću ga ovde pa ako neko može da mi pomogne kako da to izmenim bila bih mu zahvalna...

public class TestBLOBGetBinaryOutputStream {
Connection conn;
public TestBLOBGetBinaryOutputStream( ) {
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver(
));
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","SYSTEM","jeja");

}
catch (SQLException e) {
System.err.println(e.getMessage( ));
e.printStackTrace( );
}
}
public static void main(String[] args)
throws Exception, IOException {
new TestBLOBGetBinaryOutputStream().process( );
}
public void process( ) throws IOException, SQLException {

FileInputStream fin;
OutputStream out;
ResultSet rslt;
Statement stmt = null;
BLOB slika; // NOTE: oracle.sql.BLOB!!!

try {
conn.setAutoCommit(false);

stmt.executeUpdate(
"insert into Slike " +
"( id_slike, slika, komentar,id_mesta,id_smeštaja ) " +
"values " +
"( 1,empty_blob(),'no comment',1,1 ");

// Retrieve the locator

rslt = stmt.executeQuery("SELECT slika FROM Slike WHERE id_slike=1 FOR UPDATE NOWAIT");

rslt.next( );
slika = ((OracleResultSet)rslt).getBLOB(1);

// Now that we have the locator,
// lets store the photo
File binaryFile = new File("D:\\jeja\\diplomski\\slike\\slika1.jpg");
fin = new FileInputStream(binaryFile);
out = slika.getBinaryOutputStream( );
// Get the optimal buffer size from the BLOB
byte[] buffer = new byte[slika.getBufferSize( )];
int length = 0;
while ((length = fin.read(buffer)) != -1) {
out.write(buffer, 0, length);
}
out.close( );
out = null;
fin.close( );
fin = null;
conn.commit( );

}
catch (SQLException e) {
System.err.println("SQL Error: " + e.getMessage( ));
}
catch (IOException e) {
System.err.println("IO Error: " + e.getMessage( ));
}

catch (NullPointerException e){
System.err.println("NullPointer Error:" + e.getMessage());
}

}
protected void finalize( )
throws Throwable {
if (conn != null)
try { conn.close( ); } catch (SQLException ignore) { }
super.finalize( );
}
}

[ antix @ 08.10.2006. 21:55 ] @
Citat:
Java Beograd: Da se nadovezem: javlja se kad pokusavas da radis sa objektom koji je samo deklarisan a ne i inicijalizovan.
To je run-time exception koji ne mora da se hendluje, ali moze.
U narodu je poznat kao: ZVEKETE EKSEPŠN.


Ne bih baš da cjepidlačim ali ovo sa deklarisanjem i inicijalizacijom i nije baš tačno

Objekat može da bude inicijalizovan i na null što znači da NullPointerException može da bude generisan i prilikom rada sa inicijalizovanim objektom.
[ Toxter @ 09.10.2006. 07:56 ] @
Citat:
antix: Objekat može da bude inicijalizovan i na null ...


Ne govorim ni da je ovo tacno ni da nije, vec samo zelim da pitam:
Da li je objekat inicijalizovan ovako? Nije pozvan nijedan od konstruktora (ni default) pa mi se cini da objekat nije
inicijalizovan vec je samo referenci dodeljena vrednost null.
Da li sam u pravu, ako ne zasto?

Pozdrav!

[ antix @ 09.10.2006. 10:41 ] @
Citat:
Toxter: Ne govorim ni da je ovo tacno ni da nije, vec samo zelim da pitam:
Da li je objekat inicijalizovan ovako? Nije pozvan nijedan od konstruktora (ni default) pa mi se cini da objekat nije
inicijalizovan vec je samo referenci dodeljena vrednost null.
Da li sam u pravu, ako ne zasto?

Pozdrav!


Da, u pravu si...lapsus... objekat nije inicijalizovan bez da su pozvani konstruktori itd. Zapravo, ono na šta sam mislio jeste: referenca na objekat može da bude inicijalizovana i na null, a NullPointerException se generiše baš tada.. kada je referenca null, a ti probaš da radiš sa njom kao da nije null.
[ Java Beograd @ 09.10.2006. 14:51 ] @
Čim deklarišeš objekat, on ima referencu na null. Tako, što se pomenutog Exception-a tiče potpuno je isto:

Object o;

i

Object o = null;
[ martin_v @ 10.10.2006. 00:03 ] @
Citat:
ziris:
...
FileInputStream fin;
OutputStream out;
ResultSet rslt;
Statement stmt = null;
BLOB slika; // NOTE: oracle.sql.BLOB!!!

try {
conn.setAutoCommit(false);

stmt.executeUpdate(
"insert into Slike " +
"( id_slike, slika, komentar,id_mesta,id_smeštaja ) " +
"values " +
"( 1,empty_blob(),'no comment',1,1 ");
...


stmt ti ima vrednost null. dodaj stmt = conn.createStatement();
[ ziris @ 10.10.2006. 16:23 ] @
Dodala sam,thanks.. mada mi sad izbacuje drugu grešku SQL Error: ORA-00917: missing comma, ali to već nema veze sa javom, pa ću potražiti pomoć na drugom mestu...
[ Au197/79 @ 10.10.2006. 23:18 ] @
Citat:
Java Beograd: Čim deklarišeš objekat, on ima referencu na null. Tako, što se pomenutog Exception-a tiče potpuno je isto:

Object o;

i

Object o = null;


Da iscepidlačimo do kraja. U primeru o nije objekat. To je samo promenjiva čiji je tip "referenca na (objekat tipa) Object". U čitavoj liniji nema ni jednog objekta! null je samo posebna vrednost koja se može dodeliti promenjivim koje su tipa reference na nešto, a koja znači da promenjiva ne referencira objekat.

A u javi su objekti UVEK inicijalizovani. Čak i ako se u definiciji klase ne napiše konstruktor postoji default, a i pre izvršenja konstruktora JVM pri alociranju memorije taj prostor popuni nulama koje se ovistno od tipa atributa tumače kao 0, 0.0f, 0.0d, 0L, false, null...
[ Java Beograd @ 11.10.2006. 07:36 ] @
Slažem se da su objekti uvek inicijalizovani, jer ako nisu, onda i ne postoje. Jer momenat inicijalizacije je momenat njihovog kreiranja.

Medjutim i u primeru :

Object o = new Object();

'o' nije objekat vec (citiram) To je samo promenjiva čiji je tip "referenca na (objekat tipa) Object".

Gde nam onda nestadoše objekti ?
[ antix @ 11.10.2006. 09:31 ] @
Citat:
Java Beograd: Slažem se da su objekti uvek inicijalizovani, jer ako nisu, onda i ne postoje. Jer momenat inicijalizacije je momenat njihovog kreiranja.

Medjutim i u primeru :

Object o = new Object();

'o' nije objekat vec (citiram) To je samo promenjiva čiji je tip "referenca na (objekat tipa) Object".

Gde nam onda nestadoše objekti ?


Objekti su na heap-u, a sve reference su na stacku. A ti u Javi uvijek radiš ili sa referencama ili
sa primitivnim tipovima i preko referenci manipulišeš objektima na koje ovi pokazuju (referenciraju).