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