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. 两个Integer比较大小需要注意的误区

    通过下面的例子,来了解integer比较大小需注意的几点. eg.定义Integer对象a和b,比较两者结果为:a不等于b Integer a = 1; Integer b = 1; if(a==b) ...

  2. P1441 砝码称重

    题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 输入输出格式 输入格式: 输入文件weight.in的第1行为有两个整数n ...

  3. NYOJ2—括号配对问题

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在,有一行括号序列,请你检查这行括号是否配对.   输入 第一行输入一个数N(0<N<=1 ...

  4. ASP.NET Core 如何实现404错误跳转到主页

    假如用户在Web浏览器上敲错了URL,访问了ASP.NET Core站点下一个不存在的URL地址,那么默认情况下ASP.NET Core会返回给浏览器著名的404错误,那么有什么办法可以让ASP.NE ...

  5. iOS开发用如何用类"SKStoreProductViewController"跳转AppStore点赞评分?

    大家都知道,评论和评分是决定app在appstore中排名的重要因素,但是大部分用户下载安装APP后却不会去点评,所以添加提示用户去点评的功能是很必要的. 目前,AppStore点赞评分有两种方法,一 ...

  6. POJ 1151 Atlantis 矩形面积求交/线段树扫描线

    Atlantis 题目连接 http://poj.org/problem?id=1151 Description here are several ancient Greek texts that c ...

  7. PHP中时间戳和时区

    时间戳 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. 时区 由于世界各国家与地区经度不同,地方时也有所不同,因此 ...

  8. php 查看使用多少内存

    方法memory_get_usage 是指当前脚本正在使用的内存 unset只是把内存标记为空闲但并没有释放,要GC程序结束后才会释放 $bytes = memory_get_peak_usage() ...

  9. python新手第一天学习笔记-python循环控制和第一个python小游戏

    Python的三种逻辑控制 1.python语法. python 是以缩进作为基本判断的.同一代码缩进需要保持一致.否则会报错 1.if 的三种循环 _age = 53 # 注意,input接受的都是 ...

  10. cogs1799 [国家集训队2012]tree(伍一鸣)

    LCT裸题 注意打标记之间的影响就是了 这个膜数不会爆unsigned int #include<cstdio> #include<cstdlib> #include<a ...