Insert into z selectem

0

Dzień dobry
Mam taki insert który w SQLTools działa a po wpisaniu w android studio nie czy ktoś pomoże ?

insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1)
SELECT SYSDATE,  'A', '103', '000000000','janóź'  from dual
WHERE not exists(select * from CLIENT   where PHONE ='505505500' );

Dodam że insert into + VALUES działa normalnie ale potrzebuje przed insertem sprawdzić telefon czy już istnieje w bazie

3

@Piotr Kowalewski:

SqlLite jest egzotyczną bazką i nie oczekiwał bym, że będzie tak jak na "dużych" serwerach SQL

0
ZrobieDobrze napisał(a):

@Piotr Kowalewski:

SqlLite jest egzotyczną bazką i nie oczekiwał bym, że będzie tak jak na "dużych" serwerach SQL

Baza jest na Oracle to że zapytanie wysyłam z SQLTools nie ma znaczenia.

2

Jedyna baza z jaką powinienes się łączyć bezpisrednio w androidzie to sqlite. Ze wszystkimi innymi tylko interakcja przez API

0

mam problem z wysłaniem konkretnego zapytania do bazy a nie z połączeniem, więc proszę nie odpisywać nie w temacie

0

JAKI BLĄD DOSTAJESZ??????

0
abrakadaber napisał(a):

JAKI BLĄD DOSTAJESZ??????

I tu jest problem żaden po prostu na bazie nie pojawia się wpis, w logcat nie mam błędów
A ten kod:

String query1 = "INSERT INTO client (GID, CLNTNO, CLNTNAM2, CLNTNAM1, PHONE, PLACE, ZIP, CLNTEMAIL, LOYALTYSMS, LOYALTYEMAIL, STATUS, UPDSTMP)"
                    + "VALUES (nextgid.nextval, dr_client.nextval, '"+naz+"', '"+imi+"', 505505505, 'SKI', '16-400', '[email protected]', '"+str_zgoda1+"', 'N', 'A', SYSDATE)";

działa poprawnie i dodaje klienta lecz tu nie ma SELECT

2

A co zwraca sama część select? -- to znaczy:

SELECT SYSDATE,  'A', '103', '000000000','janóź'  from dual
WHERE not exists(select * from CLIENT   where PHONE ='505505500' );
0

Mylisz się. Twoim problemem jest to, że "wpisujesz zapytanie w Android Studio", a nie jest to zapytanie do lokalnej bazy Sqlite.

0

Mylisz się. Mam zapytanie które wysyłam i działa w Android Studio tzn. dodaje klienta itd. ale nie weryfikuje nr. telefonu i tylko o to chodzi
"Nie jest to zapytanie do lokalnej bazy" - nawet w Pythonie możesz wysyłać zapytania do bazy Oracle więc pisanie że to jest problemem świadczy o tym że nie masz w tym temacie doświadczenia

7

@Piotr Kowalewski:

  1. Popracuj nieco nad kulturą, na teraz wchodzisz z postawą "nie działa, a przecież robię dobrze", na sugestie prowadzące do pomocy reagujesz agresywnie, bo przecież wiesz lepiej i robisz dobrze.
  2. Skoro sam piszesz, że nie dostajesz błędu, to znaczy, insert z selectem jest poprawny per se.
  3. Pytanie o to, co zwraca sama część selecta jest właściwe, bo najprawdopodobniej nie zwraca Ci nic. To co zwraca sam select próbujesz zainsertować, a w client pewnie istnieje wiersz z phone = '505505500'.
  4. Powtórz punkt 1.
0
Los Bomberos napisał(a):

@Piotr Kowalewski:

  1. Popracuj nieco nad kulturą, na teraz wchodzisz z postawą "nie działa, a przecież robię dobrze", na sugestie prowadzące do pomocy reagujesz agresywnie, bo przecież wiesz lepiej i robisz dobrze.
  2. Skoro sam piszesz, że nie dostajesz błędu, to znaczy, insert z selectem jest poprawny per se.
  3. Pytanie o to, co zwraca sama część selecta jest właściwe, bo najprawdopodobniej nie zwraca Ci nic. To co zwraca sam select próbujesz zainsertować, a w client pewnie istnieje wiersz z phone = '505505500'.
  4. Powtórz punkt 1.
  1. Przepraszam jeżeli kogoś uraziłem nie miałem zamiaru.

  2. Insert działa w Sql Tools tzn.
    insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) SELECT SYSDATE, 'A', '103', '505505500','PIOTER' from dual where not exists(select * from CLIENT where PHONE ='505505500' ); za pierwszym razem najpierw sprawdzi czy jest taki numer telefonu jeżeli nie doda klienta o tych danych, za drugim razem jak go puścisz nic nie zrobi bo taki numer istnieje

Więc tak insert jest poprawny - pytanie dlaczego nie działa w Android Studio gdzie zwykły insert bez select'a działa.

Działający INSERT bez SELECT w Android Studio który doda klienta ale nie zweryfikuje istnienia nr tel w bazie

String query1 = "INSERT INTO client (GID, CLNTNO, CLNTNAM2, CLNTNAM1, PHONE, PLACE, ZIP, CLNTEMAIL, LOYALTYSMS, LOYALTYEMAIL, STATUS, UPDSTMP)"
                    + "VALUES (nextgid.nextval, dr_client.nextval, '"+naz+"', '"+imi+"', 555555555, 'SKI', '10-000', '[email protected]', '"+str_zgoda1+"', 'N', 'A', SYSDATE)";
  1. Co zwraca sam select - użyte zostało from dual (taka wirtualna tablica aby użyć select oraz where not exists w zapytaniu) więc na bazie tworzy się wirtualna pusta baza z kolumnami 'SYSDATE' 'A' itd. i tyle co robi sam select

  2. Jeszcze raz PRZEPRASZAM

0
Piotr Kowalewski napisał(a):
  1. Insert działa w Sql Tools tzn.
    insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) SELECT SYSDATE, 'A', '103', '505505500','PIOTER' from dual where not exists(select * from CLIENT where PHONE ='505505500' ); za pierwszym razem najpierw sprawdzi czy jest taki numer telefonu jeżeli nie doda klienta o tych danych, za drugim razem jak go puścisz nic nie zrobi bo taki numer istnieje

Więc tak insert jest poprawny - pytanie dlaczego nie działa w Android Studio gdzie zwykły insert bez select'a działa.

Moment.
Chcesz powiedzieć, że efekt dwukrotnego wywołania:

insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) 
SELECT SYSDATE,  'A', '103', 'turbo_unikalny_numer_1_na_potrzeby_sql_tools','PIOTER'  from dual   
where not exists(select * from CLIENT   where PHONE ='turbo_unikalny_numer_1_na_potrzeby_sql_tools' );

w SQLTools powoduje za pierwszym razem dodanie numeru, za drugim nie (czyli efekt zgodny z oczekiwaniem), a

insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) 
SELECT SYSDATE,  'A', '103', 'turbo_unikalny_numer_1_na_potrzeby_android_studio','PIOTER'  from dual   
where not exists(select * from CLIENT   where PHONE ='turbo_unikalny_numer_1_na_potrzeby_android_studio' );

w Android Studio nie działa ani za pierwszym, ani drugim razem?

sprawdź dla
turbo_unikalny_numer_1_na_potrzeby_sql_tools != turbo_unikalny_numer_1_na_potrzeby_android_studio != jakikolwiek istniejący w bazie

0

@Piotr Kowalewski: Nie mylmy pojęć. W "pythonie" możesz wysłać do bazy danych zapytanie, bo język ten zazwyczaj używany jest jako backend. Aplikacja android jest jakby frontem i powinna się komunikować z bazą poprzez API. Zrobisz sobie krzywdę jak będziesz dalej w tą stronę brnął IMO

0

@Piotr Kowalewski: napisz, w jaki sposób wykonujesz zapytanie w Android Studio, bez tego nie wiadomo o czym mowa. Jeżeli łączysz się z aplikacji mobilnej bezpośrednio z bazą danych, to nigdy nie będzie dobrze działać

Z drugiej strony, nic mi nie wiadomo o tym, żeby z aplikacji mobilnej dało się bezpośrednio połączyć z zewnętrzną bazą danych Oracle. Zacznij więc od tego co dokładnie robisz, jak wykonujesz zapytanie i podaj kod, który to robi w Android Studio. Inaczej nie da się nic powiedzieć oprócz tego że zapytanie jako takie jest poprawne.

0
Los Bomberos napisał(a):
Piotr Kowalewski napisał(a):
  1. Insert działa w Sql Tools tzn.
    insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) SELECT SYSDATE, 'A', '103', '505505500','PIOTER' from dual where not exists(select * from CLIENT where PHONE ='505505500' ); za pierwszym razem najpierw sprawdzi czy jest taki numer telefonu jeżeli nie doda klienta o tych danych, za drugim razem jak go puścisz nic nie zrobi bo taki numer istnieje

Więc tak insert jest poprawny - pytanie dlaczego nie działa w Android Studio gdzie zwykły insert bez select'a działa.

Moment.
Chcesz powiedzieć, że efekt dwukrotnego wywołania:

insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) 
SELECT SYSDATE,  'A', '103', 'turbo_unikalny_numer_1_na_potrzeby_sql_tools','PIOTER'  from dual   
where not exists(select * from CLIENT   where PHONE ='turbo_unikalny_numer_1_na_potrzeby_sql_tools' );

w SQLTools powoduje za pierwszym razem dodanie numeru, za drugim nie (czyli efekt zgodny z oczekiwaniem), a

insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) 
SELECT SYSDATE,  'A', '103', 'turbo_unikalny_numer_1_na_potrzeby_android_studio','PIOTER'  from dual   
where not exists(select * from CLIENT   where PHONE ='turbo_unikalny_numer_1_na_potrzeby_android_studio' );

w Android Studio nie działa ani za pierwszym, ani drugim razem?

sprawdź dla
turbo_unikalny_numer_1_na_potrzeby_sql_tools != turbo_unikalny_numer_1_na_potrzeby_android_studio != jakikolwiek istniejący w bazie

Tak w SQLTools jest tak jak napisałeś zgodnie z moimi oczekiwaniami, natomiast w Android studio w ogóle nie dodaje ani za pierwszym razem ani za drugim razem

tego trochę nie rozumiem

sprawdź dla
turbo_unikalny_numer_1_na_potrzeby_sql_tools != turbo_unikalny_numer_1_na_potrzeby_android_studio != jakikolwiek istniejący w bazie

0

Połączenie z bazą mam i jestem w stanie dodać do bazy wpis poniższym kodem:

String query1 = "INSERT INTO client (GID, CLNTNO, CLNTNAM2, CLNTNAM1, PHONE, PLACE, ZIP, CLNTEMAIL, LOYALTYSMS, LOYALTYEMAIL, STATUS, UPDSTMP)"
                    + "VALUES (nextgid.nextval, dr_client.nextval, '"+naz+"', '"+imi+"', 505505505, 'SKI', '16-400', '[email protected]', '"+str_zgoda1+"', 'N', 'A', SYSDATE)";

Co próbuję zrobić to przenieść działające zapytanie powyżwej z SELECT oraz WHERE NOT EXISTS które działa gdy wysyłamy je w np. (SqlTools czySQL Managment studio) a w Android Studio nie

1

Ok, skoro nie chcesz napisać co rozumiesz przez "wykonanie zapytania w Android Studio", dalsza dyskusja jest bezcelowa.

0
gajusz800 napisał(a):

Ok, skoro nie chcesz napisać co rozumiesz przez "wykonanie zapytania w Android Studio", dalsza dyskusja jest bezcelowa.

Sorki ale nie rozumiem co masz na myśli pisząc że nie chce napisać?
dla mnie wykonanie zapytania jest tym co Tobie napisałem czyli:

String query1 = "INSERT INTO client (GID, CLNTNO, CLNTNAM2, CLNTNAM1, PHONE, PLACE, ZIP, CLNTEMAIL, LOYALTYSMS, LOYALTYEMAIL, STATUS, UPDSTMP)"
                    + "VALUES (nextgid.nextval, dr_client.nextval, '"+naz+"', '"+imi+"', 505505505, 'SKI', '16-400', '[email protected]', '"+str_zgoda1+"', 'N', 'A', SYSDATE)";
0

Podeślij kod, najlepiej cały

0
Piotr Kowalewski napisał(a):
gajusz800 napisał(a):

Ok, skoro nie chcesz napisać co rozumiesz przez "wykonanie zapytania w Android Studio", dalsza dyskusja jest bezcelowa.

Sorki ale nie rozumiem co masz na myśli pisząc że nie chce napisać?
dla mnie wykonanie zapytania jest tym co Tobie napisałem czyli:

String query1 = "INSERT INTO client (GID, CLNTNO, CLNTNAM2, CLNTNAM1, PHONE, PLACE, ZIP, CLNTEMAIL, LOYALTYSMS, LOYALTYEMAIL, STATUS, UPDSTMP)"
+ "VALUES (nextgid.nextval, dr_client.nextval, '"+naz+"', '"+imi+"', 505505505, 'SKI', '16-400', '[email protected]', '"+str_zgoda1+"', 'N', 'A', SYSDATE)";

try {

            Class.forName(DRIVER);
            this.connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            
            String query1 = "INSERT INTO client (GID, CLNTNO, CLNTNAM2, CLNTNAM1, PHONE, PLACE, ZIP, CLNTEMAIL, LOYALTYSMS, LOYALTYEMAIL, STATUS, UPDSTMP)"
                      + "VALUES (nextgid.nextval, dr_client.nextval, '"+naz+"', '"+imi+"', 505505505, 'SKI', '16-400', '[email protected]', '"+str_zgoda1+"', 'N', 'A', SYSDATE)";

            connection.close();
        } catch (Exception e) {

Ten kod działa tylko w miejsce String query1 próbuje wstawić coś takiego:

insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) SELECT SYSDATE,  'A', '104', '505505501','PIOTER'  from dual   where not exists(select * from CLIENT   where PHONE ='505505501' );

i już wtedy nie działa, w logcat brak błędów, brak błędu po stronie oracle który się wyświetla na ekranie jak jest błąd np. brak pola GID które jest wymagane

0

Tak w SQLTools jest tak jak napisałeś zgodnie z moimi oczekiwaniami, natomiast w Android studio w ogóle nie dodaje ani za pierwszym razem ani za drugim razem

tego trochę nie rozumiem

sprawdź dla
turbo_unikalny_numer_1_na_potrzeby_sql_tools != turbo_unikalny_numer_1_na_potrzeby_android_studio != jakikolwiek istniejący w bazie

No właśnie to jest kluczowe, bo najprawdopodobniej popełniasz błąd logiczny w rozumieniu samego inserta.
Ogólnie od strony bazodanowej mówi: dodaj rekord, jeśli w bazie nie istnieje rekord z numerem telefonu = jakiśtam.
Zrób coś takiego.

select max(phone) from clients;

Załóżmy, że dostaniesz 690223225. To znaczy, że wszystkie numery telefonu są <= 690223225.
Teraz robisz testy, w sqltools dla numeru telefonu 691000000 (bo na pewno takiego w bazie nie ma), w android studio dla 692000000 (bo na pewno takiego w bazie nie ma).
Czyli, w sqltools wykonaj

insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) 
SELECT SYSDATE,  'A', '103', 691000000,'PIOTER'  from dual   
where not exists(select * from CLIENT   where PHONE = 691000000 );

Po pierwszym wykonaniu powinien dodać się rekord dla Piotera.
Po drugim wykonaniu nie powinno się nic dodać, bo numer telefonu 691000000 jest już zajęty.

Teraz w android studio sprawdzasz:

insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) 
SELECT SYSDATE,  'A', '103', 692000000,'PIOTER'  from dual   
where not exists(select * from CLIENT   where PHONE =692000000 );

Po pierwszym wykonaniu powinien dodać się rekord dla Piotera.
Po drugim wykonaniu nie powinno się nic dodać, bo numer telefonu 692000000 jest już zajęty.

0
Los Bomberos napisał(a):

Tak w SQLTools jest tak jak napisałeś zgodnie z moimi oczekiwaniami, natomiast w Android studio w ogóle nie dodaje ani za pierwszym razem ani za drugim razem

tego trochę nie rozumiem

sprawdź dla
turbo_unikalny_numer_1_na_potrzeby_sql_tools != turbo_unikalny_numer_1_na_potrzeby_android_studio != jakikolwiek istniejący w bazie

No właśnie to jest kluczowe, bo najprawdopodobniej popełniasz błąd logiczny w rozumieniu samego inserta.
Ogólnie od strony bazodanowej mówi: dodaj rekord, jeśli w bazie nie istnieje rekord z numerem telefonu = jakiśtam.
Zrób coś takiego.

select max(phone) from clients;

Załóżmy, że dostaniesz 690223225. To znaczy, że wszystkie numery telefonu są <= 690223225.
Teraz robisz testy, w sqltools dla numeru telefonu 691000000 (bo na pewno takiego w bazie nie ma), w android studio dla 692000000 (bo na pewno takiego w bazie nie ma).
Czyli, w sqltools wykonaj

insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) 
SELECT SYSDATE,  'A', '103', 691000000,'PIOTER'  from dual   
where not exists(select * from CLIENT   where PHONE = 691000000 );

Po pierwszym wykonaniu powinien dodać się rekord dla Piotera.
Po drugim wykonaniu nie powinno się nic dodać, bo numer telefonu 691000000 jest już zajęty.

Teraz w android studio sprawdzasz:

insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) 
SELECT SYSDATE,  'A', '103', 692000000,'PIOTER'  from dual   
where not exists(select * from CLIENT   where PHONE =692000000 );

Po pierwszym wykonaniu powinien dodać się rekord dla Piotera.
Po drugim wykonaniu nie powinno się nic dodać, bo numer telefonu 692000000 jest już zajęty.

Niestety wciąż nie działa w Android Studio, mam wrażenie że chodzi tu o jakieś zasady wpisywania w Android Studio ponieważ gdy np. działający kod :

String query1 = "INSERT INTO client (GID, CLNTNO, CLNTNAM2, CLNTNAM1, PHONE, PLACE, ZIP, CLNTEMAIL, LOYALTYSMS, LOYALTYEMAIL, STATUS, UPDSTMP)"
                  + "VALUES (nextgid.nextval, dr_client.nextval, '"+naz+"', '"+imi+"', 505505505, 'SKI', '16-400', '[email protected]', '"+str_zgoda1+"', 'N', 'A', SYSDATE)";

nie rozbiję na dwie linijki dodając + przy następnej to też nie działa w jednej. Może to coś komuś podpowie :(

Próbowałem

"insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1)" 
+"SELECT SYSDATE,  'A', '103', 692000000,'PIOTER'  from dual"  
+"where not exists(select * from CLIENT   where PHONE =692000000 );"
1

Problem jest w tym, że łączysz się do bazy danych z aplikacji mobilnej. To nigdy nie będzie działać i nic nie możesz z tym zrobić. To, że w logcat nie ma błędów o niczym nie świadczy. Nie będzie to działać i już.

1
Piotr Kowalewski napisał(a):

try {

        Class.forName(DRIVER);
        this.connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        
        String query1 = "INSERT INTO client (GID, CLNTNO, CLNTNAM2, CLNTNAM1, PHONE, PLACE, ZIP, CLNTEMAIL, LOYALTYSMS, LOYALTYEMAIL, STATUS, UPDSTMP)"
                  + "VALUES (nextgid.nextval, dr_client.nextval, '"+naz+"', '"+imi+"', 505505505, 'SKI', '16-400', '[email protected]', '"+str_zgoda1+"', 'N', 'A', SYSDATE)";

        connection.close();
    } catch (Exception e) {

Ten kod działa

to jest NIEPRAWDA - tworzysz connection, sklejasz SQLa zamykasz connection i tyle - NIGDZIE NIE MA wywołania tego zapytania

0
Statement statement = connection.createStatement();
StringBuffer stringBuffer = new StringBuffer();
ResultSet resultSet = statement.executeQuery("select * from client where CLNTNAM2 LIKE '%PIET%' ");
int count = statement.executeUpdate(query1);
System.out.println("Number of rows updated in database =  " + count);
while (resultSet.next()) {
    stringBuffer.append(resultSet.getString(4) + "\n");
}
textView.setText(stringBuffer.toString());
connection.close
3

@Piotr Kowalewski: jesteś tu nowy i nie wiem, czy generalnie nowy w internetach (być może wcześniej nie szukałeś żadnej pomocy na dowolny temat zadając samemu pytanie) czy co ale to jest Twój 7 post (nie licząc komentarzy, które BTW nie są do odpowiadania na pytania!) a my dalej nie mamy nawet kilku linijek składnego kodu. Na pytania odpowiadasz albo z pozycji "wiem lepiej" albo "po co się odzywasz jak i tak twoja odpowiedź jest gó*** warta" (to akurat już ktoś Ci napisał).

Podawałeś kod kilka razy ale dalej nie jest on cały - ten z Ostatniego Twojego posta i komentarzy nie składa się do kupy, choćby brakuje tego spornego SELECT w zapytaniu.

  1. skup się i daj kawałek kodu, który od początku do końca ma dodać rekord do bazy

  2. widzę, że zapisujesz wyniki poszczególnych operacji do zmiennej i potem je sobie wyświetlasz - to jest OK ale wyświetl sobie "gotowy" SQL, który próbujesz wykonać - nie chce mi się na piechotę sprawdzać ale może masz po prostu błąd podczas sklejania zapytania (BTW sklejanie zapytania to najgorsze rozwiązanie - nie ma tam jakichś parametrów czy czegoś takiego w javie?)

  3. nie odpowiadaj w komentarzach - po pierwsze one są do krótkich uwag a po drugie nie ma tam formatowania kodu

    A teraz bardziej do brzegu - ktoś Ci pisał, żebyś wykonał sam SELECT i zobaczył co Ci zwróci a Ty odpisałeś, że się nie da - da się. Dla takigo zapytania

   insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1)
   SELECT SYSDATE,  'A', '103', '000000000','janóź'  from dual
   WHERE not exists(select * from CLIENT   where PHONE ='505505500' );

chodzi o wykonanie tego

select * from CLIENT   where PHONE ='505505500' 

przed insertem i zobaczenia co zwróci

0
abrakadaber napisał(a):

@Piotr Kowalewski: jesteś tu nowy i nie wiem, czy generalnie nowy w internetach (być może wcześniej nie szukałeś żadnej pomocy na dowolny temat zadając samemu pytanie) czy co ale to jest Twój 7 post (nie licząc komentarzy, które BTW nie są do odpowiadania na pytania!) a my dalej nie mamy nawet kilku linijek składnego kodu. Na pytania odpowiadasz albo z pozycji "wiem lepiej" albo "po co się odzywasz jak i tak twoja odpowiedź jest gó*** warta" (to akurat już ktoś Ci napisał).

Podawałeś kod kilka razy ale dalej nie jest on cały - ten z Ostatniego Twojego posta i komentarzy nie składa się do kupy, choćby brakuje tego spornego SELECT w zapytaniu.

  1. skup się i daj kawałek kodu, który od początku do końca ma dodać rekord do bazy

  2. widzę, że zapisujesz wyniki poszczególnych operacji do zmiennej i potem je sobie wyświetlasz - to jest OK ale wyświetl sobie "gotowy" SQL, który próbujesz wykonać - nie chce mi się na piechotę sprawdzać ale może masz po prostu błąd podczas sklejania zapytania (BTW sklejanie zapytania to najgorsze rozwiązanie - nie ma tam jakichś parametrów czy czegoś takiego w javie?)

  3. nie odpowiadaj w komentarzach - po pierwsze one są do krótkich uwag a po drugie nie ma tam formatowania kodu

    A teraz bardziej do brzegu - ktoś Ci pisał, żebyś wykonał sam SELECT i zobaczył co Ci zwróci a Ty odpisałeś, że się nie da - da się. Dla takigo zapytania

   insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1)
   SELECT SYSDATE,  'A', '103', '000000000','janóź'  from dual
   WHERE not exists(select * from CLIENT   where PHONE ='505505500' );

chodzi o wykonanie tego

select * from CLIENT   where PHONE ='505505500' 

przed insertem i zobaczenia co zwróci

  1. Oto cała funkcja która ma zapisać klienta o numerze tel którego nie ma na bazie (przed wybraniem telefonu zawsze weryfikuję aby tego numeru nie było w bazie - bo za pierwszym razem ma dodać go a za drugim nic nie zrobić)
     public void buttonConnectToOracleDB(View view) {
     imi = String.valueOf(inputText.getText());
     naz = String.valueOf(inputText2.getText());
     textView.setText(imi);
     boolean cb_checked = ((CheckBox) zgoda1).isChecked();
         if (cb_checked) {
         str_zgoda1 = "Y";
         Toast.makeText(MainActivity.this, "Checkbox is checked  " + str_zgoda1, Toast.LENGTH_SHORT).show();
    
     } else {
         str_zgoda1 = "N";
         Toast.makeText(MainActivity.this, "Checkbox is unchecked  " + str_zgoda1, Toast.LENGTH_SHORT).show();
    
     }
    
     try {
    
         Class.forName(DRIVER);
         this.connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    
         Toast.makeText(this, "ZAPISANO KLIENTA", Toast.LENGTH_LONG).show();
    
         String query1 = "insert into CLIENT (UPDSTMP, STATUS, GID, PHONE, CLNTNAM1) SELECT SYSDATE, 'A', '104', '500000555','PIOTER' from dual where not exists(select * from CLIENT   where PHONE ='500000555')";
    
    
    
    
    
         Statement statement = connection.createStatement();
         StringBuffer stringBuffer = new StringBuffer();
         ResultSet resultSet = statement.executeQuery("select * from client where CLNTNAM2 LIKE '%PIET%' ");
         int count = statement.executeUpdate(query1);
         System.out.println("Number of rows updated in database =  " + count);
    
         while (resultSet.next()) {
             stringBuffer.append(resultSet.getString(4) + "\n");
         }
         textView.setText(stringBuffer.toString());
    
         connection.close();
     } catch (Exception e) {
    
     }
     }
    }
    
  2. "błąd podczas sklejania" tego nie wiem
  3. jeżeli chodzi o sam select to zawsze wybieram numer który nie istnieje bo oczekuję że za pierwszym razem go doda a za drugim nie
0

Temat można zamknąć udało mi się.

0

(...) udało mi sie - niestety ale nie. Po kodzie widzę, że jesteś w trakcie nauki. Najlepsze co dla siebie zrobisz, to wywalisz to i napiszesz od nowa, zgodnie z praktykami. Takiego kodu rekruterowi i tak nie pokażesz, z miejsca ci podziękuje. Zastanów się jeszcze raz co chcesz osiągnąć, bo apek mobilnych się tak nie pisze. Życzę powodzenia

1 użytkowników online, w tym zalogowanych: 0, gości: 1