1. 程式人生 > >JDBC獲取資料庫及表資訊

JDBC獲取資料庫及表資訊

  JDBC中通過MetaData來獲取具體的表的相關資訊。可以查詢資料庫中的有哪些表,表有哪些欄位,欄位的屬性等等。MetaData中通過一系列getXXX函式,將這些資訊存放到ResultSet裡面,然後返回給使用者。關於MetaData的說明網上也有不少,這裡我只是從我自身學習的角度來記錄一下簡單使用JDBC以及獲取資料表相關資訊的方法。 

   下面就是我的JDBC下的獲取表資訊的程式碼了。我是以MySQL 5.0作為測試平臺的。

   1. JDBC連線MYSQL的程式碼很標準,很簡單。

   class.forName("com.mysql.jdbc.Driver").newInstance();
   Connection conn = DriverManager
     .getConnection("jdbc:mysql://localhost/test?user=root&password=123456");

   2. 下面就是獲取表的資訊。

    m_DBMetaData = m_Connection.getMetaData();
    ResultSet tableRet = m_DBMetaData.getTables(null, "%",m_TableName,new String[]{"TABLE"});
    其中"%"就是表示*的意思,也就是任意所有的意思。其中m_TableName就是要獲取的資料表的名字,如果想獲取所有的表的名字,就可以使用"%"來作為引數了。

   3. 提取表的名字。

   while(tableRet.next) System.out.println(tableRet.getString("TABLE_NAME"));

 通過getString("TABLE_NAME"),就可以獲取表的名字了。
 從這裡可以看出,前面通過getTables的介面的返回,JDBC是將其所有的結果,儲存在一個類似table的記憶體結構中,而其中TABLE_NAME這個名字的欄位就是每個表的名字。

  4. 提取表內的欄位的名字和型別

  String columnName;
  String columnType;
  ResultSet colRet = m_DBMetaData.getColumns(null,"%", m_TableName,"%");
  while(colRet.next()) {
   columnName = colRet.getString("COLUMN_NAME");
   columnType = colRet.getString("TYPE_NAME");
   int datasize = colRet.getInt("COLUMN_SIZE");
   int digits = colRet.getInt("DECIMAL_DIGITS");
   int nullable = colRet.getInt("NULLABLE");  
   System.out.println(columnName+" "+columnType+" "+datasize+" "+digits+" "+
     nullable);
  }

  JDBC裡面通過getColumns的介面,實現對欄位的查詢。跟getTables一樣,"%"表示所有任意的(欄位),而m_TableName就是資料表的名字。

  getColumns的返回也是將所有的欄位放到一個類似的記憶體中的表,而COLUMN_NAME就是欄位的名字,TYPE_NAME就是資料型別,比如"int","int unsigned"等等,COLUMN_SIZE返回整數,就是欄位的長度,比如定義的int(8)的欄位,返回就是8,最後NULLABLE,返回1就表示可以是Null,而0就表示Not Null。