Tässä opetusohjelmassa kerrotaan, miten JDBC ResultSet -rajapintaa käytetään tietojen hakemiseen. Tutustumme myös ResultSetMetaData- ja DatabaseMetaData-rajapintoihin esimerkkien avulla:
Vuonna JDBC DriverManager opetusohjelma JDBC-opetussarja , opimme käyttämään JDBC DriverManageria ja sen menetelmiä, JDBC PreparedStatementia Java-sovelluksissa.
Tässä opetusohjelmassa käsittelemme loput JDBC:n rajapinnat. Olemme käsitelleet Statement-, PreparedStatement- ja CallableStatement-rajapintoja aiemmissa opetusohjelmissamme.
Tässä tutustumme JDBC ResultSet-, ResultSetMetaData- ja DatabaseMetaData-rajapintoihin, niiden metodeihin ja metodien käyttöön Java-ohjelmassa.
JDBC ResultSet -rajapinta
ResultSet-rajapinta kuuluu java.sql-pakettiin. Sitä käytetään tallentamaan tietoja, jotka palautetaan tietokantataulukosta SQL-lausekkeiden suorittamisen jälkeen Java-ohjelmassa. ResultSet-olio ylläpitää kursoria tulostietojen kohdalla. Oletusarvoisesti kursori sijaitsee ennen tulostietojen ensimmäistä riviä.
next()-metodia käytetään kursorin siirtämiseen seuraavaan kohtaan eteenpäin. Se palauttaa FALSE, jos tietueita ei ole enää jäljellä. Se hakee tietoja kutsumalla executeQuery()-metodia käyttäen mitä tahansa statement-objekteja. Se voi olla Statement-, PreparedStatement- tai CallableStatement-objekti. PreparedStatement- ja CallableStatement-rajapinnat ovat Statement-olion alirajapintoja.rajapinta.
Lausunto Käyttöliittymä
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery("Select * from EMPLOYEE_DETAILS");
PreparedStatement-rajapinta
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery("Select * from EMPLOYEE_DETAILS");
Voimme käyttää getX()-menetelmää saadaksemme sarakkeiden tiedot, kun iteroimme tulosten läpi, jossa X - on sarakkeen tietotyyppi. Voimme käyttää joko sarakkeiden nimiä tai indeksiä saadaksemme arvot getX()-menetelmillä.
while(rs1.next()) { int empNum = rs1.getInt("empNum"); String sukunimi = rs1.getString("sukunimi"); String etunimi = rs1.getString("etunimi"); String sähköposti = rs1.getString("sähköposti"); String deptNum = rs1.getString("deptNum"); String palkka = rs1.getString("palkka"); System.out.println(empNum + "" +" +sukunimi+ "" +esimerkki+ " "" +sähköposti +""", "+deptNum +"""," + palkka); }
Voimme myös mainita sarakkeen indeksinumeron sarakkeen nimen sijasta getX()-metodeissa.
while(rs1.next()) { int empNum = rs1.getInt(1); String sukunimi = rs1.getString(2); String etunimi = rs1.getString(3); String sähköposti = rs1.getString(4); String deptNum = rs1.getString(5); String palkka = rs1.getString(6); System.out.println(empNum + "," +sukunimi+ "," +sukunimi+ "," +sukunimi+ "," +sähköposti +", "+deptNum +"," + palkka); }
ResultSet-tyypit
Oletusarvoisesti voimme iteroida tietoja/arvoja ResultSetissä, joka on palautettu suoritetun SQL-lauseen tulosteena eteenpäin. Voimme iteroida arvoja muihin suuntiin käyttämällä Scrollable ResultSetiä. Voimme määrittää ResultSetin tyypin ja samanaikaisuuden luodessamme Statement-, PreparedStatement- ja CallableStatement-objekteja.
ResultSetissä on 3 tyyppiä. Ne ovat:
- TYPE_FORWARD_ONLY: Se on oletusvaihtoehto, jossa kursori liikkuu alusta loppuun eli eteenpäin.
- TYPE_SCROLL_INSENSITIVE: Tässä tyypissä kursori liikkuu sekä eteen- että taaksepäin. Jos teemme muutoksia tietoihin tallennettujen tietojen iteroinnin aikana, se ei päivity tietokantaan, jos joku muuttaa tietoja tietokannassa. Koska tietokannassa on tiedot siitä lähtien, kun SQL-kysely palauttaa tiedot.
- TYPE_SCROLL_SENSITIVE: Se on samanlainen kuin TYPE_SCROLL_INSENSITIVE, mutta erona on se, että jos joku päivittää tietoja sen jälkeen, kun SQL-kysely on palauttanut tiedot, se heijastaa muutokset tietokokonaisuuteen iteroinnin aikana.
ResultSet-rinnakkaisuus
ResultSetissä on 2 rinnakkaistoimintatilaa. Ne ovat:
- ResultSet.CONCUR_READ_ONLY: Se on oletusarvoinen samanaikaisuustila. Voimme vain lukea ResultSetissä olevia tietoja. Päivitys ei ole mahdollista.
- ResultSet.CONCUR_UPDATABLE: Voimme päivittää ResultSet-olion tiedot.
Jotkin tietokannat eivät tue kaikkien ResultSet-tyyppien samanaikaisuustilaa. Siinä tapauksessa meidän on tarkistettava, tukevatko ne haluamaamme tyyppiä ja samanaikaisuustilaa käyttämällä supportsResultSetConcurrency()-metodia.
ResultSet-rajapinnan menetelmät
ResultSet-metodeja on 4 luokkaa. Ne ovat:
- Navigointimenetelmät
- Getter-menetelmät
- Asettaja Menetelmät
- Erilaiset menetelmät
Ensin keskustelemme navigointimenetelmistä ja siirrymme sitten eteenpäin.
#1) Navigointimenetelmät
Tätä menetelmää käytetään kursorin siirtämiseen tietokokonaisuuden sisällä.
- Boolean absolute(int row): Sitä käytetään siirtämään kursori parametrissa mainitulle riville ja palauttamaan true, jos toiminto onnistuu, muuten palautetaan false.
- Void afterLast(): Se saa ResultSet-kursorin siirtymään viimeisen rivin jälkeen.
- Void beforeFirst(): Se saa ResultSet-kursorin siirtymään ennen ensimmäistä riviä.
- Boolean first(): Se saa ResultSet-kursorin siirtymään ensimmäiselle riville. Se palauttaa True, jos toiminto onnistuu, muuten False.
- Boolean last(): Se saa ResultSet-kursorin siirtymään viimeiselle riville. Se palauttaa True, jos toiminto onnistuu, muuten False.
- Boolean next(): Se saa ResultSet-kursorin siirtymään seuraavalle riville. Se palauttaa True, jos tietueita on enemmän, ja False, jos tietueita ei ole enää.
- Boolean previous(): Se saa ResultSet-kursorin siirtymään edelliselle riville. Se palauttaa True, jos toiminto onnistuu, muuten False.
- Boolean relative(): Se siirtää kohdistimen annettuun rivimäärään joko eteen- tai taaksepäin.
- Int getRow(): Se palauttaa ResultSet-olion nykyisen rivinumeron.
- Void moveToCurrentRow(): Se siirtää kohdistimen takaisin nykyiselle riville, jos se on tällä hetkellä insert-rivillä.
- Void moveToInsertRow(): Se siirtää kursorin tietylle riville lisätäksemme rivin tietokantaan. Se muistaa kursorin nykyisen sijainnin. Voimme siis käyttää moveToCurrentRow()-metodia siirtääksemme kursorin nykyiselle riville lisäämisen jälkeen.
Tässä opetusohjelmassa kaikki ohjelmat on kirjoitettu Javalla. Olemme käyttäneet Java 8 -versiota ja Oracle DB:tä.
>>Voit ladata Oraclen ohjelmiston täältä.
>>Voit ladata Java-version 8 täältä osoitteesta
Siinä on vaiheittainen Java-asennusprosessi.
JDBC ResultSet -esimerkkiohjelma: (Navigointimenetelmien käyttö)
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ResultSet_Example { public static void main(String[] args) throws ClassNotFoundException { // TODO Automaattisesti luotu metodin tynkä //Valintakysely String select_query = "select * from".employee_details"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Yhteyden muodostaminen Oracle DB:hen try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:X E")) { //Luodaan DatabaseMetaData-objekti DatabaseMetaData dbmd = conn.getMetaData(); //Tarkistetaan, tukeeko ajuri vieritystyyppiä ja concur updatable boolean isSupportResultSetType =dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Valmistellun lausekkeen luominen PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); / // Siirretään kursori ensimmäiselle riville rs.first();System.out.println("ENSIMMÄINEN RIVI \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Monitoimi kursorin siirtäminen kohtaan viimeinen rivi rs.last(); System.out.println("VIIMEINEN RIVI \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Monitoimi kursorin siirtäminen kohtaan ensimmäinen rivi ennen ensimmäistä rs.beforeFirst();System.out.println("Kursori osoittaa ennen ensimmäistä riviä. Käytä next() siirtyäksesi eteenpäin"); / // Siirretään kursori osoittamaan ensimmäistä riviä käyttämällä next() rs.next(); System.out.println("ENSIMMÄINEN RIVI \n EMP NUM = " + rs.getInt("empNum") + "\n SUKUNIMI = "+ rs.getString(2)+"\n ENSIMMÄINEN NIMI = " + rs.getString(3)"; // Siirretään kursori osoittamaan viimeisen rivin jälkeen rs.afterLast(); System.out.println("Kursori").osoittaa viimeisen rivin jälkeen. Käytä previous() siirtyäksesi taaksepäin"); // Siirretään kursori osoittamaan viimeistä riviä käyttämällä previous() rs.previous(); System.out.println("LAST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); // Siirretään kursori osoittamaan kolmatta riviä rs.absoluuttinen(3); System.out.println("Kursori osoittaa kolmannelle riville.rivi"); System.out.println("KOLMAS RIVI \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); // Siirretään kursori osoittamaan kolmannen rivin edellistä edellistä riviä rs.relative(-1); System.out.println("Kursori osoittaa 3. rivin edellistä riviä edeltävälle riville"); System.out.println("TOINEN RIVI \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+rs.getString(2)+"\n ENSIMMÄISNIMI = " + rs.getString(3)); // Siirretään kursori osoittamaan 4. riviä 2. rivin jälkeen rs.relative(4); System.out.println("Kursori osoittaa 4. riviä 2. rivin jälkeen"); System.out.println("Kuudes rivi \n EMP NUM = " + rs.getInt("empNum") + "\n SUKUNIMI = "+ rs.getString(2)+"\n ENSIMMÄISNIMI = " + rs.getString(3)); // Siirretään kursori osoittamaan nykyistä riviä.System.out.println(" Current Row = " + rs.getRow()); } } } catch (SQLException e) { e.printStackTrace(); } } } }
OUTPUT:
Employee_details-taulukon tiedot
Selitys:
Yllä olevassa ohjelmassa olemme toteuttaneet ResultSetissä first(), last(), beforeFirst(), afterLast(), next(), previous(), absolute(), relative() ja getRow() -metodit. Näiden metodien käyttämiseksi asetamme ResultSet.TYPE_SCROLL_SENSITIVE- ja ResultSet.CONCUR_UPDATABLE-arvot prepareStatement-metodissa.
Seuraavaksi keskustelemme siitä, mitkä ovat ResultSetin Getter-metodit:
#2) Getter-metodit
ResultSet on tallentanut taulukon tiedot tietokannasta. Getter-metodeja käytetään hakemaan taulukon arvot ResultSetistä. Sitä varten meidän on annettava joko sarakkeen indeksin arvo tai sarakkeen nimi.
Seuraavassa on ResultSet-olion getter-metodit:
- int getInt(int ColumnIndex): Sitä käytetään saadaksesi määritetyn sarakkeen Index arvon int-tietotyyppisenä.
- float getFloat(int ColumnIndex): Sitä käytetään saadaksesi määritetyn sarakkeen Indeksi arvon float-tietotyyppinä.
- java.sql.date getDate(int ColumnIndex): Sitä käytetään saadaksesi määritetyn sarakkeen Indeksi arvon päivämääräarvona.
- int getInt(String ColumnName): Sitä käytetään saadaksesi määritetyn sarakkeen arvon int-tietotyyppisenä.
- float getFloat(String ColumnName): Sitä käytetään saadaksesi määritetyn sarakkeen arvon float-tietotyyppisenä.
- Java.sql.date getDate(String ColumnName): Sitä käytetään saadaksesi määritetyn sarakkeen arvon päivämääräarvona.
ResultSet-rajapinnassa on getter-metodit kaikille primitiivisille tietotyypeille (Boolean, long, double) ja String myös ResultSet-rajapinnassa. Voimme saada tietokannasta myös array- ja binäärityyppistä dataa. Siihen on myös metodeja.
#3) Setter/Updater-menetelmät
Voimme päivittää arvon tietokannassa ResultSet Updater -menetelmien avulla. Se on samanlainen kuin Getter-menetelmät, mutta tässä meidän on välitettävä tietyn sarakkeen arvot/tiedot, jotka haluamme päivittää tietokantaan.
Seuraavassa on ResultSet-olion päivitysmenetelmät:
- void updateInt(int ColumnIndex, int Value): Sitä käytetään päivittämään määritetyn sarakkeen Index arvo int-arvolla.
- void updateFloat(int ColumnIndex, float f): Sitä käytetään päivittämään määritetyn sarakkeen Index arvo kelluvalla arvolla.
- void updateDate(int ColumnIndex, Date d): Sitä käytetään päivittämään määritetyn sarakkeen Index arvo päivämäärän arvolla.
- void updateInt(String ColumnName, int Value): Sitä käytetään päivittämään määritetyn sarakkeen arvo annetulla int-arvolla.
- void updateFloat(String ColumnName, float f): Sitä käytetään päivittämään määritetyn sarakkeen arvo annetulla kelluvalla arvolla.
- Java.sql.date getDate(String ColumnName): Sitä käytetään päivittämään määritetyn sarakkeen arvo annetulla päivämääräarvolla.
ResultSet-rajapinnassa on päivitysmenetelmät kaikille primitiivisille tietotyypeille (Boolean, long, double) ja Stringille.
Päivitysmenetelmät päivittävät vain ResultSet-olion tiedot. Arvot päivitetään tietokantaan insertRow- tai updateRow-menetelmän kutsumisen jälkeen.
Rivin päivittäminen:
Voimme päivittää rivin tiedot kutsumalla updateX()-metodeja, välittämällä sarakkeen nimen tai indeksin ja päivitettävät arvot. Voimme käyttää mitä tahansa tietotyyppiä X:n sijasta updateX-metodissa. Tähän asti olemme päivittäneet ResultSet-olion tiedot. Päivittääksemme tiedot tietokantaan, meidän on kutsuttava updateRow()-metodia.
Rivin lisääminen:
Meidän on käytettävä moveToInsertRow()-menetelmää siirtämään kursoria uuden rivin lisäämiseksi. Olemme jo käsitelleet tätä kohdassa Navigointimenetelmät. Seuraavaksi meidän on kutsuttava updateX()-menetelmää lisätäksemme tiedot riville. Meidän on annettava tiedot kaikille sarakkeille, muuten se käyttää kyseisen sarakkeen oletusarvoa.
Tietojen päivittämisen jälkeen meidän on kutsuttava insertRow()-metodia. Käytä sitten moveToCurrentRow()-metodia viedäksemme kursorin takaisin sille riville, jolla olimme ennen uuden rivin lisäämisen aloittamista.
ResultSet Esimerkki:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Tulosjoukko_esimerkki1 { public static void main(String[] args) throws ClassNotFoundException { // // TODO Automaattisesti luotu metodin tynkä String select_query ="select empnum,lastName,firstName from employee_details"; String insert_query = "insert into employee_details values(?,?,?,?,?,?,?,?)"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Yhteyden muodostaminen Oracle DB:hen try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE")) { //DataBaakkiMetaData-olion luominen DatabaseMetaData dbmd = conn.getMetaData();//Tarkistetaan, tukeeko ajuri scroll insensitive type ja concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Prepared Statement PreparedStatementin luominen PreparedStatement pstatemnt1 =conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); // Siirretään kursori taulukon viimeiselle riville rs.last(); System.out.println("LAST ROW: Before inserting new Employee"); System.out.println("LAST ROW: EMPNUM = " + rs.getInt(1))); System.out.println("\n EMP NUM = " + rs.getInt("empNum")) + "\n.LAST NAME = " + rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); // Asetetaan arvot, jotka lisätään EMPLOYEE_DETAILS-taulukkoon //Muutetaan kursori kohtaan lisätä rivi taulukkoon rs.moveToInsertRow(); //Päivitetään EMPNUM-arvo rs.updateInt(1, 1017); //Päivitetään LAST NAME-arvo rs.updateString(2, "Bond"); //PÄIVITETÄÄN ESIMERKKI-nimiarvo rs.updateString(3, "James"); //Täytetään uusi rivi rs.insertRow();// Siirretään kursori kohtaan 5. rivi rs.absolute(5); System.out.println("Ennen 5. rivin EMPNUM:n päivittämistä"); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); System.out.println(" 5. TYÖNTEKIJÄN EMP-tunnisteen päivittäminen"); //5. rivin EMPNUM:n päivitys rs.updateInt(1,3005); rs.updateRow(); System.out.println("\n EMPNUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println("LAST ROW: EMPNUM = " + rs.getInt(1)); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } }}
OUTPUT:
Selitys:
Yllä olevassa ohjelmassa olemme ensin tallentaneet Employee_details-taulukon tiedot ResultSet-olioon SELECT-kyselyä käyttäen. Sitten näytimme employee_details-taulukon viimeisen rivin tiedot ResultSet-olion last()-metodin avulla. moveToInsertRow()-metodi saa kursorin osoittamaan nykyistä riviä, jolloin nykyinen rivi on viimeinen rivi.
updateXXX()-metodia käytettiin rivin arvojen päivittämiseen ja insertRow()-metodia käytettiin tietojen lisäämiseen uudelle riville. Absolute()-metodin avulla kursori osoitti viidennelle riville. UpdateInt()-metodia käytettiin EMPNUM-arvon päivittämiseen taulukon viidennen työntekijän uudella id:llä. Tämän jälkeen näytettiin tiedot, jotta voitiin tarkistaa, onko EMPNUM-arvo päivitetty vai ei.
Laitetaan kohdistin osoittamaan taulukon viimeistä riviä last()-menetelmällä ja näytetään se. Edellä esitetyn logiikan suorittamiseksi meidän on asetettava ResultSet.TYPE_SCROLL_INSENSITIVE- ja ResultSet.CONCUR_UPDATABLE-arvot prepareStatement-menetelmässä.
#4) Erilaiset menetelmät
- void close(): Sitä käytetään ResultSet-instanssin sulkemiseen ja ResultSet-instanssiin liittyvien resurssien vapauttamiseen.
- ResultSetMetaData getMetaData(): Se palauttaa ResultSetMetaData-instanssin. Se sisältää tietoja kyselyn tulosteen sarakkeiden tyypistä ja ominaisuuksista. Opimme lisää ResultSetMetaDatasta seuraavassa osassa.
ResultSetMetaData
Mitä on metatieto?
Metatiedot tarkoittavat tietoja tiedoista. Tämän rajapinnan avulla saamme lisätietoja ResultSetistä. Se on saatavilla java.sql-paketissa. Jokaiseen ResultSet-olioon liittyy yksi ResultSetMetaData-olio.
Tämä objekti sisältää yksityiskohtaiset tiedot sarakkeiden ominaisuuksista, kuten sarakkeen tietotyyppi, sarakkeen nimi, sarakkeiden määrä, taulukon nimi, skeeman nimi jne., Voimme saada ResultSetMetaData-objektin käyttämällä ResultSetin getMetaData()-menetelmää.
ResultSetMetaDatan syntaksi:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery("Select * from EMPLOYEE_DETAILS"); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaData-rajapinnan tärkeät menetelmät:
Menetelmän nimi | Kuvaus |
---|---|
String getColumnName(int column) | Se palauttaa tietyn sarakkeen nimen |
String getColumnTypeName(int column) | Se palauttaa parametrina antamamme tietyn sarakkeen tietotyypin. |
String getTableName(int sarake) | Se palauttaa sarakkeen taulukon nimen |
String getSchemaName(int column) | Palauttaa sarakkeen taulukon skeeman nimen. |
int getColumnCount() | Palauttaa ResultSet-joukon sarakkeiden lukumäärän. |
boolean isAutoIncrement(int Column) | Palauttaa true, jos annettu sarake on Auto Increment, muuten false. |
boolean isCaseSensitive(int Column) | Palauttaa true, jos annettu sarake on Case Sensitive, muuten false. |
ResultSetMetaData Esimerkki
employee_details"; Class.forName("oracle.jdbc.driver.OracleDriver"); try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE")) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; rs1 = statemnt1.executeQuery(QUERY); ResultSetMetaData rsmd = rs1.getMetaData(); System.out.println(" Käytämme ResultSetMetaData ");System.out.println("Sarakkeiden lukumäärä: " + rsmd.getColumnCount()); System.out.println("Sarakkeen 1 sarakkeen nimi: " + rsmd.getColumnName(1)); System.out.println("Sarakkeen 2 tietotyyppi: " + rsmd.getColumnTypeName(2)); System.out.println("Taulukon nimi sarakkeessa 1: " + rsmd.getTableName(1)); System.out.println("Sarakkeen 1 skeeman nimi: " + rsmd.getSchemaName(1)); } } }
OUTPUT:
Selitys:
Yllä olevassa ohjelmassa olemme toteuttaneet getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() ja getSchemaName() -metodit ResultSetMetaData-rajapinnassa.
DatabaseMetaData
DatabaseMetaData-rajapinta antaa tietoja tietokannasta, kuten DatabaseName, tietokannan versio ja niin edelleen.
DatabaseMetaData-rajapinnan tärkeät menetelmät:
Menetelmän nimi | Kuvaus |
---|---|
String getDriverName() | Se palauttaa sen JDBC-ajurin nimen, jota käytämme Java-ohjelmassamme. |
String getDriverVersion() | Se palauttaa JDBC-ajurin versionumeron |
String getUserName() | Se palauttaa käyttämämme tietokannan käyttäjänimen. |
String getDatabaseProductName() | Se palauttaa käyttämämme tietokannan nimen. |
String getDatabaseProductVersion() | Se palauttaa käyttämämme tietokannan versionumeron. |
ResultSet getSchemas() | Se palauttaa yhdistetyssä tietokannassa käytettävissä olevien skeemojen nimet. |
String getStringFunctions() | Se palauttaa luettelon liitetyssä tietokannassa käytettävissä olevista merkkijonofunktioista. |
String getTimeDateFunctions() | Se palauttaa luettelon liitetyssä tietokannassa käytettävissä olevista aika- ja päivämäärätoiminnoista. |
String getURL() | Se palauttaa tietokannan URL-osoitteen |
Boolean isReadOnly() | Palauttaa, onko tietokanta lukutilassa. |
Boolean supportsBatchUpdates() | Se palauttaa, tukeeko tietokanta eräpäivityksiä |
Boolean supportsSavepoints() | Se palauttaa, tukeeko tietokanta Savepoints |
Boolean supportsStatementPooling() | Se palauttaa, tukeeko tietokanta lausekkeiden yhdistämistä |
Boolean supportsStoredProcedures() | Se palauttaa, tukeeko tietokanta tallennettuja menettelyjä. |
Boolean supportsOuterJoins() | Se palauttaa, tukeeko tietokanta Outer Join -tapahtumaa. |
Tässä on lueteltu joitakin DatabaseMetaData-rajapinnan tärkeitä metodeja. Voit tutustua DatabaseMetaData-rajapinnan viralliseen sivustoon. Oracle jossa näet kaikki DatabaseMetaData-rajapinnan käytettävissä olevat menetelmät.
DatabaseMetaData Esimerkki:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class DatabaseMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Automaattisesti luotu metodin tynkä.Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE"); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println("DatabaseMetaDatan käyttäminen"); System.out.println("Ajurin nimi: " + dbmd.getDriverName()); System.out.println("Ajuriversio:" + dbmd.getDriverVersion()); System.out.println("KäyttäjänimiTietokanta: " + dbmd.getUserName()); System.out.println("Tietokannan tuotenimi:" + dbmd.getDatabaseProductName()); System.out.println("Tietokannan tuoteversio: " + dbmd.getDatabaseProductVersion()); System.out.println("Luettelo tietokannassa olevista merkkijonotoiminnoista: " + dbmd.getStringFunctions()); System.out.println("Luettelo tietokannassa olevista aika- & päivämäärämenetelmistä: " + dbmd.getTimeDateFunctions());System.out.println("Tietokannan URL-osoite: " + dbmd.getURL()); System.out.println("Tietokanta on vain luku - vain? " +dbmd.isReadOnly()); System.out.println("Tukee eräpäivityksiä? " + dbmd.supportsBatchUpdates()); System.out.println("Tukee tallennuspisteitä? " + dbmd.supportsSavepoints()); System.out.println("Tukee lausekkeiden poolistamista?" + dbmd.supportsStatementPooling()); System.out.println("Tukee varastoituaProcedures? " + dbmd.supportsStoredProcedures()); System.out.println("Support Outer Join?" + dbmd.supportsOuterJoins()); } } }
OUTPUT:
Selitys:
Yllä olevassa ohjelmassa olemme käyttäneet/toteuttaneet DatabaseMetaData-rajapinnan metodeja getDriverName(), getDriverVersion(), getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsStoredProcedures() ja supportsOuterJoins().
Huomioitavaa:
- JDBC ResultSet -rajapintaa käytetään tietojen tallentamiseen tietokannasta ja niiden käyttämiseen Java-ohjelmassamme.
- Voimme myös käyttää ResultSet-tietokokonaisuutta tietojen päivittämiseen käyttämällä updateXXX()-menetelmiä.
- ResultSet-olio osoittaa kursorin ennen tulosdatan ensimmäistä riviä. next()-metodin avulla voimme käydä ResultSet-olion läpi.
- Meillä on ResultSet-olion navigointimenetelmät, joilla voimme siirtyä ResultSet-oliossa pidemmälle.
- ResultMetaDataa käytetään saadaksesi lisätietoja ResultSetistä, kuten sarakkeen nimi, sarakkeiden lukumäärä, sarakkeen tietotyyppi jne.
- DatabaseMetDataa käytetään saadaksemme tietoa tietokannasta, johon olemme yhdistäneet.
Usein kysytyt kysymykset
Q #1) Mihin ResultSet-ohjelmaa käytetään?
Vastaa: ResultSet-oliota käytetään tietojen tallentamiseen ja hakemiseen tietokannasta. Kun executeQuery()-menetelmä on suoritettu, se palauttaa ResultSet-olion. Voimme käyttää tätä ResultSet-oliota ohjelmassamme logiikan suorittamiseen.
Q #2) Miten tarkistetaan, onko ResultSet tyhjä vai ei?
Vastaa: IsResultSet Empty -toiminnon tarkistamiseen ei ole käytettävissä ennalta määriteltyjä metodeja, kuten length(), size(). Voimme käyttää next()-metodia iterointiin, ja jos se palauttaa True:n, se ei ole tyhjä, jos se palauttaa False:n, ResultSet on tyhjä.
Q #3) Onko mahdollista, että ResultSet voi olla nolla?
Vastaa: Ei, executeQuery()-menetelmä palauttaa ResultSet-olion, joka ei saa koskaan olla nolla.
Q #4) Mikä on päivitettävä ResultSet?
Vastaa: Päivitettävää ResultSet-oliota käytetään sarakkeen tietojen päivittämiseen, tietojen lisäämiseen sarakkeisiin ja rivien poistamiseen. Jotta ResultSet-oliosta tulisi päivitettävä, meidän on määritettävä vieritystyypiksi sensitiivinen tai insensitiivinen ja CONCUR-tyypiksi päivitettävä.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Q #5) Miten saada tietokannan nimi, joka on yhdistetty?
Vastaa: Voimme käyttää DatabaseMetaData-olion getDatabaseProductName()-menetelmää.
Päätelmä
Tässä opetusohjelmassa olemme käsitelleet, mitä ovat ResultSet-, ResultSetMetaData- ja DatabaseMetaData-rajapinnat ja niiden tärkeät metodit, joita käytetään yleisesti JDBC-ohjelmissa. Olemme myös nähneet, miten tietoja päivitetään tietokantaan ResultSet-tietokannan avulla. ResultSetMetadata-tietokanta sisältää ResultSet-tietokannan tietoja, kuten sarakkeen nimi, sarakkeiden lukumäärä ja niin edelleen.
DatabaseMetaData sisältää tietokannan tietoja.
<