Java数据库高级编程.ppt
利用利用JDBC 驱动程序处理元数据驱动程序处理元数据 nJDBC 驱动程序可用于获取数据库、结果集或参驱动程序可用于获取数据库、结果集或参数的元数据。例如,数的元数据。例如,JSP/Java Servlet通过通过JDBC驱动程序与数据库管理系统建立连接后,得到一驱动程序与数据库管理系统建立连接后,得到一个个Connection 对象,可以从这个对象获得有关数对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个据库管理系统的各种信息,包括数据库中的各个数据表,数据表中的各个列,数据类型,触发器,数据表,数据表中的各个列,数据类型,触发器,存储过程等各方面的信息。存储过程等各方面的信息。利用利用JDBC 驱动程序处理元数据驱动程序处理元数据 n根据这些信息,根据这些信息,JDBC驱动程序可以访问一个事驱动程序可以访问一个事先并不了解的数据库。获取数据库的元数据可以先并不了解的数据库。获取数据库的元数据可以通过通过DatabaseMetaData对象实现,该对象是通对象实现,该对象是通过过Connection对象中的对象中的getMetaData()方法获得的。方法获得的。语句如下:语句如下:DatabaseMetaData dbMetaData=con.getMetaData();DatabaseMetaData类类 nDatabaseMetaData类中提供了许多方法用于获得类中提供了许多方法用于获得数据源的各种信息,通过这些方法可以详细了解数据源的各种信息,通过这些方法可以详细了解数据库的信息。常见方法如下:数据库的信息。常见方法如下:pgetURL():返回一个:返回一个String类对象,代表数据库类对象,代表数据库的的URL。pgetUserName():返回连接当前数据库管理系统:返回连接当前数据库管理系统的用户名。的用户名。pgetDriverName():返回驱动驱动程序的名称。:返回驱动驱动程序的名称。DatabaseMetaData类类 pisReadOnly():返回一个:返回一个boolean值,指示数据值,指示数据库是否只允许读操作。库是否只允许读操作。pgetDatabaseProductName():返回数据库的产品返回数据库的产品名称。名称。pgetDatabaseProductVersion():返回数据库的版返回数据库的版本号。本号。pgetDriverVersion():返回驱动程序的版本号。返回驱动程序的版本号。DatabaseMetaData类类 pgetMaxConnections():返回:返回可能连接到该数据库可能连接到该数据库的最大并发连接数。的最大并发连接数。pgetMaxColumnsInTable():返回此数据库在表返回此数据库在表中允许的最大列数。中允许的最大列数。pgetMaxColumnNameLength():返回此数据库返回此数据库在列名中允许的最大字符数。在列名中允许的最大字符数。pgetMaxTableNameLength():返回此数据库在返回此数据库在表名中允许的最大字符数。表名中允许的最大字符数。DatabaseMetaData类类 n举例:举例:利用利用DatabaseMetaData 接口对象中的有接口对象中的有关方法获取关方法获取gzk.mdb的有关信息的有关信息(Getdbinfo.java)使用结果集元数据使用结果集元数据 n利用利用ResultSet对象中的对象中的getMetaData()方法可以方法可以获取获取ResultSetMetaData接口对象,利用该接口对象,利用该对象对象的提供方法可以获取有关结果集中所包含列的名的提供方法可以获取有关结果集中所包含列的名称和数据类型的信息。常见方法如下:称和数据类型的信息。常见方法如下:pgetColumnCount():返回数据表的列数。返回数据表的列数。pgetColumnName():返回数据表中的列名称,即:返回数据表中的列名称,即字段名。字段名。pgetColumnType():返回字段的类型:返回字段的类型。使用结果集元数据使用结果集元数据 pgetColumnName():返回数据表中的列名称,即:返回数据表中的列名称,即字段名。字段名。n举例:获取举例:获取gzk.mdb中中gzb表的有关信息表的有关信息(Gettableinfo.java)ngetTables()方法方法:格式如下格式如下getTables(String catalog,String schemapattern,String tablenamepattern,Strin type)n功能:返回一个功能:返回一个ResultSet对象对象。使用结果集元数据使用结果集元数据 n参数说明参数说明:pcatalog:为目录名,:为目录名,“”(空串空串)可以检索没有目可以检索没有目录的表,录的表,null表示忽略目录;表示忽略目录;pschemapattern:为大纲名称的匹配模式,:为大纲名称的匹配模式,“”可以检索没有大纲的表可以检索没有大纲的表;ptablenamepattern:为表名匹配模式为表名匹配模式;ptype:为需要检索的表类型列表,:为需要检索的表类型列表,null 表示返回表示返回所有类型所有类型。使用结果集元数据使用结果集元数据 n例如,获取指定表的信息:例如,获取指定表的信息:pm_DBMetaData=con.getMetaData();pResultSet tableRet=m_DBMetaData.getTables(null,%,m_TableName,new StringTABLE);p其中,其中,“%”表示任意的意思,表示任意的意思,m_TableName是要获取是要获取的数据表的名字,如果想获取所有表的名字,可以使用的数据表的名字,如果想获取所有表的名字,可以使用“%”来作为参数。来作为参数。pgetTables方法的返回结果保存在一个类似方法的返回结果保存在一个类似table的内存结的内存结构中。其中,构中。其中,TABLE_NAME这个名字的字段就是每个这个名字的字段就是每个表的名字。表的名字。使用结果集元数据使用结果集元数据 n利用利用getColumns()提取表内的字段名和字段类型提取表内的字段名和字段类型,程序程序片段如下:片段如下:pResultSet colRet=m_DBMetaData.getColumns(null,%,m_TableName,%);while(colRet.next()columnName=colRet.getString(COLUMN_NAME);columnType=colRet.getString(TYPE_NAME);datasize=colRet.getInt(COLUMN_SIZE);n举例:举例:Gettablemetdata.java