元數據- DataBaseMetaData
元數據:數據庫、表、列的定義信息。
Connection.getDatabaseMetaData()
DataBaseMetaData對象
getURL():返回一個String類對象,代表數據庫的URL。
getUserName():返回連接當前數據庫管理系統的用戶名。
getDatabaseProductName():返回數據庫的產品名稱。
getDatabaseProductVersion():返回數據庫的版本號。
getDriverName():返回驅動驅動程序的名稱。
getDriverVersion():返回驅動程序的版本號。
isReadOnly():返回一個boolean值,指示數據庫是否只允許讀操作。
元數據- ParameterMetaData
PreparedStatement . getParameterMetaData()
獲得代表PreparedStatement元數據的ParameterMetaData對象。
ParameterMetaData對象
getParameterCount()
獲得指定參數的個數
getParameterType(int param)
獲得指定參數的sql類型
元數據- ResultSetMetaData
ResultSet. getMetaData()
獲得代表ResultSet對象元數據的ResultSetMetaData對象。
ResultSetMetaData對象
getColumnCount()
返回resultset對象的列數
getColumnName(int column)
獲得指定列的名稱
getColumnTypeName(int column)
獲得指定列的類型
package cn.hncu.meta;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import org.junit.Test;
import cn.hncu.pool.ConnUtils4;
public class MetaDataDemo {
/*
* 要點:
操縱: 數據庫驅動的信息、數據庫名、數據表信息(名字、個數) ---java.sql.DatabaseMetaData <---通過con.getMetaData()獲得
操縱: 表結構信息,如字段名、列數 ---java.sql.ResultSetMetaData <--- 通過rs.getMetaData()獲得
*數據庫的其它稱呼: Catlog,Schema , Database
*/
@Test
public void DatabaseMetaDataDemo() throws Exception{
Connection con=ConnUtils4.getConnection();
DatabaseMetaData dm=con.getMetaData();
System.out.println(dm.getDriverName());//MySQL Connector Java
System.out.println(dm.getDatabaseMajorVersion()+"."+dm.getDatabaseMinorVersion());//5.6
System.out.println(dm.getMaxStatements());//0:表示沒有限制資源
System.out.println(dm.getJDBCMajorVersion()+",,,"+dm.getJDBCMinorVersion());//4,,,0
//返回所有數據庫的名字
ResultSet rs=dm.getCatalogs();
while(rs.next()){
System.out.println(rs.getString(1)+","+rs.getString("TABLE_CAT"));
}
//返回某個數據庫的表名
//參數解析:第1和第2個都是數據庫的名字(2個,是爲兼容不同數據庫),第3個參數是查詢表名的過濾模式(null爲不過濾即查所有,"%a%"爲表名中包含字母'a'),
//最後一個參數是表類型如"TABLE""VIEW"等(這些值可查看API中getTableTypes()方法)
rs=dm.getTables("hncu", "hncu", null, new String[]{"TABLE","VIEW"});
while(rs.next()){
//字符串參數的具體取值參看API中getTables()
System.out.println(rs.getString("TABLE_NAME")+","+rs.getString("TABLE_TYPE"));
}
//如果已知數據庫的名字,打開該數據庫。如果還知道某個表的名字,那麼可以操縱這個表
String s1="abc";
con.createStatement().execute("use "+s1);//SQL:use abc;
String s2="book";
ResultSet rs2 = con.createStatement().executeQuery("select * from "+ s2);
while(rs2.next()){
//如果已經列數n,就可輸出表格的所有數據
int n = 4;
for(int i=1;i<=n;i++){
Object obj = rs2.getObject(i);
System.out.print(obj+" ");
}
System.out.println();
}
}
@Test //表結構信息
public void ResultSetMetaDataDemo() throws Exception{
//跨庫查詢
Connection con=ConnUtils4.getConnection();//該版本的配置文件的url中是沒有數據庫名字的
Statement st=con.createStatement();
String dname="abc";//數據庫名
String tname="book";//表名
String sql="select * from " + dname+"."+tname;
ResultSet rs=st.executeQuery(sql);
ResultSetMetaData rm=rs.getMetaData();
//獲取當前表格的列數
int cols=rm.getColumnCount();
System.out.println("列數:"+cols);
//輸出當前表格的表頭
for(int i=0;i<cols;i++){
System.out.print(rm.getColumnName(i+1)+"\t");
}
System.out.println();
//輸出表數據
while(rs.next()){
//輸出一行
for(int i=0;i<cols;i++){
System.out.print(rs.getObject(i+1)+"\t");
}
System.out.println();
}
}
}