Java程序通过JDBC获取数据库及其数据表信息

本文介绍如何使用Java的JDBC连接数据库,获取数据库和数据表信息,包括创建、查看和删除数据库,以及操作表结构。示例代码展示了如何创建数据库、表,查询表名以及表结构,并进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在实际项目中,经常会遇到通过JDBC连接数据库,获取数据库及其表信息的情况,通过这种方法可以使Java程序独立于数据库结构,实现异构数据库件的数据交换。在学习过程中看到一段不错的代码,特此转过来和大家分享,共同学习。感谢原作者。

  ConnDB db=new ConnDB();
   if(db.connect()){   
    try {
     DatabaseMetaData dbmd=db.conn.getMetaData();    
     int cols=0;                     //列数
     //创建数据库
     String databaseSql="CREATE DATABASE TESTDATABASE";
     db.update(databaseSql);
     //库名
     System.out.println("database name:");
     ResultSet rest=dbmd.getCatalogs();    
     while(rest.next()){
      System.out.print(rest.getString("TABLE_CAT")+" | ");
     }
     System.out.println();            //换行
     //创建表
     rest=dbmd.getTables(db.conn.getCatalog(), null, "testTable", new String[]{"TABLE"});
     if(rest.next()){
      //testTable already exists
     }else{
      String createSql="CREATE TABLE testTable(id int primary key auto_increment,name varchar(20))auto_increment=10";
      db.update(createSql);
     }    
    
     //表名列表
     System.out.println("table name:");    
     rest=dbmd.getTables(
       db.conn.getCatalog(),   //第一个参数为String 型的DatabaseName
       null, null,
       new String[]{"TABLE"});
     //输出属性名称:TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS
     ResultSetMetaData rsmd=rest.getMetaData();
     int len=rsmd.getColumnCount();
     for(int i=0;i<len;i++){
      System.out.print(rsmd.getColumnName(i+1)+" | ");
     }
     System.out.println();
     //输出 table_name
     while(rest.next()){
      System.out.print(rest.getString("TABLE_NAME")+" | ");
      //每行7列
      cols++;
      if(cols%7==0){
       System.out.println();
      }
     }
     System.out.println();                 //换行
    
     //print table struct
     String sql="select * from testTable";
     rest=db.query(sql);
     rsmd=rest.getMetaData();
     len=rsmd.getColumnCount();
     System.out.println("table testTable:");
     System.out.printf("%-10s | %-12s | %5s | %4s |/n",
       new Object[]{"Field","Type","Null","Key"});
     //primary key
     rest=dbmd.getPrimaryKeys(null, null, "testTable");
     String pri="";
     if(rest.next()){
      pri=rest.getString("COLUMN_NAME");
     }
     for(int i=0;i<len;i++){     
      Object[] arg=new Object[7];
      arg[0]=rsmd.getColumnName(i+1);               //属性名称
      arg[1]=rsmd.getColumnTypeName(i+1);           //类型
      arg[2]=String.valueOf(rsmd.getPrecision(i+1));//长度
      if(rsmd.isNullable(i+1) == ResultSetMetaData.columnNullable){
       arg[3]="Yes";                             //
      }else{
       arg[3]="No";                              //NOT NULL
      }
      if(pri.equals(arg[0])){
       arg[4]="PRI";
      }else{
       arg[4]="";
      }
      System.out.printf("%-10s | %-8s(%s) | %5s | %4s |/n", arg);
     }    
     //删除数据库
     String deleteSql="DROP DATABASE TESTDATABASE";
     db.update(deleteSql);
     //关闭
     rest.close();
     db.closeConnect();
    } catch (Exception e) {    
     e.printStackTrace();
    }
    System.out.println("ok");
   }

引用自:http://hi.baidu.com/dyccsxg/blog/item/b7a2e52b746588f2e7cd4041.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值