6.1 RowSet ์†Œ๊ฐœ

์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋“ฏ์ด JDBC ํ‘œ์ค€์€ ๊ฑฐ์˜ 20๋…„์ด ๋˜์—ˆ์œผ๋ฉฐ ์•ฝ๊ฐ„ ๊ตฌ์‹์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์œ ํ˜•๊ณผ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๊ฐ€ ์ฒœ์ฒœํžˆ ์ถ”๊ฐ€๋˜๊ณ  ์žˆ์ง€๋งŒ ๋ชจ๋“  ๊ณณ์—์„œ ์•„๋ฆ„๋‹ต๊ฒŒ ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์žฅ์†Œ ์ค‘ ํ•˜๋‚˜๋Š” ResultSet ์ž…๋‹ˆ๋‹ค .

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋” ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ResultSet ์ธํ„ฐํŽ˜์ด์Šค ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ช…์‹œ์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  executeQuery().

JDBC์˜ ์ œ์ž‘์ž๋Š” ์˜ค๋ž˜ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ์ด์ „์˜ ๋ชจ๋“  ๊ฒƒ๊ณผ ์™„์ „ํžˆ ํ‰ํ–‰ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ RowSet ๋กœ ์•Œ๋ ค์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค .

์ฃผ์š” ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • RowSet์€ ResultSet ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•˜๋ฏ€๋กœ ๊ทธ ๊ธฐ๋Šฅ์€ ResultSet๋ณด๋‹ค ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • RowSet์€ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ์•ž๋’ค๋กœ ์Šคํฌ๋กคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • RowSet์€ ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋œ ํ›„์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • RowSet์€ ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•˜๋ฏ€๋กœ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ XML ๋ฐ์ดํ„ฐ ์›๋ณธ ์ฝ๊ธฐ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • RowSet์€ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • RowSet์€ ํ…Œ์ด๋ธ” ์กฐ์ธ ์ž‘์—…๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ–‰ ์„ธํŠธ ์œ ํ˜•:

  • ์บ์‹œ๋œ ํ–‰ ์„ธํŠธ
  • FilteredRowSet
  • JdbcRowSet
  • JoinRowSet
  • WebRowSet

6.2 RowSet ๊ฐ์ฒด ์ƒ์„ฑ

์ž‘์—… ๊ฐœ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์„ธ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ์งธ, ์ „ํ†ต์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์–ป์€ ResultSet ์˜ ๋ฐ์ดํ„ฐ๋กœ ์ฑ„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

์˜ˆ๋ฅผ ๋“ค์–ด CachedRowSet์„ ์‚ฌ์šฉํ•˜์—ฌ ResultSet ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .


Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT * FROM user");
 
RowSetFactory factory = RowSetProvider.newFactory();
CachedRowSet crs = factory.createCachedRowSet();
crs.populate(results);		// Use ResultSet to populate

๋‘˜์งธ, ์ž์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜์—ฌ ์™„์ „ํžˆ ๋…๋ฆฝ๋œ RowSet ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
rowSet.setUrl("jdbc:mysql://localhost:3306/test");
rowSet.setUsername("root");
rowSet.setPassword("secret");
 
rowSet.setCommand("SELECT * FROM user");
rowSet.execute();

์…‹์งธ, ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์—ฐ๊ฒฐ์— RowSet์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
JdbcRowSet rowSet = new JdbcRowSetImpl(con);

rowSet.setCommand("SELECT * FROM user");
rowSet.execute();

6.3 RowSet ์ž‘์—…์˜ ์˜ˆ

์˜ˆ 1: ์บ์‹ฑ .

CachedRowSet์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œํ•˜๊ณ  ์ด๋ฏธ ๋‹ซํžŒ ์—ฐ๊ฒฐ์—์„œ ์ฝ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค .

Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT * FROM user");

RowSetFactory factory = RowSetProvider.newFactory();
CachedRowSet crs = factory.createCachedRowSet();
crs.populate(results);	// Use ResultSet to populate

connection.close();		// Close the connection

// Cache data is still available
while(crs.next()) {
  	System.out.println(crs.getString(1)+"\t"+ crs.getString(2)+"\t"+ crs.getString(3));
}

์˜ˆ์ œ 2: RowSet์„ ํ†ตํ•ด ํ–‰ ๋ณ€๊ฒฝ :

// Connect to the database
 CachedRowSet crs = rsf.createCachedRowSet();
 crs.setUrl("jdbc:mysql://localhost/test");
 crs.setUsername("root");
 crs.setPassword("root");
 crs.setCommand("SELECT * FROM user");
 crs.execute();

// This type of operation can only change standalone RowSet
// First, move the pointer to an empty (new) string, the current position is remembered
 crs.moveToInsertRow();
 crs.updateString(1, Random.nextInt());
 crs.updateString(2, "Clone" + System.currentTimeMillis());
 crs.updateString(3, "Female");
 crs.insertRow();  // Add the current (new) line to the rest of the lines
 crs.moveToCurrentRow(); // Return a pointer to the line where it was before insertion

 crs.beforeFirst();
 while(crs.next()) {
 	System.out.println(crs.getString(1) + "," + crs.getString(2) + "," + crs.getString(3));
}

// And now we can upload all our changes to the database
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/dbtest", "root", "root");
con.setAutoCommit(false); // Needed for synchronization
crs.acceptChanges(con);// Synchronize data to database

์ž‘๋™ ๋ฐฉ์‹์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์ฃผ์ œ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋‚ด ์ž„๋ฌด๋Š” ๋‹จ์ˆœํžˆ ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.