使用sql查询mysql/oracle/sql server/gp数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)
1,根据数据库类型拼接不同URL
/**
* 根据类型不同拼接连接的URL
* @param dbType 1:mysql、2:oracle、3:sql server、4:gp
* @param ip
* @param port
* @param databaseName
* @return*/
public static String getTestDbUrl(int dbType, String ip, String port, String databaseName){
String url = "";
if (Constant.DATABASE_TYPE_MYSQL == dbType){
//mysql
url = "jdbc:mysql://"+ip+":"+port+"/"+databaseName+"?useUnicode=true&characterEncoding=UTF8";
}else if (Constant.DATABASE_TYPE_ORACLE == dbType){
//oracle
url = "jdbc:oracle:thin:@"+ip+":"+port+":ORCL";
}else if (Constant.DATABASE_TYPE_SQL_SERVER == dbType){
//sql server
url = "jdbc:sqlserver://"+ip+":"+port+";databaseName="+databaseName+";integratedSecurity=true";
}else if (Constant.DATABASE_TYPE_GP == dbType){
//gp
url = "jdbc:postgresql://"+ip+":"+port+"/"+databaseName;
}
return url;
}
2,创建连接并查询
/**
* 通过jsbc获取数据
* @param driver driver
* @param url 数据库url
* @param username 用户名
* @param password 密码
* @param sql sql语句
* @param sqlType 语句类型 ,1:查询语句,2:创建语句
* @param columnConnt 查询语句返回列的个数
* @return List
*/
public static List<Map<String, String>> getJdbcData(String driver, String url, String username, String password, String sql, int sqlType, int columnConnt){
Connection con = null;
Statement st = null;
ResultSet rs = null;
List<Map<String, String>> result = new ArrayList<>();
try {
//1.加载oracle数据库驱动
Class.forName(driver);
//2.获取数据库连接
con = DriverManager.getConnection(url, username, password);
//3.获取执行sql语句的平台
st = con.createStatement();
//4.执行sql语句获取结果集
// 查询
if(sqlType == 1){
rs = st.executeQuery(sql);
//5.循环获取结果集数据
int i = 1;
while(rs.next()){
if(i <= columnConnt){
Map<String, String> resultMap = new HashMap<>(columnConnt);
for (int j = 0; j < columnConnt; j++) {
resultMap.put("column" + (j + 1) + "", rs.getString(j + 1));
}
result.add(resultMap);
}
}
}else{
// 创建
int rss = st.executeUpdate(sql);
Map<String, String> resultMap = new HashMap<>(columnConnt);
resultMap.put("column" + 1 + "", rss + "");
result.add(resultMap);
}
return result;
} catch (ClassNotFoundException e) {
e.printStackTrace();
Map<String, String> resultMap = new HashMap<>(columnConnt);
resultMap.put("column1", "-1");
result.add(resultMap);
} catch (SQLException e) {
e.printStackTrace();
Map<String, String> resultMap = new HashMap<>(columnConnt);
resultMap.put("column1", "-1");
result.add(resultMap);
}finally{
//关闭rs
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭st
if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭con
if(con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
// return result;
}
3,设置参数
/**
* 查询指定数据库中指定表的字段信息
* @param databaseType 数据库类型: 1:mysql、2:oracle、3:sql server、4:gp
* @param databaseName 数据库名称
* @param databaseIp 数据库ip
* @param databasePort 数据库端口
* @param databaseUserName 数据库用户名
* @param databaseUserPassword 数据库用户的密码
* @param tableName 表名
* @return*/
public static List<Map<String, String>> getColumnInfoByTableName(int databaseType, String databaseName, String databaseIp, String databasePort, String databaseUserName,
String databaseUserPassword, String tableName){
String sql = "";
if (Constant.DATABASE_TYPE_MYSQL == databaseType){
//mysql
sql = "SELECT column_name, data_type,(case when data_type = 'int' or data_type = 'float' or data_type = 'double' or data_type = 'decimal' then NUMERIC_PRECISION else CHARACTER_MAXIMUM_LENGTH end ) as data_length,\n" +
"(case when IS_NULLABLE = 'NO' then 0 else 1 end)as data_Null,(case when COLUMN_KEY='PRI' then 1 else 0 end) as data_IsPK\n" +
" FROM information_schema.COLUMNS WHERE table_schema = '"+databaseName+"' and table_name = '"+tableName+"'";
}else if (Constant.DATABASE_TYPE_ORACLE == databaseType){
//oracle
sql = "SELECT column_name, data_type, data_length, NULLABLE,(case when column_name=(select col.column_name \n" +
"from user_constraints con, user_cons_columns col \n" +
"where con.constraint_name = col.constraint_name \n" +
"and con.constraint_type='P' \n" +
"and col.table_name = "+tableName+"\n" +
") then 1 else 0 end) as IsPK\n" +
" FROM all_tab_cols\n" +
" WHERE table_name = '"+tableName+"' ";
}else if (Constant.DATABASE_TYPE_SQL_SERVER == databaseType){
//sql server
sql = "SELECT C.name as column_name, T.name as data_type, COLUMNPROPERTY(C.id,C.name,'PRECISION') as data_length, \n" +
"convert(bit,case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=c.id and name in (\n" +
" SELECT name FROM sysindexes WHERE indid in(\n" +
" SELECT indid FROM sysindexkeys WHERE id = c.id AND colid=c.colid))) then 1 else 0 end) \n" +
" as data_IsPK, convert(bit,C.IsNullable) as data_Null\n" +
"FROM syscolumns C INNER JOIN systypes T ON C.xusertype = T.xusertype \n" +
"inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' \n" +
"where T.name is not null\n" +
"and d.name='"+tableName+"'";
}else if (Constant.DATABASE_TYPE_GP == databaseType){
//gp }
List<Map<String, String>> columnNameList = JdbcUtil.getJdbcData(SingletonHoldResource.getInstance().getDictMap(Constant.DB_DRIVER).get(Integer.toString(databaseType)),
getTestDbUrl(databaseType, databaseIp, databasePort, databaseName),
databaseUserName, databaseUserPassword,
sql,
1, 5);
//结果中的对应关系:column1 -- name; column2 -- type; column3 -- length; column4 -- IsNull; column5 -- isPk;
return columnNameList;
}
使用sql查询mysql/oracle/sql server/gp数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)的更多相关文章
- SQL Server 向数据库中创建表并添加数据
创建表,展开数据库中新建的数据库,下面有一个选项-表.在该选项上右键就可以选择-新建-表. 然后出现的界面上是需要自己填写列列名.数据类型和选择是否允许空值. 其中数据类型我是参考: http://w ...
- SQL SERVER获取数据库中所有表名 XTYPE类型
SELECT (case when a.colorder=1 then d.name else null end) 表名, a.colorder 字段序号,a.name 字段名, (case whe ...
- SQL Server 得到数据库中所有表的名称及数据条数
--方法一if exists ( select * from dbo.sysobjects where id = object_id(N'[dbo].[TableSpace]') and object ...
- sql server 清除数据库中所有表的数据
CREATE PROCEDURE sp_DeleteAllData AS EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'- ...
- Sql Server 在数据库中所有表所有栏位 找出匹配某个值的脚本(转)
转自: http://blog.csdn.net/chenghaibing2008/article/details/11891419 (下面代码稍有修改,将要查找的内容直接作为参数传人,并且使用=而不 ...
- SQL SERVER 将一个数据库中的表和数据复制到另一个数据库中
第一种情况:将A数据库.dbo.A表的数据追加到B数据库.dbo.B表中 (条件:此时B数据库中已创建好了B表) insert into B数据库.dbo.B表 select * from A数据库. ...
- MySql 查询数据库中所有表名
查询数据库中所有表名select table_name from information_schema.tables where table_schema='csdb' and table_type= ...
- MySql 查询数据库中所有表名以及对比分布式库中字段和表的不同
查询数据库中所有表名select table_name from information_schema.tables where table_schema='数据库名' and table_type= ...
- mysql,oracle,sql server数据库默认的端口号,端口号可以为负数吗?以及常用协议所对应的缺省端口号
mysql,oracle,sql server数据库默认的端口号? mysql:3306 Oracle:1521 sql server:1433 端口号可以为负吗? 不可以,端口号都有范围的,0~65 ...
随机推荐
- L1-046. 整除光棍(模拟竖式计算除法)
L1-046. 整除光棍 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 翁恺 这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1 ...
- mysql/mariadb学习记录——查询
连接查询:同时设计两个及以上的表的查询 连接条件或连接谓词:用来连接两个表的条件一般格式: [<表名1>]<列名1> <比较运算符> [<表名2>]&l ...
- K8S学习心得 == 安装虚拟路由器RouterOS
使用RouterOS, 搭建虚拟路由器,并且配置多个网关互通.配置步骤如下. 基础配置 1. RouterOS 服务器,设置如下 2. VM 不同网段的设置 == 192. ...
- canvas 绘制双线技巧
楔子 最近一个项目,需要绘制双线的效果,双线效果表示的是轨道(类似铁轨之类的),如下图所示: 负责这块功能开发的小伙,姑且称之为L吧,最开始是通过数学计算的方式来实现这种双线,也就是在原来的路径的基础 ...
- [修正] Firemonkey Windows & macOS 平台下 Edit & Memo 中文输入后会取消原选取文字的 BUG
问题:Firemonkey Windows & macOS 平台下 Edit & Memo 中文输入后会取消原选取文字的 BUG 适用版本:Delphi 10.1.2 & 10 ...
- 关于 class helper for ... 语法
转载于万一的博客https://www.cnblogs.com/del/archive/2009/10/13/1582789.html class helper 可能是从 Delphi 2007 增加 ...
- C语言学习记录_2019.02.03
优先级:算术运算符 > 关系运算符 > 赋值 ==和!=的优先级低于其他关系运算符 连续的关系运算符从左到右进行 注释:“//”或“/**/” 判断语句:if else 写代码有时看重的是 ...
- Kotlin基础篇(一)
写在前面: 因为工作需要,目前转安卓开发,用的IDE是AS3.2版本,语言的话,用的是Kotlin.由于之前是做.NET的,没接触过这方面的东西,所以完全是小白一枚.所以想着开个博客,以此来记录自己的 ...
- 4- 算法练习leetcode.com
0.五大经典算法 动态规划算法----爬楼梯 分治算法-- 贪心算法---零钱问题 回溯算法---迷宫问题 --深度优先 分支限界法 ----广度优先 1.找出下标范围 1.二分法 li = [1,2 ...
- Kubernetes学习之路(十三)之Pod控制器--DaemonSet
一.什么是DaemonSet? DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本.当有 Node 加入集群时,也会为他们新增一个 Pod .当有 Node 从集群移除时,这 ...