🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
2 messages
2 total messages Started by inst4nce Fri, 17 Jan 2014 09:06
Zapytania SQL w Javie
#153979
Author: inst4nce
Date: Fri, 17 Jan 2014 09:06
58 lines
2367 bytes
Witam

Mam taki kawałek kodu:

------------------------------------------
     wynik = "";
     Statement query;

     String[] SQL = {
		"DROP TABLE AAAA",
		"CREATE TABLE AAAA (ID INTEGER, STR VARCHAR(8))"
     };
	
     try {
       query = c.createStatement();
       for (int i=0; i<SQL.length; i++) {
		wynik = wynik + SQL[i] + "\n";
		query.executeUpdate(SQL[i]);
		wynik = wynik + "Wykonano pomyślnie\n";
       }
     }
     catch (Exception e) {
       wynik = wynik + e.getMessage() + "\n";
     }

     return wynik;
------------------------------------------

Zapytania są w tablicy SQL[], ponieważ w przyszłości ma być ich pełno i 
dlatego wykonują się w pętli.

Chciałbym tak zmodyfikować kod, żeby w przypadku wystąpienia wyjątku, 
program dalej wykonywał zapytania SQL.

W tym przypadku, gdy brakuje tabeli AAAA, zapytanie DROP... nie wykonuje 
się, program przechodzi do catch i koniec:

Zmienna wynik:
--------------
DROP TABLE AAAA
GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -607
Invalid command
Table AAAA does not exist

A chciałbym, żeby było tak:
--------------------------
DROP TABLE AAAA
GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -607
Invalid command
Table AAAA does not exist
CREATE TABLE AAAA (ID INTEGER, STR VARCHAR(8))
Wykonano pomyślnie


pozdrawiam
inst4nce
Re: Zapytania SQL w Javie
#153980
Author: J-23
Date: Fri, 17 Jan 2014 14:26
81 lines
3287 bytes
W dniu 17.01.2014 10:06, inst4nce pisze:
> Witam
>
> Mam taki kawałek kodu:
>
> ------------------------------------------
>      wynik = "";
>      Statement query;
>
>      String[] SQL = {
>          "DROP TABLE AAAA",
>          "CREATE TABLE AAAA (ID INTEGER, STR VARCHAR(8))"
>      };
>
>      try {
>        query = c.createStatement();
>        for (int i=0; i<SQL.length; i++) {
>          wynik = wynik + SQL[i] + "\n";
>          query.executeUpdate(SQL[i]);
>          wynik = wynik + "Wykonano pomyślnie\n";
>        }
>      }
>      catch (Exception e) {
>        wynik = wynik + e.getMessage() + "\n";
>      }
>
>      return wynik;
> ------------------------------------------
>
> Zapytania są w tablicy SQL[], ponieważ w przyszłości ma być ich pełno i
> dlatego wykonują się w pętli.
>
> Chciałbym tak zmodyfikować kod, żeby w przypadku wystąpienia wyjątku,
> program dalej wykonywał zapytania SQL.
>
> W tym przypadku, gdy brakuje tabeli AAAA, zapytanie DROP... nie wykonuje
> się, program przechodzi do catch i koniec:
>
> Zmienna wynik:
> --------------
> DROP TABLE AAAA
> GDS Exception. 335544569. Dynamic SQL Error
> SQL error code = -607
> Invalid command
> Table AAAA does not exist
>
> A chciałbym, żeby było tak:
> --------------------------
> DROP TABLE AAAA
> GDS Exception. 335544569. Dynamic SQL Error
> SQL error code = -607
> Invalid command
> Table AAAA does not exist
> CREATE TABLE AAAA (ID INTEGER, STR VARCHAR(8))
> Wykonano pomyślnie
>
>
> pozdrawiam
> inst4nce
>

Masz fatalnie to napisane.

Zrob tak:

Dopisz do tego metodę sprawdzania czy istnieje jakaś tabelela czy nie. 
Robisz to przez zapytanie SQL a nie przez wyjątek tak jak to robisz 
teraz. Konkretnego zapytania Ci nie podam bo nie podałeś typu bazy 
jakiej używasz.

Radzę lekturę jak działa mechanizm wyjątków bo po za tym ze wiesz że 
występują podczas wystąpienia błędu to nie wiesz jak one działają.

Po za tym do obsługi błędów SQL używa się zazwyczaj klasy SQLException
http://docs.oracle.com/javase/7/docs/api/java/sql/SQLException.html
która jest potomkiem Exception.

Dlaczego SQLException a nie Exception zrozumiesz jak poczytasz o wyjątkach.

Pozdrawiam
J-23
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads