Java >> Java Program >  >> Tag >> SQL

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


Java-tagg