java打印sql表_java程序获得SqlServer数据表的表结构
/**
* 取得一張表的結(jié)構(gòu)信息
* 使用DatabaseMetaData與ResultSetMetaData結(jié)合的方式獲取全部屬性
* @param conn?? 數(shù)據(jù)連接
* @param tableName??? 表名
* @return??表結(jié)構(gòu)中列的存儲對象
* @throws SQLException
*/
public TableInfo getTableInfo(Connection conn,Statement st, String tableName) throws SQLException{
TableInfo result = new TableInfo();
/**設(shè)置表名*/
result.setTableName(tableName);
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet rs = dbmd.getColumns(null, null, tableName.toUpperCase(), null);
/**判斷字段是否自增*/
String sql = "select * from " + tableName + " where 1=2";
ResultSet rst = conn.prepareStatement(sql).executeQuery();
ResultSetMetaData rsmd = rst.getMetaData();
int i=1;
while(rs.next()){
//列名稱
String columnName = rs.getString("COLUMN_NAME").toLowerCase();//列名
//數(shù)據(jù)類型
int dataType = rs.getInt("DATA_TYPE");//類型
//數(shù)據(jù)類型名稱
String dataTypeName = rs.getString("TYPE_NAME").toLowerCase();
//精度,列的大小
int precision = rs.getInt("COLUMN_SIZE");//精度
//小數(shù)位數(shù)
int scale = rs.getInt("DECIMAL_DIGITS");// 小數(shù)的位數(shù)
//是否為空
int isNull = rs.getInt("NULLABLE");//是否為空
//字段默認(rèn)值
String defaultValue = rs.getString("COLUMN_DEF");
//是否自增
boolean isAutoIncrement = rsmd.isAutoIncrement(i); //自增
ColumnInfo col = new ColumnInfo();
col.setName(columnName);
col.setDataType(dataType);
col.setDataTypeName(dataTypeName);
col.setPrecision(precision);
col.setScale(scale);
col.setIsNull(isNull);
col.setDefaultValue(defaultValue);
col.setAutoIncrement(isAutoIncrement);
result.setColInfo(columnName, col);
i++;
}
rs.close();
/**設(shè)置主鍵*/
rs = dbmd.getPrimaryKeys(null, null, tableName);
while(rs.next()){
result.setPrimaryKey(rs.getString("COLUMN_NAME").toLowerCase(), true);
System.out.println(rs.getString("COLUMN_NAME"));
}
rs.close();
return result;
}
/**
* 列信息存儲對象
* @author
*/
public class ColumnInfo {
/** 主鍵標(biāo)識 */
private boolean isKey;
/** 列名稱 */
private String name;
/** 數(shù)據(jù)類型 */
private int dataType;
/** 數(shù)據(jù)類型名稱 */
private String dataTypeName;
/** 自增標(biāo)識 */
private boolean isAutoIncrement;
/** 精度 */
private int precision;
/** 是否為空*/
private int isNull;
/**小數(shù)位數(shù) */
private int scale;
/**默認(rèn)值 */
private String defaultValue;
public boolean isKey() {
return isKey;
}
public void setKey(boolean isKey) {
this.isKey = isKey;
}
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
if(null==(defaultValue)){
}else{
this.defaultValue = "'"+defaultValue+"'";
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getDataType() {
return dataType;
}
public void setDataType(int dataType) {
this.dataType = dataType;
}
public boolean isAutoIncrement() {
return isAutoIncrement;
}
public void setAutoIncrement(boolean isAutoIncrement) {
this.isAutoIncrement = isAutoIncrement;
}
public String getDataTypeName() {
return dataTypeName;
}
public void setDataTypeName(String dataTypeName) {
this.dataTypeName = dataTypeName;
}
public String toString(){
StringBuffer buf = new StringBuffer();
buf.append("-------------\n");
buf.append("字段名稱:" + getName() + "\n");
buf.append("數(shù)據(jù)類型:" + getDataType() + "\n");
buf.append("類型名稱:" + getDataTypeName() + "\n");
buf.append("主鍵:" + isKey() + "\n");
buf.append("自增:" + isAutoIncrement + "\n");
buf.append("為空:" + isNull + "\n");
buf.append("小數(shù)位數(shù):" + scale + "\n");
buf.append("精度:"+precision+"\n");
buf.append("初始值:"+defaultValue+"\n");
return buf.toString();
}
public int getPrecision() {
return precision;
}
public void setPrecision(int precision) {
this.precision = precision;
}
public int getIsNull() {
return isNull;
}
public void setIsNull(int isNull) {
this.isNull = isNull;
}
public int getScale() {
return scale;
}
public void setScale(int scale) {
this.scale = scale;
}
}
總結(jié)
以上是生活随笔為你收集整理的java打印sql表_java程序获得SqlServer数据表的表结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中时间入数据库格式转换_数据库中
- 下一篇: java 共享内存获取写权限_跨进程访问