Энэ заавар нь өгөгдөл сэргээхийн тулд JDBC ResultSet-г хэрхэн ашиглахыг тайлбарладаг. Мөн бид ResultSetMetaData болон DatabaseMetaData интерфэйсийн талаар жишээн дээр суралцах болно:
JDBC DriverManager хичээлийн JDBC цуврал хичээлийн -д бид JDBC-г хэрхэн ашиглах талаар сурсан. DriverManager болон түүний аргууд, Java програмууд дахь JDBC PreparedStatement.
Энэ зааварт бид JDBC дээрх үлдсэн интерфэйсүүдийн талаар ярилцах болно. Бид өмнөх хичээлүүддээ Statement, PreparedStatement, CallableStatement интерфэйсүүдийг авч үзсэн.
Бид эндээс JDBC ResultSet, ResultSetMetaData, DatabaseMetaData интерфэйсүүд, тэдгээрийн аргууд болон Java программ дахь аргуудыг хэрхэн ашиглах талаар суралцах болно.
JDBC ResultSet Интерфэйс
ResultSet Интерфэйс нь java.sql багцад байдаг. Энэ нь Java программ дахь SQL хэллэгийг гүйцэтгэсний дараа өгөгдлийн сангийн хүснэгтээс буцаж ирсэн өгөгдлийг хадгалахад хэрэглэгддэг. ResultSet-ийн объект нь үр дүнгийн өгөгдөл дээр курсорын цэгийг хадгалдаг. Анхдагчаар курсор нь үр дүнгийн өгөгдлийн эхний эгнээний өмнө байрлана.
Дараах() аргыг курсорыг дараагийн байрлал руу урагш чиглүүлэхэд ашигладаг. Хэрэв өөр бичлэг байхгүй бол ХУДАЛ буцаана. Энэ нь мэдэгдлийн аль нэг объектыг ашиглан executeQuery() аргыг дуудаж өгөгдлийг татаж авдаг. Энэ нь Statement эсвэл PreparedStatement эсвэл CallableStatement объект байж болно. Бэлтгэсэн мэдэгдэл, бабаганын хүснэгтийн схемийн нэрийг буцаана
ResultSetMetaData Жишээ
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 Auto-generated method stub String QUERY= " select * from 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(" We are using ResultSetMetaData "); System.out.println("No: of Columns: "+ rsmd.getColumnCount()); System.out.println("ColumnName of Column 1: "+ rsmd.getColumnName(1)); System.out.println("Data Type of Column 2: " + rsmd.getColumnTypeName(2)); System.out.println("Table Name of the Column 1: " + rsmd.getTableName(1)); System.out.println("Schema Name of the Column 1: " + rsmd.getSchemaName(1)); } } }
ГАРЦ:
Тайлбар:
Дээрх программд бид GetColumnCount(),getColumnName(), getColumnTypeName(), getTableName() болон getSchemaName() аргуудыг ResultSetMetaData интерфэйс дээр хэрэгжүүлсэн.
DatabaseMetaData
DatabaseMetaData интерфэйс нь өгөгдлийн сангийн тухай мэдээлэл өгдөг. Өгөгдлийн сангийнНэр, Өгөгдлийн сангийн хувилбар гэх мэт.
Өгөгдлийн сангийнMetaData интерфейсийн чухал аргууд:
Аргын нэр | Тодорхойлолт |
---|---|
String getDriverName() | Энэ нь бидний Java программ дээр ашиглаж байгаа JDBC драйверын нэрийг буцаана |
String getDriverVersion() | Энэ нь JDBC драйверын хувилбарын дугаарыг буцаана |
String getUserName() | Энэ нь бидний ашиглаж буй өгөгдлийн сангийн хэрэглэгчийн нэрийг буцаана |
GetDatabaseProductName() мөр | Энэ нь буцаана бидний байгаа мэдээллийн сангийн нэрашиглах |
String getDatabaseProductVersion() | Энэ нь бидний ашиглаж буй өгөгдлийн сангийн хувилбарын дугаарыг буцаана |
ResultSet getSchemas() | Энэ нь холбосон мэдээллийн санд байгаа схемүүдийн нэрийг буцаана |
String getStringFunctions() | Энэ нь холбосон мэдээллийн санд байгаа мөрийн функцуудын жагсаалтыг буцаана |
String getTimeDateFunctions() | Энэ нь Холбогдсон мэдээллийн санд байгаа цаг, огнооны функцуудын жагсаалтыг буцаана |
String getURL() | Өгөгдлийн сангийн URL-г буцаана |
Боолийн isReadOnly() | Өгөгдлийн сан нь зөвхөн унших горимд байгаа эсэхийг буцаана |
Boolean нь BatchUpdates()-ыг дэмждэг | Өгөгдлийн сан нь багц шинэчлэлтийг дэмждэг эсэхийг буцаана |
Boolean Savepoints() | 30-г дэмждэг>Өгөгдлийн сан нь Savepoints-г дэмждэг эсэхийг буцаана|
Boolean supportsStatementPooling() | Өгөгдлийн сан нь мэдэгдлийн нэгтгэлийг дэмждэг эсэхийг буцаана |
Boolean supportsStoredProcedures() | Өгөгдлийн сан нь Хадгалагдсан процедурыг дэмждэг эсэхийг буцаана |
Boolean supportsOuterJoins() | Өгөгдлийн сан нь Гадаад нэгдсэн холболтыг дэмждэг эсэхийг буцаана |
Энд бид DatabaseMetaData интерфейсийн зарим чухал аргуудыг жагсаав. -д хандаж болно Oracle албан ёсны сайтаас та DatabaseMetaData интерфэйс дэх бүх аргуудыг харж болно.
Өгөгдлийн сангийнМетаӨгөгдлийн Жишээ:
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 Auto-generated method 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 the Database: " + 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("URL of the Database: " + 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 Stored Procedures? " + dbmd.supportsStoredProcedures()); System.out.println("Support Outer Join? "+ dbmd.supportsOuterJoins()); } }
ГАРЦ:
Тайлбар:
Дээрх программ дээр бид getDriverName(), getDriverVersion() ашигласан/ хэрэгжүүлсэн. , getUserName(), getDatabaseProductVersion(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsduresStored(J)Pro болон аргууд DatabaseMetaData Interface.
Анхаарах зүйл:
- JDBC ResultSet интерфэйс нь өгөгдлийн сангаас өгөгдлийг хадгалах, манай Java программд ашиглахад ашиглагддаг.
- Бид ResultSet-ийг updateXXX() аргуудыг ашиглан өгөгдлийг шинэчлэх боломжтой.
- ResultSet объект курсорыг үр дүнгийн өгөгдлийн эхний эгнээний өмнө зааж өгдөг. Next() аргыг ашигласнаар бид ResultSet-ийг давтаж болно.
- Бид ResultSet объект руу цааш шилжихийн тулд ResultSet-ийн навигацийн аргуудтай байна
- ResultMetaData нь ResultSet-ийн талаар нэмэлт мэдээлэл авахад ашиглагддаг. баганын нэр, баганын тоо, баганын өгөгдлийн төрөл г.м.
- DatabaseMetData нь бидний холбосон мэдээллийн сангийн талаарх мэдээллийг авахад ашиглагддаг
Түгээмэл асуултууд
Асуулт №1) Юуг ашиглах вэResultSet?
Хариулт: ResultSet нь DB-ээс өгөгдлийг хадгалах, сэргээхэд ашиглагддаг. executeQuery() аргыг ажиллуулсны дараа энэ нь ResultSet объектыг буцаана. Бид тухайн ResultSet объектыг програмдаа ашиглаж логикийг гүйцэтгэх боломжтой.
Асуулт #2) ResultSet хоосон эсэхийг хэрхэн шалгах вэ?
Хариулт: IsResultSet Empty-г шалгахын тулд length(), size() гэх мэт урьдчилан тодорхойлсон аргууд байхгүй. Бид дараагийн() аргыг давтахдаа ашиглаж болох бөгөөд хэрэв энэ нь Үнэнийг буцаавал энэ нь хоосон биш, харин Худал бол ResultSet хоосон байна гэсэн үг.
Асуулт #3) ResultSet байж болох уу? null байж болох уу?
Хариулт: Үгүй, executeQuery() арга нь хэзээ ч null байж болох ResultSet объектыг буцаана.
Асуулт #4) Шинэчлэх боломжтой ResultSet гэж юу вэ?
Хариулт: Шинэчлэх боломжтой ResultSet объект нь баганад байгаа өгөгдлийг шинэчлэх, баганад өгөгдөл оруулах, мөр устгахад ашиглагддаг. ResultSet-г шинэчлэгдэх боломжтой болгохын тулд бид гүйлгэх төрлийг мэдрэмтгий эсвэл мэдрэмжгүй болгож, CONCUR төрлийг шинэчлэх боломжтой болгох хэрэгтэй.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Асуулт №5) Холбогдсон мэдээллийн сангийн нэрийг хэрхэн авах вэ?
Хариулт: Бид DatabaseMetaData объектын getDatabaseProductName() аргыг ашиглаж болно.
Дүгнэлт
Энэ зааварт бид юу болох талаар ярилцсан. ResultSet, ResultSetMetaData, DatabaseMetaData интерфэйсүүд ба тэдгээрийн JDBC программуудад түгээмэл хэрэглэгддэг чухал аргууд. Бид ч бас харсанResultSet ашиглан DB дахь өгөгдлийг хэрхэн шинэчлэх. ResultSetMetadata нь баганын нэр, баганын тоо гэх мэт ResultSet-ийн талаарх мэдээллийг агуулдаг.
DatabaseMetaData нь мэдээллийн сангийн мэдээллийг агуулдаг.
Мэдэгдэлийн интерфейс
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement интерфейс
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Бид getX() аргыг ашиглан үр дүнг давтах явцад баганын өгөгдлийг авахын тулд X нь баганын өгөгдлийн төрөл юм. Бид getX() аргыг ашиглан утгуудыг авахын тулд баганын нэр эсвэл индексийн аль нэгийг ашиглаж болно.
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); }
Мөн 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-ийн төрлүүд
Өгөгдмөл байдлаар бид гүйцэтгэсэн SQL мэдэгдлийн гаралт болон буцаж ирсэн ResultSet дахь өгөгдөл/утгуудыг урагшлах чиглэлд давтаж болно. Бид Scrollable ResultSet ашиглан утгуудыг өөр чиглэлд давтаж болно. Бид Statement, PreparedStatement, CallableStatement объектуудыг үүсгэх үед ResultSet-ийн төрөл болон зэрэгцээ байдлыг зааж өгч болно.
ResultSet-д 3 төрөл байдаг. Эдгээр нь:
- ЗӨВХӨН_УРАГШ_ТӨР: Энэ нь курсор эхнээс нь төгсгөл хүртэл, өөрөөр хэлбэл урагш чиглэлд шилжих үндсэн сонголт юм.
- TYPE_SCROLL_INSENSITIVE: Энэ төрлийн хувьд курсорыг урагш болон хойшоо чиглүүлнэ. Хэрэв бид хадгалсан өгөгдлийг давтах явцад өгөгдөлд ямар нэгэн өөрчлөлт хийвэл DB дахь өгөгдлийг хэн нэгэн өөрчилсөн тохиолдолд энэ нь өгөгдлийн багцад шинэчлэгдэхгүй. Учир нь өгөгдлийн багц нь SQL асуулга буцаах үеийн өгөгдөлтэйӨгөгдөл.
- TYPE_SCROLL_SENSITIVE: Энэ нь TYPE_SCROLL_INSENSITIVE-тай төстэй бөгөөд ялгаа нь хэн нэгэн SQL Query өгөгдлийг буцааж өгсний дараа өгөгдлийг шинэчилдэг бол үүнийг давтах үед өгөгдлийн багц дахь өөрчлөлтийг тусгах болно.
ResultSet Concurrency
ReultSet-д зэрэгцэх 2 горим байдаг. Тэдгээр нь:
- ResultSet.CONCUR_READ_ONLY: Энэ нь анхдагч зэрэгцээ горим юм. Бид зөвхөн ResultSet доторх өгөгдлийг унших боломжтой. Шинэчлэлт хийх боломжгүй.
- ResultSet.CONCUR_UPDATABLE: Бид ResultSet объектын өгөгдлийг шинэчлэх боломжтой.
Зарим мэдээллийн сан нь бүгдэд нь зэрэгцэн ажиллах горимыг дэмждэггүй. ResultSet төрлүүд. Энэ тохиолдолд бид supportsResultSetConcurrency() аргыг ашиглан тэдгээр нь бидний хүссэн төрөл болон давхцах горимыг дэмжиж байгаа эсэхийг шалгах хэрэгтэй.
ResultSet интерфэйс дэх аргууд
ResultSet аргуудын 4 ангилал байдаг. Эдгээр нь:
- Навигацийн аргууд
- Гетерийн аргууд
- Тохируулагчийн аргууд
- Төрөл бүрийн аргууд
Эхлээд бид Навигацийн аргуудын талаар ярилцаж, дараа нь цааш шилжих болно.
#1) Навигацийн аргууд
Энэ аргыг өгөгдлийн багцын эргэн тойронд курсорыг шилжүүлэхэд ашигладаг.
- Boolean absolyut(int row): Энэ нь курсорыг параметрт дурдсан мөр рүү зөөх ба хэрэв үйлдэл амжилттай бол үнэнийг буцаах, эс бөгөөс худал буцах.
- ХүчингүйafterLast(): Энэ нь ResultSet курсорыг сүүлчийн эгнээний ард шилжүүлнэ.
- Void beforeFirst(): Энэ нь ResultSet курсорыг эхний мөрийн өмнө хөдөлгөдөг.
- Boolean first(): Энэ нь ResultSet курсорыг эхний мөрөнд шилжүүлдэг. Хэрэв үйлдэл амжилттай бол Үнэнийг буцаана, эс тэгвээс Худал.
- Боолийн last(): Энэ нь ResultSet курсорыг сүүлчийн эгнээ рүү шилжүүлнэ. Хэрэв үйлдэл амжилттай бол Үнэнийг буцаана, эс тэгвээс Худал.
- Боолийн дараагийн(): Энэ нь ResultSet курсорыг дараагийн мөр рүү шилжүүлнэ. Энэ нь хэрэв олон бичлэг байвал True, өөр бичлэг байхгүй бол False-ийг буцаана.
- Boolean previous(): Энэ нь ResultSet курсорыг өмнөх мөр рүү шилжүүлнэ. Хэрэв үйлдэл амжилттай бол Үнэнийг буцаана, эс тэгвээс Худал.
- Боолийн харьцангуй(): Энэ нь курсорыг урагш эсвэл хойшхи чиглэлд өгөгдсөн тооны мөр рүү шилжүүлдэг.
- Int getRow(): Энэ нь ResultSet объектын одоо зааж байгаа мөрийн дугаарыг буцаана.
- Void moveToCurrentRow(): Энэ нь курсорыг буцаана. Хэрэв энэ нь одоогоор мөр оруулах хэсэгт байгаа бол одоогийн мөр.
- Void moveToInsertRow(): Энэ нь мөрийг Өгөгдлийн санд оруулахын тулд курсорыг тодорхой мөр рүү шилжүүлнэ. Энэ нь одоогийн курсорын байршлыг санаж байна. Тиймээс бид moveToCurrentRow() аргыг ашиглан курсорыг оруулсны дараа одоогийн мөр рүү зөөж болно.
Энэ зааварт,бүх программууд нь Java хэл дээр бичигдсэн байдаг. Бид Java 8 хувилбар болон Oracle DB ашигласан.
>>Та эндээс Oracle программ хангамжийг татаж авах боломжтой
>>Та Java-ийн 8 хувилбарыг эндээс татаж авах боломжтой
Энэ нь Java-г алхам алхмаар суулгах процесстой.
JDBC ResultSet Жишээ програм:(Навигацийн аргуудыг ашиглах)
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 Auto-generated method stub //Select query String select_query = "select * from employee_details"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:X E")) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll sensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); //Moving 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("Cursor is pointing at before the first row. Use next() to move in forward direction"); //Moving 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 last row rs.afterLast(); System.out.println("Cursor is pointing at after the last row. Use previous() to move in backward direction"); //Moving 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 3rd row"); System.out.println("THIRD ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving 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("Second ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving 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)); //Moving the cursor to point current row System.out.println(" Current Row = " + rs.getRow()); } } catch (SQLException e) { e.printStackTrace(); } } }
ГАРЦ:
Ажилтны_дэлгэрэнгүй хүснэгтийн өгөгдөл
Тайлбар:
Дээрх программд бид first(), last(), beforeFirst(), afterLast(), next(-г хэрэгжүүлсэн. ), ResultSet дахь өмнөх(), үнэмлэхүй(), харьцангуй() болон getRow() аргууд. Эдгээр аргуудыг ашиглахын тулд бид PreparStatement аргад ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE утгуудыг тохируулна.
Дараа нь бид ResultSet доторх Getter Methods гэж юу болохыг ярилцах болно:
#2) Getter Methods
ResultSet нь өгөгдлийн сангаас хүснэгтийн өгөгдлийг хадгалсан. Хүснэгтийн утгыг ResultSet дээр авахын тулд Getter аргуудыг ашигладаг. Үүний тулд бид баганын индексийн утга эсвэл баганын нэрийг дамжуулах хэрэгтэй.
ResultSet-д дараах хүлээн авагч аргууд байна:
- int getInt (int ColumnIndex): Энэ нь Index-ийн заасан баганын утгыг int өгөгдлийн төрөл болгон авахад хэрэглэгддэг.
- float getFloat(int ColumnIndex): Энэ нь авахын тулд хэрэглэгддэг. заасан баганын утга Индекс хөвөгч өгөгдлийн төрөл.
- java.sql.dategetDate(int ColumnIndex): Энэ нь заасан баганын утгыг огнооны утга болгон авах Индекс.
- int getInt(String ColumnName): Энэ нь авахын тулд хэрэглэгддэг. заагдсан баганын утгыг int өгөгдлийн төрөл болгон авна.
- float getFloat(String ColumnName): Энэ нь заасан баганын утгыг хөвөгч өгөгдлийн төрөл болгон авахад хэрэглэгддэг.
- Java.sql.date getDate(String ColumnName): Энэ нь заасан баганын утгыг огнооны утга болгон авахад хэрэглэгддэг.
Гатер аргууд байдаг. бүх анхдагч өгөгдлийн төрлүүдэд (Boolean, long, double) болон String-д мөн ResultSet интерфейс дээр. Бид мэдээллийн сангаас массив болон хоёртын төрлийн өгөгдлийг авах боломжтой. Үүнд бас аргууд бий.
#3) Тохируулагч/шинэчлэгчийн аргууд
Бид ResultSet Updater аргыг ашиглан мэдээллийн сан дахь утгыг шинэчлэх боломжтой. Энэ нь Getter аргуудтай төстэй боловч өгөгдлийн санд шинэчлэхийн тулд тодорхой баганын утгыг/өгөгдлийг энд дамжуулах шаардлагатай.
ResultSet-д дараах шинэчлэгч аргууд байна:
- void updateInt(int ColumnIndex, int Value): Энэ нь заасан баганын утгыг Int утгаар шинэчлэхэд хэрэглэгддэг.
- void updateFloat(int ColumnIndex, float f): Энэ нь заасан баганын утгыг хөвөх утгаар шинэчлэхэд хэрэглэгддэг.
- void updateDate(int ColumnIndex, Date d): Энэ нь заасан баганын утгыг шинэчлэхэд хэрэглэгддэг Индексогнооны утгатай.
- void updateInt(String ColumnName, int Value): Энэ нь заасан баганын утгыг өгөгдсөн int утгаар шинэчлэхэд хэрэглэгддэг.
- void updateFloat(String ColumnName, float f): Энэ нь заасан баганын утгыг өгөгдсөн хөвөх утгаар шинэчлэхэд хэрэглэгддэг.
- Java.sql.date getDate(String) ColumnName): Энэ нь заасан баганын утгыг өгөгдсөн огнооны утгаар шинэчлэхэд хэрэглэгддэг.
Бүх анхдагч өгөгдлийн төрөл (Boolean, long, double) болон String-д зориулсан Updater аргууд байдаг. Мөн ResultSet интерфэйс дээр байна.
Шинэчлэгч аргууд нь ResultSet объект дахь өгөгдлийг л шинэчилнэ. insertRow эсвэл updateRow аргыг дуудсаны дараа DB-д утгууд шинэчлэгдэх болно.
Мөрийг шинэчлэх:
Бид updateX() аргыг дуудаж дараалсан өгөгдлийг шинэчлэх боломжтой. , баганын нэр эсвэл индексийг дамжуулж, шинэчлэх утгууд. Бид updateX аргад X-ийн оронд ямар ч өгөгдлийн төрлийг ашиглаж болно. Одоогоор бид ResultSet объектын өгөгдлийг шинэчилсэн. DB дахь өгөгдлийг шинэчлэхийн тулд бид updateRow() аргыг дуудах хэрэгтэй.
Мөр оруулах:
Бид курсорыг зөөхийн тулд moveToInsertRow() ашиглах хэрэгтэй. шинэ мөр оруулах. Бид үүнийг Навигацийн аргууд хэсэгт аль хэдийн авч үзсэн. Дараа нь бид мөрөнд өгөгдлийг нэмэхийн тулд updateX() аргыг дуудах хэрэгтэй. Бид бүх баганад өгөгдөл өгөх ёстой, эс тэгвээс энэ нь тухайн тодорхой утгыг ашигланабагана.
Өгөгдлийг шинэчилсний дараа бид insertRow() аргыг дуудах хэрэгтэй. Дараа нь moveToCurrentRow() аргыг ашиглан курсорын байрлалыг шинэ мөр оруулж эхлэхээс өмнөх мөр рүү буцаана.
ResultSet Жишээ:
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 Auto-generated method stub 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(); //Checking whether the driver supports scroll insensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); //Moving 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") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); // Setting the values to insert in the EMPLOYEE_DETAILS Table //Moving 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(); //Moving the cursor to point 5th row rs.absolute(5); System.out.println("Befor Updating EMPNUM of the 5th ROW"); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); System.out.println(" Updating EMP id of the 5th EMPLOYEE"); //Updating 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(); } } }
ГАРЦ:
Тайлбар:
Дээрх программ дээр бидний хийсэн зүйл эхлээд, бид хадгалсан. SELECT асуулга ашиглан ResultSet объект дахь Employee_details хүснэгтийн өгөгдөл. Дараа нь бид ResultSet-ийн last() аргыг ашиглан ажилтан_details хүснэгтийн сүүлчийн эгнээний өгөгдлийг харуулав. moveToInsertRow() арга нь курсорыг одоогийн мөр рүү чиглүүлэхэд хүргэдэг, одоо одоогийн мөр нь хамгийн сүүлийн мөр байна.
updateXXX() мөрийн утгыг шинэчлэхэд ашигладаг аргууд ба insertRow() арга нь өгөгдлийг оруулсан. шинэ эгнээ. Absolyut() аргыг ашиглан бид курсорыг 5-р эгнээ рүү зааж өгсөн. EMPNUM-ийг хүснэгтийн 5 дахь ажилтны шинэ id-ээр шинэчлэхийн тулд UpdateInt() аргыг ашигласан. Үүний дараа EMPNUM шинэчлэгдсэн эсэхийг шалгахын тулд өгөгдлийг харуулав.
Last()-г ашиглан курсорыг хүснэгтийн сүүлчийн эгнээ рүү чиглүүлж, харуулав. Дээрх логикийг гүйцэтгэхийн тулд prestatement аргад ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE утгуудыг тохируулах хэрэгтэй.
#4) Төрөл бүрийн аргууд
- void close(): Энэ нь ResultSet жишээг хааж, чөлөөлөхөд хэрэглэгддэгResultSet жишээтэй холбоотой нөөц.
- ResultSetMetaData getMetaData(): Энэ нь ResultSetMetaData Instance-г буцаана. Энэ нь асуулгын гаралтын баганын төрөл, шинж чанарын талаархи мэдээллийг агуулдаг. Бид дараагийн хэсэгт ResultSetMetaData-н талаар илүү ихийг мэдэх болно.
ResultSetMetaData
Мета өгөгдөл гэж юу вэ?
Мета өгөгдөл өгөгдлийн талаарх өгөгдөл гэсэн үг. Энэ интерфэйсийг ашигласнаар бид ResultSet-ийн талаар илүү их мэдээлэл авах болно. Энэ нь java.sql багцад байдаг. ResultSet объект бүр нэг ResultSetMetaData объекттой холбоотой.
Энэ объект нь баганын өгөгдлийн төрөл, баганын нэр, баганын тоо, хүснэгтийн нэр, схемийн нэр гэх мэт баганын шинж чанаруудын дэлгэрэнгүй мэдээллийг агуулна. Бид ResultSet-ийн getMetaData() аргыг ашиглан ResultSetMetaData объектыг авч болно.
ResultSetMetaData-н синтакс:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaData интерфейсийн чухал аргууд:
Аргын нэр | Тодорхойлолт |
---|---|
Мөр getColumnName(int багана) | Энэ нь тухайн баганын баганын нэрийг буцаана |
String getColumnTypeName(int column) | Энэ нь тухайн баганын өгөгдлийн төрлийг буцаана. Бидний параметр болгон дамжуулсан тодорхой багана |
String getTableName(int column) | Энэ нь баганын хүснэгтийн нэрийг буцаана |
String getSchemaName(int багана) | Энэ |