java获取数据库的列名,类型等信息
2019獨角獸企業重金招聘Python工程師標準>>>
當你使用和學習JDK的時候,可以查看并學習它所提供給你的兩個ResultSetMetaData?
和DataBaseMetaData類的源碼并很好的了解它們的實現原理和思路,JDBC中提供有兩種源數據,一種是數據庫源數據,另一種是 ResultSet源數據。這些源數據就是描述存儲用戶數據的容器的數據結構。其中ResultSetMetaData類完成了查詢結果信息和結果中的列的各種信息。下面我就以ResultSetMetaData為例,簡單的羅列它的使用方法以及它內部的方法的使用。?
首先,建立一張表并起名為users,表結構描述如下:?
字段描述????????? 字段名稱??????? 是否為空????? 是否主鍵?
用戶編號??????????? id???????? Not Null?????? P?
用戶名稱????????? userName???? Not Null?
用戶密碼????????? password???? Not Null?
你也可以通過DLL執行下面腳本:(本人使用Mysql)???
CREATE TABLE `users` (?
? `id` varchar(32) NOT NULL,?
? `userName` varchar(20) NOT NULL,?
? `password` varchar(20) NOT NULL,?
? PRIMARY KEY? (`id`),?
? UNIQUE KEY `id` (`id`)?
) ENGINE=InnoDB DEFAULT CHARSET=gbk;?
然后向該表中插入幾條數據。?
最后,新建一個測試類名為TestDemo.java,源代碼如下:?
package com.wanglihu.test;?
import java.sql.Connection;?
import java.sql.DriverManager;?
import java.sql.ResultSet;?
import java.sql.PreparedStatement;?
import java.sql.ResultSetMetaData;?
import java.sql.SQLException;?
public class TestDemo {?
public static Connection getConnection(){?
Connection conn = null;?
try {?
Class.forName("com.mysql.jdbc.Driver");?
String url = "jdbc:mysql://localhost:3306/struts2Demo";?
String user = "root";?
String pass = "123456";?
conn = DriverManager.getConnection(url,user,pass);?
} catch (ClassNotFoundException e) {?
e.printStackTrace();?
} catch (SQLException e) {?
e.printStackTrace();?
}?
return conn;?
}?
public static void main(String[] args){?
Connection conn=getConnection();?
String sql="select * from users";?
PreparedStatement stmt;?
try {?
stmt = conn.prepareStatement(sql);?
ResultSet rs=stmt.executeQuery(sql);?
ResultSetMetaData data=rs.getMetaData();?
while(rs.next()){?
for(int i = 1 ; i<= data.getColumnCount() ; i++){?
//獲得所有列的數目及實際列數?
int columnCount=data.getColumnCount();?
//獲得指定列的列名?
String columnName = data.getColumnName(i);?
//獲得指定列的列值?
String columnValue = rs.getString(i);?
//獲得指定列的數據類型?
int columnType=data.getColumnType(i);?
//獲得指定列的數據類型名?
String columnTypeName=data.getColumnTypeName(i);?
//所在的Catalog名字?
String catalogName=data.getCatalogName(i);?
//對應數據類型的類?
String columnClassName=data.getColumnClassName(i);?
//在數據庫中類型的最大字符個數?
int columnDisplaySize=data.getColumnDisplaySize(i);?
//默認的列的標題?
String columnLabel=data.getColumnLabel(i);?
//獲得列的模式?
String schemaName=data.getSchemaName(i);?
//某列類型的精確度(類型的長度)?
int precision= data.getPrecision(i);?
//小數點后的位數?
int scale=data.getScale(i);?
//獲取某列對應的表名?
String tableName=data.getTableName(i);?
// 是否自動遞增?
boolean isAutoInctement=data.isAutoIncrement(i);?
//在數據庫中是否為貨幣型?
boolean isCurrency=data.isCurrency(i);?
//是否為空?
int isNullable=data.isNullable(i);?
//是否為只讀?
boolean isReadOnly=data.isReadOnly(i);?
//能否出現在where中?
boolean isSearchable=data.isSearchable(i);?
System.out.println(columnCount);?
System.out.println("獲得列"+i+"的字段名稱:"+columnName);?
System.out.println("獲得列"+i+"的字段值:"+columnValue);?
System.out.println("獲得列"+i+"的類型,返回SqlType中的編號:"+columnType);?
System.out.println("獲得列"+i+"的數據類型名:"+columnTypeName);?
System.out.println("獲得列"+i+"所在的Catalog名字:"+catalogName);?
??? System.out.println("獲得列"+i+"對應數據類型的類:"+columnClassName);?
??? System.out.println("獲得列"+i+"在數據庫中類型的最大字符個數:"+columnDisplaySize);?
??? System.out.println("獲得列"+i+"的默認的列的標題:"+columnLabel);?
??? System.out.println("獲得列"+i+"的模式:"+schemaName);?
??? System.out.println("獲得列"+i+"類型的精確度(類型的長度):"+precision);?
??? System.out.println("獲得列"+i+"小數點后的位數:"+scale);?
??? System.out.println("獲得列"+i+"對應的表名:" + tableName);?
??? System.out.println("獲得列"+i+"是否自動遞增:"+isAutoInctement);?
??? System.out.println("獲得列"+i+"在數據庫中是否為貨幣型:"+isCurrency);?
??? System.out.println("獲得列"+i+"是否為空:"+isNullable);?
??? System.out.println("獲得列"+i+"是否為只讀:"+isReadOnly);?
??? System.out.println("獲得列"+i+"能否出現在where中:"+isSearchable);??
}?
}?
} catch (SQLException e) {?
System.out.println("數據庫連接失敗");?
}?
}?
}?
轉載于:https://my.oschina.net/pvpCC9IFwqz4/blog/825455
總結
以上是生活随笔為你收集整理的java获取数据库的列名,类型等信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Amazon DynamoDB 入门2:
- 下一篇: 为什么下载源码包需要到官网上去下载?