jdbc反射mysql表資訊與列資訊
阿新 • • 發佈:2019-01-11
package a11;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class a14 {
public static void main(String[] args) throws ClassNotFoundException{
String str="com.mysql.jdbc.Driver";
String ur="jdbc:mysql://localhost:3306/show1";
String u="root";
String pass=".";
// try {
// DatabaseMetaData metaData = conn.getMetaData();
// ResultSet rs = metaData.getTables(conn.getCatalog(), "root", null, new String[]{"TABLE"});
// while(rs.next()) {
// System.out.println(rs.getString("TABLE_NAME"));
// }
//
Class.forName(str);
System.out.println("驅動連線成功");
Connection conn;
try {
conn = DriverManager.getConnection(ur, u, pass);
System.out.println("資料庫連線成功");
Statement com = conn.createStatement();
//ResultSet rea = com.executeQuery("show tables");
DatabaseMetaData data = conn.getMetaData();
ResultSet rs = data.getTables(null,null, null, null); //檢視資料庫下所有的表
//ResultSet rs = data.getColumns(null, null,"身份資訊",null); //查看錶裡的所有列
//ResultSet rs = com.executeQuery("select * from 身份資訊");
while(rs.next()){
System.out.println(rs.getString("table_name"));
//System.out.println(rs.getString("column_name"));
//System.out.println(rs.getString("name")+""+ rs.getString("age"));
}
//rea.close();
//com.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
//TABLE_CAT String => 表類別(可為 null)
TABLE_SCHEM String => 表模式(可為 null)
TABLE_NAME String => 表名稱
COLUMN_NAME String => 列名稱
DATA_TYPE int => 來自 java.sql.Types 的 SQL 型別
TYPE_NAME String => 資料來源依賴的型別名稱,對於 UDT,該型別名稱是完全限定的
COLUMN_SIZE int => 列的大小。
BUFFER_LENGTH 未被使用。
DECIMAL_DIGITS int => 小數部分的位數。對於 DECIMAL_DIGITS 不適用的資料型別,則返回 Null。
NUM_PREC_RADIX int => 基數(通常為 10 或 2)
NULLABLE int => 是否允許使用 NULL。
columnNoNulls - 可能不允許使用 NULL 值
columnNullable - 明確允許使用 NULL 值
columnNullableUnknown - 不知道是否可使用 null
REMARKS String => 描述列的註釋(可為 null)
COLUMN_DEF String => 該列的預設值,當值在單引號內時應被解釋為一個字串(可為 null)
SQL_DATA_TYPE int => 未使用
SQL_DATETIME_SUB int => 未使用
CHAR_OCTET_LENGTH int => 對於 char 型別,該長度是列中的最大位元組數
ORDINAL_POSITION int => 表中的列的索引(從 1 開始)
IS_NULLABLE String => ISO 規則用於確定列是否包括 null。
YES --- 如果引數可以包括 NULL
NO --- 如果引數不可以包括 NULL
空字串 --- 如果不知道引數是否可以包括 null
SCOPE_CATLOG String => 表的類別,它是引用屬性的作用域(如果 DATA_TYPE 不是 REF,則為 null)
SCOPE_SCHEMA String => 表的模式,它是引用屬性的作用域(如果 DATA_TYPE 不是 REF,則為 null)
SCOPE_TABLE String => 表名稱,它是引用屬性的作用域(如果 DATA_TYPE 不是 REF,則為 null)
SOURCE_DATA_TYPE short => 不同型別或使用者生成 Ref 型別、來自 java.sql.Types 的 SQL 型別的源型別(如果 DATA_TYPE 不是 DISTINCT 或使用者生成的 REF,則為 null)
IS_AUTOINCREMENT String => 指示此列是否自動增加*/
/*
Resultset getcolumns(String catalog,String schemapattern,String tablenamepatlem,String Columnnamepattern)
catalog 類別名稱,可匹配類別名稱,為null則表示該類別不縮小搜尋範圍
schemapattern 匹配的模式名稱,
tablenamepattern 表名稱
columnnamepattern 列名稱。
*/
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class a14 {
public static void main(String[] args) throws ClassNotFoundException{
String str="com.mysql.jdbc.Driver";
String u="root";
String pass=".";
// try {
// DatabaseMetaData metaData = conn.getMetaData();
// ResultSet rs = metaData.getTables(conn.getCatalog(), "root", null, new String[]{"TABLE"});
// while(rs.next()) {
// System.out.println(rs.getString("TABLE_NAME"));
//
//
Class.forName(str);
System.out.println("驅動連線成功");
Connection conn;
try {
conn = DriverManager.getConnection(ur, u, pass);
System.out.println("資料庫連線成功");
Statement com = conn.createStatement();
//ResultSet rea = com.executeQuery("show tables");
DatabaseMetaData data = conn.getMetaData();
//ResultSet rs = data.getColumns(null, null,"身份資訊",null); //查看錶裡的所有列
//ResultSet rs = com.executeQuery("select * from 身份資訊");
while(rs.next()){
System.out.println(rs.getString("table_name"));
//System.out.println(rs.getString("column_name"));
//System.out.println(rs.getString("name")+""+ rs.getString("age"));
}
//rea.close();
//com.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
//TABLE_CAT String => 表類別(可為 null)
TABLE_SCHEM String => 表模式(可為 null)
TABLE_NAME String => 表名稱
COLUMN_NAME String => 列名稱
DATA_TYPE int => 來自 java.sql.Types 的 SQL 型別
TYPE_NAME String => 資料來源依賴的型別名稱,對於 UDT,該型別名稱是完全限定的
COLUMN_SIZE int => 列的大小。
BUFFER_LENGTH 未被使用。
DECIMAL_DIGITS int => 小數部分的位數。對於 DECIMAL_DIGITS 不適用的資料型別,則返回 Null。
NUM_PREC_RADIX int => 基數(通常為 10 或 2)
NULLABLE int => 是否允許使用 NULL。
columnNoNulls - 可能不允許使用 NULL 值
columnNullable - 明確允許使用 NULL 值
columnNullableUnknown - 不知道是否可使用 null
REMARKS String => 描述列的註釋(可為 null)
COLUMN_DEF String => 該列的預設值,當值在單引號內時應被解釋為一個字串(可為 null)
SQL_DATA_TYPE int => 未使用
SQL_DATETIME_SUB int => 未使用
CHAR_OCTET_LENGTH int => 對於 char 型別,該長度是列中的最大位元組數
ORDINAL_POSITION int => 表中的列的索引(從 1 開始)
IS_NULLABLE String => ISO 規則用於確定列是否包括 null。
YES --- 如果引數可以包括 NULL
NO --- 如果引數不可以包括 NULL
空字串 --- 如果不知道引數是否可以包括 null
SCOPE_CATLOG String => 表的類別,它是引用屬性的作用域(如果 DATA_TYPE 不是 REF,則為 null)
SCOPE_SCHEMA String => 表的模式,它是引用屬性的作用域(如果 DATA_TYPE 不是 REF,則為 null)
SCOPE_TABLE String => 表名稱,它是引用屬性的作用域(如果 DATA_TYPE 不是 REF,則為 null)
SOURCE_DATA_TYPE short => 不同型別或使用者生成 Ref 型別、來自 java.sql.Types 的 SQL 型別的源型別(如果 DATA_TYPE 不是 DISTINCT 或使用者生成的 REF,則為 null)
IS_AUTOINCREMENT String => 指示此列是否自動增加*/
/*
Resultset getcolumns(String catalog,String schemapattern,String tablenamepatlem,String Columnnamepattern)
catalog 類別名稱,可匹配類別名稱,為null則表示該類別不縮小搜尋範圍
schemapattern 匹配的模式名稱,
tablenamepattern 表名稱
columnnamepattern 列名稱。
*/