Selles õpetuses selgitatakse, kuidas kasutada JDBC ResultSet'i andmete saamiseks. Samuti tutvume ResultSetMetaData ja DatabaseMetaData liidestega koos näidetega:
In the JDBC DriverManager õpetus JDBC õpetussari õppisime, kuidas kasutada JDBC DriverManager'i ja selle meetodeid, JDBC PreparedStatement'i Java-rakendustes.
Selles õpiobjektis käsitleme ülejäänud JDBC-liideseid. Oleme oma eelmistes õpiobjektides käsitlenud liideseid Statement, PreparedStatement ja CallableStatement.
Siin tutvume JDBC ResultSet, ResultSetMetaData ja DatabaseMetaData liidestega, nende meetoditega ja nende meetodite kasutamisega Java-programmis.
JDBC ResultSet liides
ResultSet liides on olemas java.sql paketis. Seda kasutatakse andmete salvestamiseks, mis tagastatakse andmebaasi tabelist pärast SQL avalduste täitmist Java programmis. ResultSet objekt säilitab kursori punkti tulemuse andmete juures. Vaikimisi asub kursor enne tulemuse andmete esimest rida.
Meetodit next() kasutatakse kursori edasiliikumiseks järgmisele positsioonile. See tagastab FALSE, kui rohkem kirjeid ei ole. See hangib andmeid, kutsudes meetodit executeQuery(), kasutades mis tahes avalduse objekti. See võib olla Statement või PreparedStatement või CallableStatement objekt. PreparedStatement ja CallableStatement liidesed on Statement'i alamliidesed.liides.
Avaldusliides
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery("Select * from EMPLOYEE_DETAILS");
PreparedStatement liides
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery("Select * from EMPLOYEE_DETAILS");
Me saame kasutada meetodit getX(), et saada veergude andmeid tulemuste iteratsiooni ajal, kus X - on veeru andmetüüp. Me võime kasutada kas veeru nimesid või indeksit, et saada väärtusi kasutades getX() meetodeid.
while(rs1.next()) { int empNum = rs1.getInt("empNum"); String lastName = rs1.getString("lastName"); String firstName = rs1.getString("firstName"); String email = rs1.getString("email"); String deptNum = rs1.getString("deptNum"); String salary = rs1.getString("salary"); System.out.println(empNum + "," +lastName+ "," +firstName+ "," +email +", "+deptNum +"," +salary); }
Me võime veeru nime asemel nimetada ka veeru indeksi numbri meetodites getX().
while(rs1.next()) { int empNum = rs1.getInt(1); String lastName = rs1.getString(2); String firstName = rs1.getString(3); String email = rs1.getString(4); String deptNum = rs1.getString(5); String salary = rs1.getString(6); System.out.println(empNum + "," +lastName+ "," +firstName+ "," +email +", "+deptNum +"," +salary); }
ResultSet tüübid
Vaikimisi saame itereerida andmeid/väärtusi ResultSetis, mis on tagastatud SQL-avalduse väljundina edasi-tagasi. Me saame itereerida väärtusi teistes suundades, kasutades Scrollable ResultSet'i. Me saame määrata ResultSeti tüübi ja samaaegsuse Statement-, PreparedStatement- ja CallableStatement-objektide loomisel.
ResultSetis on 3 tüüpi. Need on järgmised:
- TYPE_FORWARD_ONLY: See on vaikimisi valik, mille puhul kursor liigub algusest lõpuni, s.t. ettepoole.
- TYPE_SCROLL_INSENSITIVE: Selle tüübi puhul paneb see kursori liikuma nii edasi kui ka tagasi. Kui me muudame andmeid salvestatud andmete iteratsiooni ajal, siis see ei uuenda andmekogumit, kui keegi muudab andmeid DB-s. Kuna andmekogumil on andmed alates sellest ajast, kui SQL päring tagastab andmed.
- TYPE_SCROLL_SENSITIVE: See on sarnane TYPE_SCROLL_INSENSITIVE, erinevus on see, et kui keegi uuendab andmeid pärast seda, kui SQL päring on andmed tagastanud, kajastab see iteratsiooni ajal andmekogumi muudatusi.
ResultSet samaaegsus
ResultSetis on 2 samaaegsuse režiimi. Need on järgmised:
- ResultSet.CONCUR_READ_ONLY: See on vaikimisi samaaegsusrežiim. Me saame ainult lugeda andmeid ResultSetis. Uuendamine ei ole kohaldatav.
- ResultSet.CONCUR_UPDATABLE: Me saame uuendada andmeid ResultSet-objektis.
Mõned andmebaasid ei toeta kõikide ResultSet-tüüpide jaoks samaaegsusrežiimi. Sellisel juhul peame kontrollima, kas nad toetavad meie soovitud tüüpi ja samaaegsusrežiimi, kasutades meetodit supportsResultSetConcurrency().
Meetodid ResultSet liideses
ResultSet-meetodeid on 4 kategooriat. Need on järgmised:
- Navigatsioonimeetodid
- Getter Meetodid
- Määraja Meetodid
- Mitmesugused meetodid
Kõigepealt arutame navigeerimismeetodeid ja seejärel liigume edasi.
#1) Navigatsioonimeetodid
Seda meetodit kasutatakse kursori liigutamiseks andmekogumis.
- Boolean absolute(int row): Seda kasutatakse kursori liigutamiseks parameetris mainitud reale ja tagastab true, kui operatsioon on edukas, vastasel juhul tagastab false.
- Void afterLast(): See paneb ResultSet kursori liikuma pärast viimast rida.
- Void beforeFirst(): See paneb ResultSet kursori liikuma enne esimest rida.
- Boolean first(): See paneb ResultSet kursori liikuma esimesele reale. Tagastab True, kui operatsioon on edukas, muidu False.
- Boolean last(): See paneb ResultSet kursori liikuma viimasele reale. Tagastab True, kui operatsioon on edukas, muidu False.
- Boolean next(): See paneb ResultSet kursori liikuma järgmisele reale. See tagastab True, kui kirjeid on rohkem, ja False, kui kirjeid ei ole.
- Boolean previous(): See paneb ResultSet kursori liikuma eelmisele reale. Tagastab True, kui operatsioon on edukas, muidu False.
- Boolean relative(): See liigutab kursorit etteantud arvu ridade suunas kas edasi või tagasi.
- Int getRow(): See tagastab praeguse rea numbri, millele ResultSet-objekt praegu osutab.
- Void moveToCurrentRow(): See liigutab kursori tagasi praegusele reale, kui see on praegu sisestusreas.
- Void moveToInsertRow(): See liigutab kursori konkreetsele reale, et sisestada rida andmebaasi. See jätab meelde kursori praeguse asukoha. Seega saame kasutada meetodit moveToCurrentRow(), et viia kursor pärast sisestamist praegusele reale.
Selles õpetuses on kõik programmid kirjutatud Java keeles. Oleme kasutanud Java 8 versiooni ja Oracle DB-d.
>>Oracle'i tarkvara saate alla laadida siit
>>Java 8. versiooni saate alla laadida siit
Sellel on samm-sammult Java paigaldusprotsess.
JDBC ResultSet näidisprogramm: (navigeerimismeetodite kasutamine)
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 Automaatselt genereeritud meetodi tüvi //Select query String select_query = "select * from".employee_details"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Ühendumine Oracle andmebaasiga try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:X E")) { //Loomine DatabaseMetaData objekt DatabaseMetaData dbmd = conn.getMetaData(); //Kontroll, kas draiver toetab scroll sensitive type ja concur updatable boolean isSupportResultSetType =dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Ettevalmistatud avalduse loomine PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); //Mooving the cursor to point first row rs.first();System.out.println("FIRST ROW \n EMP NUM = " + 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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point before first row rs.beforeFirst();System.out.println("Kursor näitab enne esimest rida. Edasi liikumiseks kasuta next()"); //Mooving the cursor to point first row using next() rs.next(); System.out.println("FIRST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point after the last row rs.afterLast(); System.out.println("Cursorosutab pärast viimast rida. Kasutage previous(), et liikuda tagasi"); //Mooving the cursor to point last row using 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)); //Moving the cursor to point third row rs.absolute(3); System.out.println("Cursor is pointing at 3rdrida"); System.out.println("KOLMANDA RIDA \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Mooving the cursor to point previous row of third row rs.relative(-1); System.out.println("Cursor is pointing to the 1 row previous to the 3rd row"); System.out.println("II RIDA \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+rs.getString(2)+"\n ESIMENE NIMI = " + rs.getString(3)); //Mooving the cursor to point 4th row after the 2nd row rs.relative(4); System.out.println("Cursor is pointing to the 4th row after the 2nd row"); System.out.println("SIXTH ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Mooving the cursor to point current row"); //Mooving the cursor to point current rowSystem.out.println(" Praegune rida = " + rs.getRow()); } } } catch (SQLException e) { e.printStackTrace(); } } }
VÄLJUND:
Andmed tabelis Employee_details
Selgitus:
Ülaltoodud programmis oleme rakendanud ResultSetis meetodid first(), last(), beforeFirst(), afterLast(), next(), previous(), absolute(), relative() ja getRow(). Nende meetodite kasutamiseks seame meetodis prepareStatement väärtused ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE.
Järgnevalt arutame, millised on Getter Meetodid ResultSetis:
#2) Getter Meetodid
ResultSet on salvestanud tabeli andmed andmebaasist. Getter meetodeid kasutatakse tabeli väärtuste saamiseks ResultSet'is. Selleks peame edastama kas veeru Indeksi väärtuse või veeru nime.
Järgnevalt on esitatud ResultSet'i getter-meetodid:
- int getInt(int ColumnIndex): Seda kasutatakse selleks, et saada määratud veeru Index väärtus andmetüübina int.
- float getFloat(int ColumnIndex): Seda kasutatakse selleks, et saada määratud veeru Index väärtus float-andmetüübina.
- java.sql.date getDate(int ColumnIndex): Seda kasutatakse selleks, et saada määratud veeru Index väärtus kuupäeva väärtusena.
- int getInt(String ColumnName): Seda kasutatakse selleks, et saada määratud veeru väärtus int-andmetüübina.
- float getFloat(String ColumnName): Seda kasutatakse määratud veeru väärtuse saamiseks float-andmetüübina.
- Java.sql.date getDate(String ColumnName): Seda kasutatakse määratud veeru väärtuse saamiseks kuupäeva väärtusena.
ResultSet liideses on getter meetodid kõikidele primitiivsetele andmetüüpidele (Boolean, long, double) ja String ka ResultSet liideses. Me saame andmebaasist saada ka massiivi ja binaarset tüüpi andmeid. Ka selleks on meetodid olemas.
#3) Määraja/uuendaja meetodid
Me saame uuendada väärtust andmebaasis, kasutades ResultSet Updater meetodeid. See on sarnane Getter meetoditega, kuid siin peame edastama konkreetse andmebaasis uuendatava veeru väärtused/andmed.
Järgnevalt on esitatud ResultSet'i uuendamismeetodid:
- void updateInt(int ColumnIndex, int Value): Seda kasutatakse määratud veeru Index väärtuse uuendamiseks int-väärtusega.
- void updateFloat(int ColumnIndex, float f): Seda kasutatakse määratud veeru Indeks väärtuse uuendamiseks ujuva väärtusega.
- void updateDate(int ColumnIndex, Date d): Seda kasutatakse määratud veeru Index väärtuse ajakohastamiseks kuupäeva väärtusega.
- void updateInt(String ColumnName, int Value): Seda kasutatakse määratud veeru väärtuse ajakohastamiseks antud int väärtusega.
- void updateFloat(String ColumnName, float f): Seda kasutatakse määratud veeru väärtuse ajakohastamiseks antud ujuva väärtusega.
- Java.sql.date getDate(String ColumnName): Seda kasutatakse määratud veeru väärtuse ajakohastamiseks antud kuupäeva väärtusega.
ResultSet-liideses on olemas uuendamismeetodid kõigi primitiivsete andmetüüpide (Boolean, long, double) ja Stringi jaoks.
Uuendusmeetodid lihtsalt uuendavad andmeid ResultSet-objektis. Väärtused uuendatakse DB-s pärast insertRow- või updateRow-meetodi kutsumist.
Rea uuendamine:
Me saame uuendada andmeid reas, kutsudes meetodit updateX(), edastades veeru nime või indeksi ja uuendatavad väärtused. Meetodis updateX võime kasutada X asemel mis tahes andmetüüpi. Seni oleme uuendanud andmeid objektis ResultSet. Andmete uuendamiseks DB-s peame kutsuma meetodit updateRow().
Rea sisestamine:
Me peame kasutama moveToInsertRow() meetodit, et kursorit uue rea sisestamiseks liigutada. Seda oleme juba käsitlenud navigeerimismeetodite osas. Järgmisena peame kutsuma updateX() meetodit, et lisada andmed reale. Me peaksime esitama andmed kõigi veergude kohta, muidu kasutatakse selle konkreetse veeru vaikeväärtust.
Pärast andmete uuendamist peame kutsuma meetodit insertRow(). Seejärel kasutame meetodit moveToCurrentRow(), et viia kursori positsioon tagasi reale, kus olime enne uue rea sisestamist.
ResultSet näide:
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 ResultSet_Example1 { public static void main(String[] args) throws ClassNotFoundException { // TODO Automaatselt genereeritud meetodi tüvi String select_query ="select empnum,lastName,firstName from employee_details"; String insert_query = "insert into employee_details values(?,?,?,?,?,?,?)"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE")) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData();//Kontrollitakse, kas draiver toetab kerimise tundmatut tüüpi ja concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Prepared Statement PreparedStatementi loomine pstatemnt1 =conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); //Mooving the cursor to point last row of the table 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") + "\nLAST NAME = " + rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Väärtuste määramine tabelisse EMPLOYEE_DETAILS //Mooving the cursor to point insert a row to table rs.moveToInsertRow(); //Update EMPNUM value rs.updateInt(1, 1017); //Update LAST NAME value rs.updateString(2, "Bond"); //Update FIRST NAME value rs.updateString(3, "James"); //Insert a new row rs.insertRow();//Mooving the cursor to point 5th row rs.absolute(5); System.out.println("Enne 5. rea EMPNUMi uuendamist"); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); System.out.println(" Update EMP id of the 5th EMPLOYEE"); //Update EMPNUM of 5th row rs.updateInt(1,3005); rs.updateRow(); System.out.println("\n EMP").NUM = " + 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(); } }}
VÄLJUND:
Selgitus:
Ülaltoodud programmis tegime seda, et kõigepealt salvestasime tabeli Employee_details andmed objektis ResultSet, kasutades SELECT päringut. Seejärel näitasime tabeli employee_details viimase rea andmeid, kasutades ResultSeti meetodit last(). moveToInsertRow() meetod paneb kursori näitama praegusele reale, nüüd on praegune rida viimane rida.
updateXXX()meetodit kasutati väärtuste uuendamiseks reale ja insertRow() meetod on sisestanud andmed uude reasse. Absoluut() meetodi abil tegime kursori 5. reale. UpdateInt() meetodit kasutati EMPNUMi uuendamiseks uue 5. töötaja id-ga tabelis. Pärast seda kuvatakse andmed, et kontrollida, kas EMPNUM on uuendatud või mitte.
Tegime kursori tabeli viimasele reale viitavaks, kasutades last(), ja kuvasime selle. Ülaltoodud loogika teostamiseks peame prepareStatement meetodis määrama väärtused ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE.
#4) Mitmesugused meetodid
- void close(): Seda kasutatakse ResultSet-instantsi sulgemiseks ja ResultSet-instantsiga seotud ressursside vabastamiseks.
- ResultSetMetaData getMetaData(): See tagastab ResultSetMetaData instantsi. See sisaldab teavet päringu väljundi veergude tüübi ja omaduste kohta. Järgmises jaotises õpime ResultSetMetaData kohta rohkem.
ResultSetMetaData
Mis on metaandmed?
Metaandmed tähendavad andmeid andmete kohta. Selle liidese abil saame rohkem teavet ResultSet'i kohta. See on saadaval java.sql paketis. Iga ResultSet objekt on seotud ühe ResultSetMetaData objektiga.
Sellel objektil on andmed veergude omaduste kohta, nagu veeru andmetüüp, veeru nimi, veergude arv, tabeli nimi, skeemi nimi jne., ResultSetMetaData objekti saame ResultSet'i meetodi getMetaData() abil.
ResultSetMetaData süntaks:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery("Select * from EMPLOYEE_DETAILS"); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaData liidese olulised meetodid:
Meetodi nimi | Kirjeldus |
---|---|
String getColumnName(int column) | See tagastab konkreetse veeru nime |
String getColumnTypeName(int column) | See tagastab konkreetse veeru andmetüübi, mille oleme parameetrina üle andnud. |
String getTableName(int column) | See tagastab veeru tabeli nime |
String getSchemaName(int column) | See tagastab veeru tabeli skeemi nime. |
int getColumnCount() | See tagastab ResultSet'i veergude arvu. |
boolean isAutoIncrement(int Column) | Tagastab true, kui antud veerg on Auto Increment, muidu false. |
boolean isCaseSensitive(int Column) | Tagastab true, kui antud veerg on Case Sensitive, muidu false. |
ResultSetMetaData näide
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class ResultSetMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Automaatselt genereeritud meetodi tüvi String QUERY= " select * fromemployee_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(" Kasutame ResultSetMetaData ");System.out.println("Veergude arv: " + rsmd.getColumnCount()); System.out.println("Veergu nimi: " + rsmd.getColumnName(1)); System.out.println("Veergu 2 andmetüüp: " + rsmd.getColumnTypeName(2)); System.out.println("Veergu 1 tabeli nimi: " + rsmd.getTableName(1)); System.out.println("Veergu 1 skeemi nimi: " + rsmd.getSchemaName(1)); } } }
VÄLJUND:
Selgitus:
Ülaltoodud programmis oleme rakendanud meetodid getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() ja getSchemaName() ResultSetMetaData liideses.
DatabaseMetaData
DatabaseMetaData liides annab teavet andmebaasi kohta, nagu DatabaseName, andmebaasi versioon jne.
DatabaseMetaData liidese olulised meetodid:
Meetodi nimi | Kirjeldus |
---|---|
String getDriverName() | See tagastab JDBC draiveri nime, mida me kasutame oma Java programmis. |
String getDriverVersion() | See tagastab JDBC draiveri versiooni numbri |
String getUserName() | See tagastab andmebaasi kasutajanime, mida me kasutame. |
String getDatabaseProductName() | See tagastab andmebaasi nime, mida me kasutame. |
String getDatabaseProductVersion() | See tagastab andmebaasi versiooni numbri, mida me kasutame. |
ResultSet getSchemas() | See tagastab ühendatud andmebaasis olemasolevate skeemide nimed. |
String getStringFunctions() | See tagastab ühendatud andmebaasis kättesaadavate stringifunktsioonide loendi. |
String getTimeDateFunctions() | Tagastab ühendatud andmebaasis kättesaadavate aja- ja kuupäeva funktsioonide loendi. |
String getURL() | See tagastab andmebaasi URL aadressi |
Boolean isReadOnly() | Tagastab, kas andmebaas on ainult lugemisrežiimis. |
Boolean supportsBatchUpdates() | See tagastab, kas andmebaas toetab partiiuuendusi |
Boolean supportsSavepoints() | Tagastab, kas andmebaas toetab Savepoints |
Boolean supportsStatementPooling() | Tagastab, kas andmebaas toetab avalduste koondamist |
Boolean supportsStoredProcedures() | Tagastab, kas andmebaas toetab salvestatud protseduure |
Boolean supportsOuterJoins() | See tagastab, kas andmebaas toetab Outer Join |
Siin on loetletud mõned olulised DatabaseMetaData liidese meetodid. Saate vaadata ametlikku veebilehte aadressil Oracle kus on näha kõik DatabaseMetaData liideses saadaval olevad meetodid.
DatabaseMetaData Näide:
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 Automaatselt genereeritud meetodi stub.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("Using DatabaseMetaData"); System.out.println("Driver Name: " + dbmd.getDriverName()); System.out.println("Driver Version:" + dbmd.getDriverVersion()); System.out.println("UserName of theDatabase: " + dbmd.getUserName()); System.out.println("Database Product Name:" + dbmd.getDatabaseProductName()); System.out.println("Database Product Version: " + dbmd.getDatabaseProductVersion()); System.out.println("List of String Functions in the Database: " + dbmd.getStringFunctions()); System.out.println("List of Time & Date functions in the Database: " + dbmd.getTimeDateFunctions());System.out.println("Andmebaasi URL: " + dbmd.getURL()); System.out.println("Database is read - only? " +dbmd.isReadOnly()); System.out.println("Support Batch Updates? " + dbmd.supportsBatchUpdates()); System.out.println("Support savepoints? " + dbmd.supportsSavepoints()); System.out.println("Support Statement Pooling?" + dbmd.supportsStatementPooling()); System.out.println("Support StoredProcedures? " + dbmd.supportsStoredProcedures()); System.out.println("Support Outer Join?" + dbmd.supportsOuterJoins()); } } }
VÄLJUND:
Selgitus:
Ülaltoodud programmis oleme kasutanud/ rakendanud meetodeid getDriverName(), getDriverVersion(), getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsStoredProcedures() ja supportsOuterJoins() DatabaseMetaData liidese meetodites.
Tähelepanu väärivad punktid:
- JDBC ResultSet liidest kasutatakse andmebaasi andmete salvestamiseks ja nende kasutamiseks meie Java-programmis.
- Me võime kasutada ResultSet'i ka andmete uuendamiseks, kasutades updateXXX() meetodeid.
- ResultSet objekt näitab kursorit enne esimest rida tulemusandmeid. Kasutades meetodit next(), saame ResultSet'i läbi itereerida.
- Meil on ResultSet'i navigeerimismeetodid, et liikuda edasi ResultSet'i objektis
- ResultMetaData kasutatakse ResultSet'i kohta lisateabe saamiseks, näiteks veeru nimi, veergude arv, veeru andmetüüp jne.
- DatabaseMetData kasutatakse selleks, et saada teavet andmebaasi kohta, mille oleme ühendanud
Korduma kippuvad küsimused
K #1) Milleks kasutatakse ResultSet'i?
Vastus: ResultSet'i kasutatakse andmete salvestamiseks ja kättesaamiseks andmebaasist. Kui meetod executeQuery() on täidetud, tagastab see ResultSet-objekti. Me saame kasutada seda ResultSet-objekti oma programmis loogika teostamiseks.
K #2) Kuidas kontrollida, kas ResultSet on tühi või mitte?
Vastus: IsResultSet Empty kontrollimiseks ei ole saadaval mingeid eeldefineeritud meetodeid nagu length(), size(). Me saame kasutada meetodit next(), et iteratsiooni teha ja kui see tagastab True, siis ei ole see tühi, kui see tagastab False tähendab, et ResultSet on tühi.
K #3) Kas on võimalik, et ResultSet võib olla null?
Vastus: Ei, meetod executeQuery() tagastab ResultSet-objekti, mis ei tohi kunagi olla null.
K #4) Mis on uuendatav ResultSet?
Vastus: Uuendatav ResultSet objekt on mõeldud andmete uuendamiseks veerus, andmete sisestamiseks veergudesse ja ridade kustutamiseks. Et ResultSet oleks uuendatav, peame muutma kerimistüübiks sensitive või insensitive ja CONCUR tüübiks updatable.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
K #5) Kuidas saada ühendatud andmebaasi nimi?
Vastus: Me võime kasutada DatabaseMetaData objekti getDatabaseProductName() meetodit.
Kokkuvõte
Selles õpetuses oleme arutanud, mis on ResultSet, ResultSetMetaData ja DatabaseMetaData liidesed ja nende olulised meetodid, mida tavaliselt kasutatakse JDBC programmides. Samuti oleme näinud, kuidas andmeid andmebaasis ResultSeti abil uuendada. ResultSetMetadata sisaldab teavet ResultSeti kohta, näiteks veeru nimi, veeru arv ja nii edasi.
DatabaseMetaData sisaldab andmebaasi teavet.
<