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数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)的更多相关文章

  1. SQL Server 向数据库中创建表并添加数据

    创建表,展开数据库中新建的数据库,下面有一个选项-表.在该选项上右键就可以选择-新建-表. 然后出现的界面上是需要自己填写列列名.数据类型和选择是否允许空值. 其中数据类型我是参考: http://w ...

  2. SQL SERVER获取数据库中所有表名 XTYPE类型

    SELECT (case when a.colorder=1 then d.name else null end) 表名, a.colorder 字段序号,a.name 字段名,  (case whe ...

  3. SQL Server 得到数据库中所有表的名称及数据条数

    --方法一if exists ( select * from dbo.sysobjects where id = object_id(N'[dbo].[TableSpace]') and object ...

  4. sql server 清除数据库中所有表的数据

    CREATE PROCEDURE  sp_DeleteAllData AS EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'- ...

  5. Sql Server 在数据库中所有表所有栏位 找出匹配某个值的脚本(转)

    转自: http://blog.csdn.net/chenghaibing2008/article/details/11891419 (下面代码稍有修改,将要查找的内容直接作为参数传人,并且使用=而不 ...

  6. SQL SERVER 将一个数据库中的表和数据复制到另一个数据库中

    第一种情况:将A数据库.dbo.A表的数据追加到B数据库.dbo.B表中 (条件:此时B数据库中已创建好了B表) insert into B数据库.dbo.B表 select * from A数据库. ...

  7. MySql 查询数据库中所有表名

    查询数据库中所有表名select table_name from information_schema.tables where table_schema='csdb' and table_type= ...

  8. MySql 查询数据库中所有表名以及对比分布式库中字段和表的不同

    查询数据库中所有表名select table_name from information_schema.tables where table_schema='数据库名' and table_type= ...

  9. mysql,oracle,sql server数据库默认的端口号,端口号可以为负数吗?以及常用协议所对应的缺省端口号

    mysql,oracle,sql server数据库默认的端口号? mysql:3306 Oracle:1521 sql server:1433 端口号可以为负吗? 不可以,端口号都有范围的,0~65 ...

随机推荐

  1. windows 下nginx配置php支持

    修改nginx配置 location ~ \.php$ { root D:/Learn/php/test/; fastcgi_pass ; fastcgi_index index.php; fastc ...

  2. 980. Unique Paths III

    题目来源: https://leetcode.com/problems/unique-paths-iii/ 自我感觉难度/真实难度: 题意: 分析: 回溯法,直接DFS就可以了 自己的代码: clas ...

  3. Python学习笔记系列——函数

    今年下半年的计划主要是Python和Mysql了,公司不方便看书和视频,就照着廖雪峰的Python网站开始看了.以下纯为个人笔记记录,若是想系统学习的小伙伴还是看这里的好一些,毕竟系统.https:/ ...

  4. Ural 1183 Brackets Sequence(区间DP+记忆化搜索)

    题目地址:Ural 1183 最终把这题给A了.. .拖拉了好长时间,.. 自己想还是想不出来,正好紫书上有这题. d[i][j]为输入序列从下标i到下标j最少须要加多少括号才干成为合法序列.0< ...

  5. c++类模板之友元函数

    前言:自从开始学模板了后,小编在练习的过程中.常常一编译之后出现几十个错误,而且还是那种看都看不懂那种(此刻只想一句MMP).于是写了便写了类模板友元函数的用法这篇博客.来记录一下自己的学习. 普通友 ...

  6. JQuery中的事件委托

    JQuery 中的事件委托 定义 事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能:其次可以让新元素的子元素也可以拥 ...

  7. centos下添加启动项

    chkconfig --add 服务名称 chkconfig --level 345 服务名称 on

  8. 2017-2018-1 20155306 《信息安全系统设计基础》嵌入式C语言———提取设置时分秒

    2017-2018-1 20155306 <信息安全系统设计基础>嵌入式C语言---提取设置时分秒 要求:根据下图,完成对时分秒的设置和提取. 示例及思路分析: 思路分析:以分钟为例,根据 ...

  9. 《图说VR入门》——Unity插件DK2使用教程

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53339254 作者:car ...

  10. 【CF617D】Roads in Yusland

    [CF617D]Roads in Yusland 题面 蒯的洛谷的 题解 我们现在已经转化好了题目了,戳这里 那么我们考虑怎么求这个东西,我们先判断一下是否所有的边都能被覆盖,不行的话输出\(-1\) ...