java程序获得SqlServer数据表的表结构
/**
* 取得一张表的结构信息
* 使用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程序获得SqlServer数据表的表结构的更多相关文章
- 使用java生成备份sqlserver数据表的insert语句
针对sqlserver数据表的备份工具很多,有时候条件限制需要我们自己生成insert语句,以便后期直接执行这些插入语句.下面提供了一个简单的思路,针对mysql或oracle有兴趣的以后可以试着修改 ...
- java程序执行命令行,解锁数据库表
有些表锁的时间长或其他原因,在plsql中不能解锁,只能用命令行解锁. 有些功能跨平台系统的交互偶尔会锁表,就需要自动解锁. 下面是解锁的代码: package com.lg.BreakOracleU ...
- hbase java API跟新数据,创建表
package hbaseCURD; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import o ...
- Java程序操作数据库SQLserver详解
数据库基本操作:增删改查(CRUD) crud介绍(增.删.改.查操作) CRUD是指在做计算处理时的增加(Create).查询(Retrieve)(重新得到数据).更新(Update)和删除(Del ...
- 【Oracle/Java】以Insert ALL方式向表中插入百万条记录,耗时9分17秒
由于按一千条一插程序长期无反应,之后改为百条一插方式,运行完发现插入百万记录需要9m17s,虽然比MySQL效率差,但比单条插入已经好不少了. 对Oracle的批量插入语法不明的请参考:https:/ ...
- 游戏服java程序启动,显示内存溢出
1.OutOfMemoryError:Java heap space 过程:服务器上面的mysql突然异常重启,导致了程序启动的时候报错 问题1:OutOfMemoryError:Java heap ...
- Java程序员可能犯的3个常见SQL错误
概述:Java程序员不仅要具备扎实的Java编程能力,在日常的工作当中往往还要涉及到其他语言的基础知识,尤其是SQL.那么哪些常见的SQL错误是程序员们容易犯的呢?让我们一起来看看吧! 你可能看到Ja ...
- 开发入门,学Java还是学大数据?
经常有人问,我想学习开发,到底是学Java好还是学大数据好?或者是,学习大数据还有必要学Java吗? 依我说,这个提问的标准答案是:两者都学. 先来甩两张图. 一张是腾讯 ...
- java基础(28):数据库、表及表数据、SQL语句
1. 数据库 1.1 数据库概述 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. 什么是数据库 ...
随机推荐
- 简析TCP的三次握手与四次挥手
TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也 ...
- Linux学习之linux目录
文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码.SHELL脚本.二进制的可执行文件等,可用cat ...
- css区分ie6,7,ff
IE6能识别*,但不能识别 !important,IE7能识别*,也能识别!important;FF不能识别*,但能识别!important; 可以这样区别FF,IE7,IE6: background ...
- HDU 4498 Function Curve (分段, simpson)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 最近太逗了...感觉成都要打铁了...只能给队友端 ...
- Intellij idea workflow 工作流插件安装
idea提供支持的工作插件名字叫actiBPM,可以在idea中在线安装,但往往会连接不成功安装失败,所以这里提供了硬盘安装的方式: 首先是要去官网下载actiBPM插件,下载地址: http://p ...
- watch命令详解(linux)
watch命令详解(linux) 在维护系统时经常需要实时查看系统的运行情况,比如实时的系统连接数之类的.在linux可以通过watch命令,实时监控每一条命令执行的结果动态变化. ...
- 【LeetCode题意分析&解答】42. Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- Linux 查看支持的语言,日期,时间,计算器
1.查看系统目前支持的语言 echo %LANG 2.查看日历 cal 3.查看日期时间 date 4.计算器 bc
- SQL Server索引进阶:第三级,聚集索引
原文地址: Stairway to SQL Server Indexes: Level 3, Clustered Indexes 本文是SQL Server索引进阶系列(Stairway to SQL ...
- 【微信公众号】WeixinJSBridge.call('closeWindow')无效
公众号上面使用iframe嵌套子页面,然而子页面无法使用WeixinJSBridge.call('closeWindow') 这时候必须在函数前面加上parent.,比如parent.WeixinJS ...