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. B. Vile Grasshoppers

    http://codeforces.com/problemset/problem/937/B The weather is fine today and hence it's high time to ...

  2. 1548: Design road (思维题 做法:三分找极值)

    1548: Design road Submit Page    Summary    Time Limit: 2 Sec     Memory Limit: 256 Mb     Submitted ...

  3. Linux基础命令之文件过滤及内容编辑处理(二)

    . wc 用于统计文件的行数,单词,或字节数 -l # 统计行数 -L # 打印最长行的长度,一般脚本中判断字符长度 -c # 统计字节数 -w # 统计单词数 -m 统计字符数 . iconv 转换 ...

  4. python3爬虫-通过selenium登陆拉钩,爬取职位信息

    from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from se ...

  5. 《记忆匣子》——网络编程jsp网页制作复习习笔记1

    内容都在图里 哈哈哈 <%@ page language="java" contentType="text/html; charset=utf-8" pa ...

  6. BZOJ2120_数颜色_KEY

    题目传送门 裸的带修莫队. 在Sort时如果左右区间都在同一块中,就按询问的修改的先后Sort. 对于每次查询判断向前或向后修改. 当size为N*2/3时据说是最优.O(N^(3/5)). code ...

  7. 4516: [Sdoi2016]生成魔咒

    4516: [Sdoi2016]生成魔咒 链接 题意: 求本质不同的子串. 分析: 后缀数组或者SAM都可以. 考虑SAM中每个点的可以表示的子串是一个区间min(S)~max(S),把每个点的这个区 ...

  8. [算法]用java实现0-1背包和部分背包问题

    问题描述: 0-1背包问题,部分背包问题(课本P229)实验要求: (1)实现0-1背包的动态规划算法求解 (2)实现部分背包的贪心算法求解 0-1背包问题代码: public static void ...

  9. Python: C扩展初体验

    前言 使用 Python 毋庸置疑减少了很多规则约束和开发成本,让我们能够更加专注于逻辑而非语法.但是得此失彼,开发效率提高了,却带来了运行性能的问题,所以就常常被其他门派追着暴打. 身为一个 pyt ...

  10. 使用Serilog输出到ES(使用笔记)

    第一步:安装Serilog 使用NuGet包安装以下组件: Serilog.AspNetCoreSerilog.Settings.ConfigurationSerilog.Sinks.ConsoleS ...