javax.sql.RowSetMetaData Exempel
RowSetMetaData
är ett objekt som innehåller information om kolumnerna i en RowSet
objekt. Några av dessa kolumnegenskaper är kolumns tabellnamn, typ, antal, etikett, namn, storlek, är nullbar, skrivskyddad och så vidare.
Detta gränssnitt är en förlängning av ResultSetMetaData
gränssnitt med metoder för att ställa in värdena i en RowSetMetaData
objekt. Motsvarande gettermetoder ärvs från ResultSetMetaData
.
Från API:s javadoc – Metoderna i detta gränssnitt anropas internt när en applikation anropar RowSet
's execute()
metod; en applikationsprogrammerare skulle inte använda dem direkt.
1. Ett exempel
Exempelprogrammet hämtar en raduppsättnings metadata, modifierar den och verifierar ändringarna.
En CachedRowSet
skapas och fylls i med en databas tabellrader. CachedRowSet
s getMetaData()
metoden används för att få RowSetMetaData
objekt. Metadataobjektet efterfrågas och viss information om kolumnerna skrivs ut. Därefter ändras metadata och raduppsättningen uppdateras.
Följande är koden för exempelprogrammet och dess utdata.
1.1. Koden
RowsetMetadataExample.java
import javax.sql.rowset.RowSetProvider; import javax.sql.rowset.RowSetFactory; import javax.sql.rowset.CachedRowSet; import javax.sql.RowSetMetaData; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; public class RowsetMetadataExample { private final static String DB_URL = "jdbc:mysql://localhost:3306/example_db"; private final static String USR = "root"; private final static String PWD = "root"; private final static String BOOKS_TABLE = "books_table"; private final static String NEW_COLUMN_NAME_1 = "book_title"; private final static String NEW_COLUMN_NAME_2 = "book_author"; public static void main(String [] args) throws Exception { CachedRowSet crs = getCachedRowset(); Connection con = getDataSourceConnection(); populateRowset(crs, con); RowSetMetaData md = getMetaData(crs); setMetaData(crs, md); crs.close(); System.out.println("Close."); } private static CachedRowSet getCachedRowset() throws SQLException { System.out.println("Create cached rowset"); RowSetFactory rsFactory = RowSetProvider.newFactory(); CachedRowSet rowset = rsFactory.createCachedRowSet(); return rowset; } private static Connection getDataSourceConnection() throws SQLException { System.out.println("Get connection to database: " + DB_URL); MysqlDataSource myDs = new MysqlDataSource(); myDs.setURL(DB_URL); DataSource ds = myDs; Connection con = ds.getConnection(USR, PWD); return con; } private static void populateRowset(CachedRowSet crs, Connection con) throws SQLException { System.out.println("Populate rowset with database table rows: " + BOOKS_TABLE); String sql = "SELECT * FROM " + BOOKS_TABLE; crs.setCommand(sql); crs.execute(con); crs.last(); System.out.println("Total rows in table: " + crs.getRow()); } private static RowSetMetaData getMetaData(CachedRowSet crs) throws SQLException { RowSetMetaData metaData = (RowSetMetaData) crs.getMetaData(); System.out.println("Row set meta data: "); int cols = metaData.getColumnCount(); System.out.println(" Column count: " + cols); for (int i = 1; i <= cols; i++) { System.out.println(" Column: " + i); System.out.println(" Table: " + metaData.getTableName(i)); System.out.println(" Column name: " + metaData.getColumnName(i)); System.out.println(" Column type: " + metaData.getColumnTypeName(i)); System.out.println(" Column is nullable (0=No Nulls, 1=Nullable): " + metaData.isNullable(i)); } return metaData; } private static void setMetaData(CachedRowSet crs, RowSetMetaData metaData) throws SQLException { metaData.setColumnName(1, NEW_COLUMN_NAME_1); metaData.setColumnName(2, NEW_COLUMN_NAME_2); crs.setMetaData(metaData); metaData = (RowSetMetaData) crs.getMetaData(); System.out.println("Row set meta data - with updated column names: "); System.out.println(" Column 1 name: " + metaData.getColumnName(1)); System.out.println(" Column 2 name: " + metaData.getColumnName(2)); } }
OBS :Koden kommer åt en databastabell från en MySQL-server. MySQL-databasdrivrutinprogrammet måste finnas i klasssökvägen för att kompilera koden.
Utgången
Create cached rowset Get connection to database: jdbc:mysql://localhost:3306/example_db Populate rowset with database table rows: books_table Total rows in table: 5 Row set meta data: Column count: 2 Column: 1 Table: books_table Column name: title Column type: VARCHAR Column is nullable (0=No Nulls, 1=Nullable): 0 Column: 2 Table: books_table Column name: author Column type: VARCHAR Column is nullable (0=No Nulls, 1=Nullable): 1 Row set meta data - with updated column names: Column 1 name: book_title Column 2 name: book_author Close.
Observera att det finns två kolumner i raduppsättningen (fyllda från "books_table") och kolumnegenskaperna visas från utgången. Efter att metadata har ändrats visas de uppdaterade värdena för egenskapen kolumnnamn (till exempel ändras kolumnnamnet "titel" till "bok_titel").
OBS :CachedRowset
gränssnittet har setMetaData()
metod (visas på rad 88 i koden ovan), och denna ärvs av alla dess undergränssnitt. Den enda raduppsättningen utan denna metod är JdbcRowSet
.
2. Ladda ner Java-källkod
Detta var ett exempel på javax.sql.RowSetMetaData