Introduktion till uttalanden

Alla SQL-frågor kan villkorligt delas in i två grupper:

  • Hämta data − Dessa inkluderar SELECT- satsen .
  • Ändra data − Dessa inkluderar INSERT- , UPDATE- och DELETE -satser .

För den första gruppen används Statement- gränssnittsmetoden som redan är bekant för oss - executeQuery() . I princip räcker denna metod för att komma igång. Den täcker en mycket stor andel av frågorna som du kommer att behöva använda i ett riktigt jobb.

Vi kommer in på fler alternativ senare, men för nu råder jag dig att komma ihåg - om du bara vill hämta data från en tabell, så kommer metoden executeQuery () i de allra flesta fall att vara det rätta valet.

För den andra gruppen av förfrågningar måste du använda en annan metod för Statement-gränssnittet - executeUpdate() . Till skillnad från metoden executeQuery() , som returnerar en ResultSet, returnerar denna metod ett heltal som talar om hur många rader i tabellen som ändrades när din fråga kördes .

Till exempel kan du ta bort alla rader med DELETE FROM- anställds uttalande (så var mycket försiktig). I det här fallet kommer metoden executeUpdate() att returnera antalet raderade rader. I vissa situationer kan det vara användbart att känna till antalet ändrade rader för att bygga algoritmer för att arbeta med data.

I princip kan vi avsluta den här frågan - vi har redan sett det viktigaste. För datahämtning - executeQuery() . För att ändra data - executeUpdate() .

Hämta antalet användare i användartabellen med metoden executeQuery() :


	ResultSet results = statement.executeQuery("SELECT Count(*) FROM user");
	results.next();
    int count = results.getInt(1);

executeUpdate()

Metoden executeUpdate() används när din fråga ändrar något i en tabell. Det kan vara vad som helst:

  • UPPDATERA uttalande
  • INSERT uttalande
  • DELETE- sats
  • CALL PROCEDURE uttalande

Denna metod returnerar antalet ändrade (eller raderade) rader.

Låt oss skriva en begäran som kommer att öka lönen för alla våra anställda med 1000 rubel.


   int rowsCount = statement.executeUpdate("UPDATE  employee SET salary = salary+1000");

Efter att jag kört den här koden returnerade den siffran 6 på mitt bord. Mitt bord hade 6 rader. Så alla linjer har ändrats.

Kör()

Ibland kan situationer uppstå i ditt liv när du inte vet exakt vilken begäran du måste utföra - ett urval eller en dataändring. I det här fallet lade skaparna av JDBC till en annan generisk metod till it - execute() .

Denna metod kan användas i stället för metoderna executeQuery() och executeUpdate() . Kommer du ihåg hur dessa metoder skiljde sig? Höger. Resultattyp. Därför kom skaparna av JDBC med en sådan lösning.

Metoden execute() returnerar boolean. Om detta värde är sant , pågick en begäran om datahämtning, och du måste anropa metoden getResultSet() för att hämta data. Exempel:


    boolean hasResults = statement.execute("SELECT Count(*) FROM user");
    if ( hasResults ) {
        	ResultSet results =  statement.getResultSet();
        	results.next();
        	int count = results.getInt(1);
 	}

Om detta värde är falskt pågick en begäran om dataändring, och du måste anropa metoden getUpdateCount() för att få antalet rader ändrade. Exempel:


    boolean hasResults = statement.execute("UPDATE  employee SET salary = salary+1000");
    if ( !hasResults ) {
      	int count = statement.getUpdateCount();
 	}

Låt oss skriva en metod som visar resultatet av en fråga:


	public void executeAndPrintSQLQuery(String sqlQuery) {
 
        boolean hasResults = statement.execute(sqlQuery);
        if ( hasResults ) {
 	          ResultSet results =  statement.getResultSet();
           	System.out.println(“Your request lines below:);
 
           	while (results.next()) {
 	                 Integer id = results.getInt(1);
     	             String name = results.getString(2);
                      System.out.println(results.getRow() + ". " + id + "\t"+ name);
  	        }
       }
 	  else {
            int count = statement.getUpdateCount();
        	System.out.println(“Number of name strings:+ count);
  	}
}

Så här brukar metoden execute() användas i praktiken.