想入侵别人的服务器的数据库修改数据吗?不知道别人服务器的数据库类型是不行的,JDBC中有一个获取数据库元数据的方法,可以获得数据库的相关信息。例:
Connection conn = JdbcUtils.getConnection();
DatabaseMetaData dbmd = conn.getMetaData(); //获得数据库元数据信息的对象
System.out.println(“数据库名:” + dbmd.getDatabaseProductName()); //比如打印出MYSQL
Systme.out.println(“是否支持事务处理:”+dbmd.supportsTransactions()); //比如打印出True
…… //还有很多方法,自己看IDE的提示
Conn.close();
还有些获取参数的原数据信息:
……
ParameterMetaData pmd = ps.getParameterMetaData(); //参数的元数据信息
例如Object[ ] params是通过外界方法调用传进来的,可以用
int count = pmd.getParameterCount(); 来获得传入参数的个数
//int index 是索引位,就是(?)占位符的位置
pmd.getParameterClassName( index ) //获得JAVA中的类型名,如打印出java.lang.String
pmd.getParameterType( index ) //获得类型号,比如打印出 12 ,代表VARCHAR类型
pmd.getParameterTypeName( index ) //获得数据库中的类型名,如打印出VARCHAR
这些方法需要依赖于数据库的JDBC是否支持,如MYSQL就不支持,都只会打印出VARCHAR类型的值
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以 下摘自http://iiec.cqu.edu.cn/wiki/index.php?title=JDBC%E5%85%83%E6%95%B0%E6 %8D%AE%E7%9B%B8%E5%85%B3%E6%8E%A5%E5%8F%A3%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E&oldid=3861
JDBC元数据主要用到DatabaseMetaData、ResultSetMetaData这两个接口
一、interface DatabaseMetaData 此接口由驱动供应商实现,主要描述数据库的整体综合信息,让用户了解DBMS与驱动程序相结合时的能力。
1) DatabaseMetaData的主要函数功能(对项目有用的)及代码实现(我是以MySQL为实例编写代码)
(1)获取MySQL中包含数据库的名称,由下图可看出MySQL中有mysql(系统自带)、test(自己创建)两个数据库。主要代码: try{ //显示加载MySQL的驱动
Class.forName("org.gjt.mm.mysql.Driver");
}catch(Exception e){
System.out.println("Class not find");
}
try{
String url="jdbc:mysql://localhost:3306/mysql";//数据源的名称
String username="root"; //用户名
String password="3511996"; //密码
//创建Connection对象连接数据库 Connection conn=DriverManager.getConnection(url, username, password);
//创建一个DatabaseMetaData对象 DatabaseMetaData dbmd=conn.getMetaData();
//获取可在MySQL中使用的数据库名称 ResultSet rCatalogs=dbmd.getCatalogs(); System.out.println("--------------"); System.out.println("获取可在此数据管理系统中使用的数据库名称: ");
//循环输出数据库名称
while(rCatalogs.next()){
System.out.println(rCatalogs.getString(1));
}
}catch(Exception e){
System.out.println(e.getMessage());
}
控制台显示如图:
(2)获取某一数据库(以mysql数据库为例如下图)下所有表的名称。 主要代码: //获取数据库mysql中表的名称 ResultSet r=dbmd.getTables("mysql",null,null,null); System.out.println("--------------"); System.out.println("获取数据库中表的名称:"); //循环输出表的名称 while(r.next()){ System.out.println(r.getString(3)); } 控制台显示如图:
(3)获取某表的列名和对应的数据类型,如下图(以mysql数据库下func表)为例。 主要代码: //获取某表的列相关信息 ResultSet rColumns=dbmd.getColumns("mysql", null, "func", null); System.out.println("--------------"); System.out.println("获取检索可在指定类别中使用的表列的描述:"); System.out.print("列名\t"); System.out.println("数据类型"); //循环输出列名和数据类型 while(rColumns.next()){ System.out.print(rColumns.getString(4)+"\t"); System.out.println(rColumns.getString(6)); } 控制台显示如图:
(4)获取指定表(以mysql数据库下func表为例)的主键,如下图显示name字段为func表的主键。 主要代码: //获取表的主键 ResultSet rPrimaryKey=dbmd.getPrimaryKeys("mysql", null, "func"); System.out.println("--------------"); System.out.println("获取指定表中的主键: "); //循环输出指定表的主键 while(rPrimaryKey.next()){ System.out.println(rPrimaryKey.getString(4)); } 控制台显示如图:
2) 总结和心得:
(1)该接口还能获取DBMS其他一些信息,如获取JDBC 驱动程序的主版本号,驱动程序,用户名等大家可以查阅Java API相应的文档,我就不一 一列举了。 (2)创建该接口时调用Connection的getMetaData()方法,学习该接口时,可以按API文档个试验每个函数,虽然比较土,但很有效。 (3)安装MySQL时要注意字符集的选择,否则插入记录时可能不能支持中文,如要支持,选择"gb2312"。