מבוא לממשק JDBC RowSet בג'אווה

ג'אווה טופ

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס

1. סקירה כללית

במאמר זה אנו סוקרים את ה- JDBC RowSet מִמְשָׁק. JDBC RowSet אובייקט מחזיק נתונים טבלאיים בסגנון שהופך אותו להתאמה ופשוטה יותר לשימוש מאשר מערך תוצאות.

אורקל הגדירה חמישה RowSet ממשקים לשימושים הנפוצים ביותר של א RowSet:

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

במדריך זה נסקור כיצד להשתמש בהם RowSet ממשקים.

2. JdbcRowSet

נתחיל עם ה- JdbcRowSet - פשוט ניצור אחת על ידי העברת a חיבור התנגדות ל JdbcRowSetImpl:

JdbcRowSet jdbcRS = חדש JdbcRowSetImpl (conn); jdbcRS.setType (ResultSet.TYPE_SCROLL_INSENSITIVE); מחרוזת sql = "בחר * מלקוחות"; jdbcRS.setCommand (sql); jdbcRS.execute (); jdbcRS.addRowSetListener (דוגמא חדשהListener ()); בעוד (jdbcRS.next ()) {// כל שיחה הבאה, מייצר אירוע cursorMoved System.out.println ("id =" + jdbcRS.getString (1)); System.out.println ("name =" + jdbcRS.getString (2)); }

בדוגמה שלעיל, jdbcRs לא הכיל נתונים עד שהגדרנו את משפט SQL בשיטה setCommand ואז ניהל את השיטה לבצע.

שימו לב גם כיצד, על מנת לבצע טיפול באירועים, הוספנו א RowSetListener לתוך ה JdbcRowSet.

JdbcRowSet שונה מארבעת האחרים RowSet יישומים - כי זה תמיד מחובר למסד הנתונים ובגלל זה זה הכי דומה ל ResultSet לְהִתְנַגֵד.

3. CachedRowSet

א CachedRowSet האובייקט הוא ייחודי מכיוון שהוא יכול לפעול מבלי להיות מחובר למקור הנתונים שלו. אנו קוראים לזה "מנותק RowSet לְהִתְנַגֵד".

CachedRowSet מקבל את שמו בשל העובדה שהוא שומר את הנתונים שלו בזיכרון, כך שהוא יכול לפעול על נתונים משלו במקום על הנתונים המאוחסנים במסד נתונים.

כפי ש CachedRowSet ממשק הוא ה- ממשק סופר לכל אובייקטים מנותקים של RowSet, הקוד שנסקור להלן חל גם על א WebRowSet, JoinRowSet, או FilteredRowSeלא באותה מידה:

CachedRowSet crs = חדש CachedRowSetImpl (); crs.setUsername (שם משתמש); crs.setPassword (סיסמה); crs.setUrl (url); crs.setCommand (sql); crs.execute (); crs.addRowSetListener (דוגמא חדשהListener ()); בעוד (crs.next ()) {if (crs.getInt ("id") == 1) {System.out.println ("CRS מצא לקוח 1 ויסיר את הרשומה."); crs.deleteRow (); לשבור; }}

4. WebRowSet

לאחר מכן, בואו נסתכל על ה- WebRowSet.

זה גם ייחודי מכיוון שבנוסף להציע את היכולות של CachedRowSet לְהִתְנַגֵד, הוא יכול לכתוב את עצמו לתיעוד XMLt ויכול גם לקרוא את מסמך ה- XML ​​כדי להמיר את עצמו בחזרה ל- WebRowSet:

WebRowSet wrs = חדש WebRowSetImpl (); wrs.setUsername (שם משתמש); wrs.setPassword (סיסמה); wrs.setUrl (url); wrs.setCommand (sql); wrs.execute (); FileOutputStream ostream = FileOutputStream חדש ("clients.xml"); wrs.writeXml (ostream);

משתמש ב writeXml בשיטה, אנו כותבים את המצב הנוכחי של a WebRowSet להתנגד למסמך XML.

על ידי העברת ה- writeXml שיטה an OutputStream אובייקט, אנו כותבים בתים במקום תווים, דבר שיכול לעזור למדי לטפל בכל צורות הנתונים.

5. JoinRowSet

JoinRowSet מאפשר לנו ליצור SQL לְהִצְטַרֵף בֵּין RowSet אובייקטים כאשר אלה נמצאים בזיכרון. זה משמעותי מכיוון שהוא חוסך לנו את התקורה של הצורך ליצור חיבור אחד או יותר:

לקוחות CachedRowSetImpl = CachedRowSetImpl חדש (); // תצורת הגדרות עבור CachedRowSet CachedRowSetImpl משויכים = חדש CachedRowSetImpl (); // תצורת הגדרות עבור CachedRowSet JoinRowSet jrs = חדש JoinRowSetImpl (); jrs.addRowSet (לקוחות, מזהה); jrs.addRowSet (מקורבים, מזהה);

כי כל אחד RowSet אובייקט נוסף לא JoinRowSet האובייקט זקוק לעמודת התאמה, העמודה שעליה ה- SQL לְהִצְטַרֵף מבוסס, אנו מציינים "תְעוּדַת זֶהוּת" בתוך ה addRowSet שיטה.

שים לב, במקום להשתמש בשם העמודה, היינו יכולים להשתמש גם במספר העמודה.

6. FilteredRowSet

סוף - סוף, ה FilteredRowSetמאפשר לנו לצמצם את מספר השורות הגלויות ב RowSet להתנגד כך שנוכל לעבוד רק עם הנתונים הרלוונטיים למה שאנחנו עושים.

אנו מחליטים כיצד אנו רוצים "לסנן" את הנתונים באמצעות יישום של ה- לְבַסֵס מִמְשָׁק:

מחלקה ציבורית FilterExample מיישמת Predicate {דפוס תבנית פרטי; Filterexample ציבורי (מחרוזת regexQuery) {if (regexQuery! = null &&! regexQuery.isEmpty ()) {pattern = Pattern.compile (regexQuery); }} הערכה בוליאנית ציבורית (RowSet rs) {נסה {אם (! rs.isAfterLast ()) {שם מחרוזת = rs.getString ("שם"); System.out.println (String.format ("מחפש תבנית '% s' ב-% s", pattern.toString (), שם)); התאמת התאמה = דפוס. התאמה (שם); התאמה חוזרת. התאמות (); } להחזיר אחר כוזב; } לתפוס (חריג e) {e.printStackTrace (); להחזיר כוזב; }} // שיטות לטיפול בשגיאות}

כעת אנו מיישמים את המסנן על a FilteredRowSet לְהִתְנַגֵד:

RowSetFactory rsf = RowSetProvider.newFactory (); FilteredRowSet frs = rsf.createFilteredRowSet (); frs.setCommand ("בחר * מלקוחות"); frs.execute (conn); frs.setFilter (FilterExample חדש ("^ [A-C]. *")); ResultSetMetaData rsmd = frs.getMetaData (); int columncount = rsmd.getColumnCount (); בעוד (frs.next ()) {for (int i = 1; i <= columncount; i ++) {System.out.println (rsmd.getColumnLabel (i) + "=" + frs.getObject (i) + "" ); }}

7. מסקנה

הדרכה מהירה זו כיסתה את חמשת היישומים הסטנדרטיים של RowSet ממשק זמין ב- JDK.

דנו בתצורה של כל יישום והזכרנו את ההבדלים ביניהם.

כפי שציינו, רק אחד מ- RowSet יישומים הם מחוברים RowSet אובייקט - ה JdbcRowSet. ארבעת האחרים מנותקים RowSet חפצים.

וכמו תמיד, ניתן למצוא את הקוד המלא של מאמר זה ב- Github.

תחתית Java

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס

$config[zx-auto] not found$config[zx-overlay] not found