Java 獲取數據庫的庫、表、字段信息 (僅供參考)

1 通過druid配置相關信息

druid jar包

      <!-- druid 數據庫連接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.14</version>
        </dependency>

java 代碼

public void GetDbConnect() throws Exception {
DruidDataSource dataSource = null;
  try{
  dataSource  =new DruidDataSource();
  //設置連接參數 (***自己定義傳遞的參數***)
  dataSource.setUrl(requestDB.getUrl());
  dataSource.setDriverClassName(requestDB.getDriver());
  dataSource.setUsername(requestDB.getUserName());
  dataSource.setPassword(requestDB.getPassword());
  //配置初始化大小、最小、最大
  dataSource.setInitialSize(1);
  dataSource.setMinIdle(1);
  dataSource.setMaxActive(20);
  //連接泄漏監測
  dataSource.setRemoveAbandoned(true);
  dataSource.setRemoveAbandonedTimeout(30);
  //配置獲取連接等待超時的時間
  dataSource.setMaxWait(20000);
  //配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
  dataSource.setTimeBetweenEvictionRunsMillis(20000);
  //防止過期
  dataSource.setValidationQuery("SELECT 'x'");
  dataSource.setTestWhileIdle(true);
  dataSource.setTestOnBorrow(true);
  }catch(Exception e){
  logger.error("異常:", e);
  }
  // 建立了連接
 Connection con=dataSource.getConnection();
  }

1.1 獲取數據庫相關信息(通過getMeteData()方法)

數據庫驅動的信息、數據庫名、數據表信息(名字、個數) ---java.sql.DatabaseMetaData <---通過con.getMetaData()獲得

con = connect.getConnect();
DatabaseMetaData dbMetaData = con.getMetaData();
System.out.println(dbMetaData.getDriverName());
System.out.println(dbMetaData.getURL());
System.out.println(dbMetaData.getUserName());
System.out.println("");

輸出為:

MySQL Connector Java
jdbc:mysql://...
root@168.......

1.2 獲取所有表信息

ResultSet rs = dbMetaData.getTables(null, null, null, new String[] { "TABLE" });
int i = 0;
while (rs.next()) {
i++;
if(i==10) {
break;
}
System.out.println("表名:" + rs.getString("TABLE_NAME"));
System.out.println("表類型:" + rs.getString("TABLE_TYPE"));
System.out.println("表所屬數據庫:" + rs.getString("TABLE_CAT"));
System.out.println("表備注:" + rs.getString("REMARKS"));
tables.add(rs.getString("TABLE_NAME"));
}
}

關于 getTables(null, null, null, new String[] { "TABLE" }) 這個方法 api里面對其參數有詳細的介紹(沒事情多看看api介紹,發現還是很詳細的~~)
輸出為:

表名:activity
表類型:TABLE
表所屬數據庫:ztdb
表備注:

表名:activityreview
表類型:TABLE
表所屬數據庫:ztdb
表備注:

1.2.1 獲取所有表的另一種方法(這個方法并沒有找到返回表的詳細信息; 可能有詳細信息但是自己并沒有發現吧)

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SHOW TABLES");
while (rs.next()) {
String tableName = rs.getString(1);
System.out.println(rs.getString(1));
tables.add(tableName);
}

1.3 獲取表中所有字段的信息

表結構信息,如字段名、列數 ---java.sql.ResultSetMetaData <--- 通過rs.getMetaData()獲得

ResultSet rsColimns = dbMetaData.getColumns(null, "%", rs.getString("TABLE_NAME"), "%");
while (rsColimns.next()) {
System.out.println("字段名:" + rsColimns.getString("COLUMN_NAME") + "------" + "類型:"
+ rsColimns.getString("TYPE_NAME") + "------" + "長度:" + rsColimns.getString("COLUMN_SIZE")
+ "------" + "備注:" + rsColimns.getString("REMARKS"));
}

輸出為:

字段名:ACTIVITYINDEX------類型:BIGINT UNSIGNED------長度:20------備注:活動編號
字段名:SIMPLECONTENT------類型:TEXT------長度:65535------備注:簡要信息,用于客戶瀏覽,存入json
字段名:FULLCONTENTEDIT------類型:MEDIUMTEXT------長度:16777215------備注:全文內容,用于回顯編輯使用,存入json
字段名:TITLE------類型:VARCHAR------長度:255------備注:標題

1.3.1 獲取字段信息的另一種方法(親測沒有備注信息的返回)

for (String tableName : tables) {
String sql = "select * from " + tableName;
try {
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
ResultSetMetaData meta = rs.getMetaData();
System.out.println(rs);
int columeCount = meta.getColumnCount();
System.out.println("表 "+ tableName + "共有 "+columeCount+" 個字段。字段信息如下:");
for (int i = 1; i < columeCount + 1; i++) {
System.out.println("字段名:"+meta.getColumnName(i)+"------"
+"類型:"+meta.getColumnTypeName(i)+"------" +"長度:"+meta.getColumnDisplaySize(i));
}
} catch (SQLException e) {
e.printStackTrace();
}
}

關于 getString() 中的參數獲?。?/p>

TIM截圖20180112123741.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。