getColumnCount //列數
getColumnName //列名
getColumnLabel //列標題,別名
1 /** 2 * Gets the designated column's suggested title for use in printouts and 3 * displays. The suggested title is usually specified by the SQL <code>AS</code> 4 * clause. If a SQL <code>AS</code> is not specified, the value returned from 5 * <code>getColumnLabel</code> will be the same as the value returned by the 6 * <code>getColumnName</code> method. 7 * 8 * @param column the first column is 1, the second is 2, ... 9 * @return the suggested column title 10 * @exception SQLException if a database access error occurs 11 */ 12 String getColumnLabel(int column) throws SQLException; 13 14 /** 15 * Get the designated column's name. 16 * 17 * @param column the first column is 1, the second is 2, ... 18 * @return column name 19 * @exception SQLException if a database access error occurs 20 */ 21 String getColumnName(int column) throws SQLException;
注釋說明getColumnLabel返回的是列標題,getColumnName返回的是列名,列標題和列名看起來是一個東西,其實並非這么簡單,列標題是指select語句中的列別名,也就是查詢結果集中顯示出來的列,而列名指的是數據庫表中的列名,以下邊的sql為例:
select c1 as label from t
getColumnLabel應該返回label,getColumnName應該返回c1。
當你使用和學習JDK的時候,可以查看並學習它所提供給你的兩個ResultSetMetaData和DataBaseMetaData類的源碼並很好的了解它們的實現原理和思路,JDBC中提供有兩種源數據,一種是數據庫源數據,另一種是 ResultSet源數據。這些源數據就是描述存儲用戶數據的容器的數據結構。其中ResultSetMetaData類完成了查詢結果信息和結果中的列的各種信息。下面我就以ResultSetMetaData為例,簡單的羅列它的使用方法以及它內部的方法的使用。
1 import java.sql.*; 2 3 public class jdbcTest { 4 public static void main(String[] args) throws ClassNotFoundException, SQLException { 5 //1、加載驅動 6 Class.forName("com.mysql.jdbc.Driver"); 7 //2、用戶信息和url 8 String url = "jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=true"; 9 String username = "root"; 10 String password = "123456"; 11 //3、連接成功,數據庫對象 12 Connection connection = DriverManager.getConnection(url, username, password); 13 14 //4、執行sql的對象 15 Statement statement = connection.createStatement(); 16 //5、執行sql的對象去執行sql,可能存在結果,查看返回結果 17 String sql = "select * from person"; 18 ResultSet resultSet = statement.executeQuery(sql); 19 ResultSetMetaData data = resultSet.getMetaData(); 20 testResultTableValues(data, resultSet); 21 22 while (resultSet.next()){ 23 System.out.print("id=" + resultSet.getObject("id")); 24 System.out.print("\tname=" + resultSet.getObject("name")); 25 System.out.println("\tage=" + resultSet.getObject("age")); 26 } 27 //6、釋放連接 28 resultSet.close(); 29 statement.close(); 30 connection.close(); 31 } 32 33 static void testResultTableValues(ResultSetMetaData data, ResultSet rs) { 34 try { 35 while (rs.next()) { 36 for (int i = 1; i <= data.getColumnCount(); i++) { 37 //獲得所有列的數目及實際列數 38 int columnCount = data.getColumnCount(); 39 //獲得指定列的列名 40 String columnName = data.getColumnName(i); 41 //獲得指定列的列值 42 String columnValue = rs.getString(i); 43 //獲得指定列的數據類型 44 int columnType = data.getColumnType(i); 45 //獲得指定列的數據類型名 46 String columnTypeName = data.getColumnTypeName(i); 47 //所在的Catalog名字 48 String catalogName = data.getCatalogName(i); 49 //對應數據類型的類 50 String columnClassName = data.getColumnClassName(i); 51 //在數據庫中類型的最大字符個數 52 int columnDisplaySize = data.getColumnDisplaySize(i); 53 //默認的列的標題 54 String columnLabel = data.getColumnLabel(i); 55 //獲得列的模式 56 String schemaName = data.getSchemaName(i); 57 //某列類型的精確度(類型的長度) 58 int precision = data.getPrecision(i); 59 //小數點后的位數 60 int scale = data.getScale(i); 61 //獲取某列對應的表名 62 String tableName = data.getTableName(i); 63 //是否自動遞增 64 boolean isAutoInctement = data.isAutoIncrement(i); 65 //在數據庫中是否為貨幣型 66 boolean isCurrency = data.isCurrency(i); 67 //是否為空 68 int isNullable = data.isNullable(i); 69 //是否為只讀 70 boolean isReadOnly = data.isReadOnly(i); 71 //能否出現在where中 72 boolean isSearchable = data.isSearchable(i); 73 System.out.println(columnCount); 74 System.out.println("獲得列" + i + "的字段名稱:" + columnName); 75 System.out.println("獲得列" + i + "的字段值:" + columnValue); 76 System.out.println("獲得列" + i + "的類型,返回SqlType中的編號:" + columnType); 77 System.out.println("獲得列" + i + "的數據類型名:" + columnTypeName); 78 System.out.println("獲得列" + i + "所在的Catalog名字:" + catalogName); 79 System.out.println("獲得列" + i + "對應數據類型的類:" + columnClassName); 80 System.out.println("獲得列" + i + "在數據庫中類型的最大字符個數:" + columnDisplaySize); 81 System.out.println("獲得列" + i + "的默認的列的標題:" + columnLabel); 82 System.out.println("獲得列" + i + "的模式:" + schemaName); 83 System.out.println("獲得列" + i + "類型的精確度(類型的長度):" + precision); 84 System.out.println("獲得列" + i + "小數點后的位數:" + scale); 85 System.out.println("獲得列" + i + "對應的表名:" + tableName); 86 System.out.println("獲得列" + i + "是否自動遞增:" + isAutoInctement); 87 System.out.println("獲得列" + i + "在數據庫中是否為貨幣型:" + isCurrency); 88 System.out.println("獲得列" + i + "是否為空:" + isNullable); 89 System.out.println("獲得列" + i + "是否為只讀:" + isReadOnly); 90 System.out.println("獲得列" + i + "能否出現在where中:" + isSearchable); 91 } 92 } 93 } catch (SQLException e) { 94 System.out.println("數據庫連接失敗"); 95 } 96 } 97 }