/**

* 取得一张表的结构信息

* 使用DatabaseMetaData与ResultSetMetaData结合的方式获取全部属性

* @param conn   数据连接

* @param tableName    表名

* @return  表结构中列的存储对象

* @throws SQLException

*/

public TableInfo getTableInfo(Connection conn,Statement st, String tableName) throws SQLException{

TableInfo result = new TableInfo();

/**设置表名*/

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();//列名

//数据类型

int dataType = rs.getInt("DATA_TYPE");//类型

//数据类型名称

String dataTypeName = rs.getString("TYPE_NAME").toLowerCase();

//精度,列的大小

int precision = rs.getInt("COLUMN_SIZE");//精度

//小数位数

int scale = rs.getInt("DECIMAL_DIGITS");// 小数的位数

//是否为空

int isNull = rs.getInt("NULLABLE");//是否为空

//字段默认值

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();

/**设置主键*/

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 {

/** 主键标识 */

private boolean isKey;

/** 列名称 */

private String name;

/** 数据类型 */

private int dataType;

/** 数据类型名称 */

private String dataTypeName;

/** 自增标识 */

private boolean isAutoIncrement;

/** 精度 */

private int precision;

/** 是否为空*/

private int isNull;

/**小数位数 */

private int scale;

/**默认值 */

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("数据类型:" + getDataType() + "\n");

buf.append("类型名称:" + getDataTypeName() + "\n");

buf.append("主键:" + isKey() + "\n");

buf.append("自增:" + isAutoIncrement + "\n");

buf.append("为空:" + isNull + "\n");

buf.append("小数位数:" + 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;

}

}

java打印sql表_java程序获得SqlServer数据表的表结构相关推荐

  1. java执行数据库命令行_java程序执行命令行,解锁数据库表

    有些表锁的时间长或其他原因,在plsql中不能解锁,只能用命令行解锁. 有些功能跨平台系统的交互偶尔会锁表,就需要自动解锁. 下面是解锁的代码: package com.lg.BreakOracleU ...

  2. java 查询sql语句_java执行SQL语句实现查询的通用方法详解

    完成sql查询 并将查询结果放入vector容器,以便其他程序使用 /* * 执行sql查询语句 */ public static vector executequery(class clazz, s ...

  3. java生成sql语句_java生成SQL语句

    代码如下: /** * 动态生成SQ及SQL参数L * @param ve 接收到的消息的CHGLIST * @param paramList MQ消息中的SQL参数 * @param t 泛型对象 ...

  4. java 防止sql注入_Java中SQL注入以及如何轻松防止它

    java 防止sql注入 什么是SQL注入? (What is SQL Injection?) SQL Injection is one of the top 10 web application v ...

  5. java语言sql接口_Java语言SQL接口

    Java语言SQL接口 编辑 锁定 讨论 上传视频 <Java语言SQL接口>是1997年清华大学出版社出版的图书,作者是孙元等.本书覆盖了JDBC的各个方面,适合于有一定的Java语言编 ...

  6. java access远程连接_Java程序实现对access数据库的远程访问

    第四步:在其它计算机中运行测试代码 1.  程序中需要数据提供驱动程序,如: Class.forName("org.objectweb.rmijdbc.Driver").newIn ...

  7. java中sql语句_java中sql语句的编写规则

    java中sql语句的编写规则 发布时间:2020-06-26 15:11:11 来源:亿速云 阅读:143 作者:Leah 这期内容当中小编将会给大家带来有关java中sql语句的编写规则,文章内容 ...

  8. java语言执行过程_Java程序的运行过程(执行流程)分析

    万事知其然,要知其所以然,所以本节带大家来详细了解一下 Java 程序的执行过程.从<使用记事本编写运行Java程序>一节的案例可以看出,Java 程序的运行必须经过编写.编译和运行 3 ...

  9. SQL数据库语言基础之SqlServer数据表的六大约束(主键、外键、检查、非空、唯一性、默认值约束)的创建

    文章目录 一.主键约束(primary key) 二.外键约束(foreign key) 三.检查约束(check) 四.非空约束(not null) 五.唯一性约束(unique) 六.默认值约束( ...

最新文章

  1. python语言入门m-Python入门基础三-函数
  2. Chrome 的又一个bug?
  3. 这三篇论文开源了!何恺明等人的PointRend,Hinton组的SimCLR和谷歌大脑的EfficientDet...
  4. brother标签打印软件_标签打印软件如何设计食品留样标签模板
  5. 下图为双总线结构机器的数据通路_PDPS机器人虚拟调试 弧焊仿真 第一课 弧焊项目创建...
  6. 盗贼之海3月22服务器维护,盗贼之海3月29日更新公告_3月29日更新了什么_52pk单机游戏...
  7. 当不同公司的产品经理在一块聊天,会聊什么?
  8. 995. K 连续位的最小翻转次数
  9. android 移除泛型中元素_Android 代码混淆 混淆方案
  10. 隐马尔可夫HMM(EM算法(期望最大化算法)
  11. innodb存储引擎的基本架构
  12. js自动生成html报表,JavaScript实现动态生成表格
  13. DICOM图像像素值、灰度值与CT值
  14. 阿里为何不允许用Executors创建线程池?
  15. 《地震及时通》1.0版介绍
  16. 关于OpenSSL“心脏出血”漏洞的分析
  17. 7段均衡器最佳参数_7段均衡器怎么调能达到最佳效果?
  18. 【知识分享】固态硬盘可以作为服务器硬盘吗?
  19. 耐克人脸识别_人脸识别启动,全系9个车型随意选,买它立马有1.2万现金拿
  20. Li‘s 核磁共振影像数据处理-2-DWI实践:计算ADC (MD) map

热门文章

  1. Go的结构体对接受者函数的传递
  2. Linux的unlink
  3. 同软件多个线程设置不同ip_软件测试如何自学?收下这份《2020千锋性能测试入门视频教程》...
  4. php u6536编码转,详谈PHP编码转换问题
  5. javascript 函数 有任意多个参数/可变参数/动态参数
  6. 【日期、时间】javascript字符串转日期类型
  7. H2Database 转义符
  8. ORA-02082: 回送数据库链接必须具有连接限定词
  9. php 多进程 消息队列,[PHP] 多进程通信-消息队列使用
  10. jvm学习笔记(一)