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. 自动搭建ssm项目

    手把手教你搭建ssm项目 注意,必须修改:包名.数据库名称.账号.密码 注意:必须配置好第一次,“引入后”才能配置第二次 第一步:打开idea选择创建maven项目 import java.io.*; ...

  2. java学习笔记-JavaWeb篇二

    JavaWEB篇二 45 HttpSession概述46 HttpSession的生命周期 47 HttpSession常用方法示例48 HttpSessionURL重写 49 HttpSession ...

  3. zabbix 从入门到精通

    https://www.cnblogs.com/clsn/p/7885990.html

  4. 很清晰的解读i2c协议

    很清晰的解读i2c协议 转载:http://dpinglee.blog.163.com/blog/static/14409775320112239374615/ 1.I2C协议 2条双向串行线,一条数 ...

  5. 【LeetCode445】 Add Two Numbers II★★

    题目描述: 解题思路: 给定两个链表(代表两个非负数),数字的各位以正序存储,将两个代表数字的链表想加获得一个新的链表(代表两数之和). 如(7->2->4->3)(7243) + ...

  6. expdp导出时报错ora-16000

    一.问题现象:在对数据库进行expdp导出时发生报错ora-16000,脚本如下: nohup expdp "'/ as sysdba'" schemas=shp DIRECTOR ...

  7. python2018年秋季调研

    在2018年秋季,Python软件基金会与JetBrains发起了年度Python开发者调查. 报告的目的是寻找Python领域的新趋势,帮助开发者深入了解2018年Python开发者的现状. 本报告 ...

  8. 使用uliweb创建一个简单的blog

    1.创建数据库 uliweb的数据库都在models.py文件里面,因此先创建该文件 vim apps/blog/models.py 添加如下两行: #coding=utf-8 from uliweb ...

  9. vue动态修改title

    1.项目中,cmd下 ,运行:cnpm install vue-wechat-title --save 2.在 main.js 中,设置: import VueWechatTitle from 'vu ...

  10. c++ 分配与释放内存

    教学内容: calloc分配内存 calloc与malloc的区别 memset函数初始化内存 free释放动态分配的内存 一.calloc函数分配内存 void *calloc( size_t nu ...