- 浏览: 95967 次
文章分类
最新评论
design项目:1、额外数据库连接功能
当前博客描述内容的代码,均在 design 项目中。
design 项目下载地址:https://github.com/wenhaoran/design
额外数据库连接功能,并不是 启动项目 访问数据库连接 配置的连接池。而是,在项目中,需要额外使用其他数据库连接的配置。
额外的数据源,是需要启动design 项目后,在页面上配置的,如图下:
目前只支持 oracle 和 mysql , sqlserver 还没有增加代码支持。
连接数据库 的util 类代码,如图下:
sqlserver 连接数据库,需要自己 增加 代码支持。
页面配置完成后,会保存新的 数据库连接信息,到 desgin项目数据库中 desgin_db 表,
因此,之后的所有操作,均会通过 util类DBUtil,DBUtil 完整代码如下:
package cn.digitalpublishing.util.sql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import cn.digitalpublishing.po.design.DataObject; import cn.digitalpublishing.po.design.DeDBConnect; import cn.digitalpublishing.po.design.DesignTable; import cn.digitalpublishing.po.design.DesignTableColumn; import cn.digitalpublishing.po.imp.ImportRoleDetail; public class DBUtil { private static DBUtil db; private DBUtil() { } private static synchronized DBUtil get() { if (db == null) { db = new DBUtil(); } return db; } public static Connection getConnect(DeDBConnect dbconn){ try { String type = dbconn.getType(); String driver ="",url=""; Connection conn = null; if(type.equals("mysql")){ driver = "com.mysql.jdbc.Driver"; url ="jdbc:mysql://"+dbconn.getAddress()+":"+dbconn.getPort()+"/"+dbconn.getDbname()+"?characterEncoding=utf8"; conn = getConnection(driver,url,dbconn.getUsername(),dbconn.getPassword()); }else if(type.equals("oracle")){ driver = "oracle.jdbc.driver.OracleDriver";//jdbc:oracle:thin:@127.0.0.1:1521:orcl url ="jdbc:oracle:thin:@"+dbconn.getAddress()+":"+dbconn.getPort()+":"+dbconn.getDbname();//+"?characterEncoding=utf8" conn = getConnection(driver,url,dbconn.getUsername(),dbconn.getPassword()); } return conn; } catch (Exception e) { e.printStackTrace(); return null; } } public static Connection getConnection(String driver,String url ,String name ,String pwd){ try{ Class.forName(driver); Connection conn=DriverManager.getConnection(url,name,pwd);//获取连接对象 return conn; }catch(ClassNotFoundException e){ e.printStackTrace(); return null; }catch(SQLException e){ e.printStackTrace(); return null; } } //批量执行sql public static void executeSqls(String[] sqls,DeDBConnect dbconn)throws Exception{ Connection conn = getConnect(dbconn); Statement stmt = (Statement) conn.createStatement(); for (int i = 0; i < sqls.length; i++) { stmt.execute(sqls[i]+";"); } if (!conn.isClosed()) { conn.close(); } } public static void executeSql(DeDBConnect dbconn,String sql)throws Exception{ Connection conn = getConnect(dbconn); Statement stmt = (Statement) conn.createStatement(); stmt.execute(sql); if (!conn.isClosed()) { conn.close(); } } public static Map<String, String> executeSqlgetValueReturn(DeDBConnect dbconn, String tableName,String id,List<ImportRoleDetail> keyDetail)throws Exception{ Connection conn = getConnect(dbconn); Map<String, String> returnKey = new HashMap<String, String>(); String sql = "select * from "+tableName + " where id ='"+id+"';"; Statement stmt = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { for(ImportRoleDetail detail:keyDetail){ returnKey.put(detail.getId(), rs.getString(detail.getColumnId())); } } return returnKey; } public static void executeSql(DeDBConnect dbconn,String sql,String[] params)throws Exception{ Connection conn = getConnect(dbconn); //,Statement.RETURN_GENERATED_KEYS PreparedStatement pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); // 如果使用静态的SQL,则不需要动态插入参数 for(int i =0;i<params.length;i++){ pstmt.setString(i+1, params[i]); } pstmt.executeUpdate(); if (!conn.isClosed()) { conn.close(); } } public static List<Map<String, Object>> execute(DeDBConnect db,String sql)throws Exception { Connection conn = getConnect(db); Statement stmt = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData(); int columnCount = md.getColumnCount(); while (rs.next()) { Map<String, Object> rowData = new HashMap<String, Object>(); for (int i = 1; i <= columnCount; i++) { rowData.put(md.getColumnName(i), rs.getObject(i)); } list.add(rowData); } return list; } public static List<String> executeSqlReturnColumnList(DeDBConnect db,String sql)throws Exception { Connection conn = getConnect(db); Statement stmt = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); List<String> columnList = new ArrayList<String>(); ResultSetMetaData rsmd = rs.getMetaData(); int count = rsmd.getColumnCount(); for(int i=1;i<count+1;i++){ String name = rsmd.getColumnName(i); columnList.add(name); } return columnList; } public static List<DesignTable> getTableList(DeDBConnect db) throws Exception{ List<DesignTable> designList = new ArrayList<DesignTable>(); Connection conn = getConnect(db); String sql = ""; if(db.getType().equals("mysql")){ sql = "SELECT t.table_name AS name,t.TABLE_COMMENT AS comments FROM information_schema.`TABLES` t WHERE t.TABLE_SCHEMA = (select database()) ORDER BY t.TABLE_NAME"; }else if(db.getType().equals("oracle")){ sql = "select TBCOMM.table_name as name ,TBCOMM.comments as comments from user_tables tb ,user_tab_comments tbcomm where TB.table_name = TBCOMM.table_name"; } Statement stmt = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { DesignTable table = new DesignTable(); table.setTableName(rs.getString("name")); table.setComments(rs.getString("comments")); designList.add(table); } return designList; } public static List<DesignTableColumn> getColumnList(DesignTable table) throws Exception{ List<DesignTableColumn> columnList = new ArrayList<DesignTableColumn>(); Connection conn = getConnect(table.getDbconn()); String sql = ""; if("mysql".equals(table.getDbconn().getType())){ sql = createSqlByMysql(table.getTableName()); }else if("oracle".equals(table.getDbconn().getType())){ sql = createSqlByOracle(table.getTableName()); } Statement stmt = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { DesignTableColumn column = new DesignTableColumn(); column.setId(rs.getString("name")); column.setName(rs.getString("name")); column.setComments(rs.getString("comments")); column.setType(rs.getString("type")); column.setJavaField(underline2Camel(rs.getString("name"),true)); column.setJavaType(javaType(rs.getString("type"))); columnList.add(column); } return columnList; } public static Map<String, DesignTableColumn> getColumnMap(DesignTable table)throws Exception { Map<String, DesignTableColumn> columnMap = new HashMap<String, DesignTableColumn>(); Connection conn = getConnect(table.getDbconn()); String sql = ""; if("mysql".equals(table.getDbconn().getType())){ sql = createSqlByMysql(table.getTableName()); }else if("oracle".equals(table.getDbconn().getType())){ sql = createSqlByOracle(table.getTableName()); } Statement stmt = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { DesignTableColumn column = new DesignTableColumn(); column.setName(rs.getString("name")); column.setComments(rs.getString("comments")); column.setType(rs.getString("type")); column.setJavaField(underline2Camel(rs.getString("name"),true)); column.setJavaType(javaType(rs.getString("type"))); columnMap.put(rs.getString("name"), column); } return columnMap; } public static boolean tableIsexist(DataObject object)throws Exception{ boolean isExist = false; String sqlType = object.getDbconn().getType(); Connection conn = getConnect(object.getDbconn()); String sql = ""; if(sqlType.equals("mysql")){ sql = "SELECT t.table_name AS name,t.TABLE_COMMENT AS comments FROM information_schema.`TABLES` t WHERE t.TABLE_SCHEMA = (select database()) and t.table_name='"+object.getTableName()+"' ORDER BY t.TABLE_NAME;"; }else if(sqlType.equals("oracle")){ sql = "select table_name as NAME from user_tables where table_name = '"+object.getTableName()+"' ORDER BY table_name"; } Statement stmt = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { if(object.getTableName().equals(rs.getString("name"))){ isExist = true; } } return isExist; } public static String getValueByMatch(DeDBConnect dbConn, String table, String name, String code, String matchValue)throws Exception { String value = ""; List<String> valueList = new ArrayList<String>(); Connection conn = getConnect(dbConn); String sql = "select " + code + " from " + table + " where "+ name +" = '"+matchValue+"'"; Statement stmt = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { value = rs.getString(code); valueList.add(value); } return value; } public static List<String> searchOneArray(DeDBConnect db, String sql, String column)throws Exception { Connection conn = getConnect(db); Statement stmt = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); List<String> valueList = new ArrayList<String>(); while (rs.next()) { String value = rs.getString(column); valueList.add(value); } return valueList; } public static List<Map<String, String>> searchMapList(DeDBConnect db, String sql)throws Exception { Connection conn = getConnect(db); Statement stmt = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); List<String> columnList = new ArrayList<String>(); ResultSetMetaData rsmd = rs.getMetaData(); int count = rsmd.getColumnCount(); for(int i=1;i<count+1;i++){ String name = rsmd.getColumnName(i); columnList.add(name); } List<Map<String, String>> searchMapList = new ArrayList<Map<String, String>>(); while (rs.next()) { Map<String,String> map = new HashMap<String,String>(); for(String column :columnList){ String value = rs.getString(column); map.put(column, value); } searchMapList.add(map); } return searchMapList; } private static String createSqlByMysql(String tableName){ String sql = "SELECT " + "t.COLUMN_NAME AS NAME, " + "(CASE WHEN t.IS_NULLABLE = 'YES' THEN '1' ELSE '0' END ) AS isNull," +"(t.ORDINAL_POSITION * 10) AS sort," +"t.COLUMN_COMMENT AS comments," +"t.DATA_TYPE AS type " + "FROM information_schema.`COLUMNS` t " + "WHERE " +" t.TABLE_SCHEMA = (SELECT DATABASE()) AND t.TABLE_NAME = '"+ tableName +"' ORDER BY t.ORDINAL_POSITION"; return sql; } private static String createSqlByOracle(String tableName){ String sql = "select " + "com.column_name as name," + "COM.comments as comments , " + "col.data_type as type " + "from " + "user_col_comments com," + "user_tab_columns col " + "where " + "COL.column_name = COM.column_name " + "and " + "COL.table_name = COM.table_name " + "and " + "COM.table_name= '"+ tableName +"'"; return sql; } // 带下划线的字符串,转 驼峰命名法 eg: db_id ==> dbId public static String underline2Camel(String line,boolean smallCamel){ if(line==null||"".equals(line)){ return ""; } StringBuffer sb=new StringBuffer(); Pattern pattern=Pattern.compile("([A-Za-z\\d]+)(_)?"); Matcher matcher=pattern.matcher(line); while(matcher.find()){ String word=matcher.group(); sb.append(smallCamel&&matcher.start()==0?Character.toLowerCase(word.charAt(0)):Character.toUpperCase(word.charAt(0))); int index=word.lastIndexOf('_'); if(index>0){ sb.append(word.substring(1, index).toLowerCase()); }else{ sb.append(word.substring(1).toLowerCase()); } } return sb.toString(); } public static String javaType(String dbtype){ String javatype="String"; if(dbtype.equals("varchar")){ javatype = "String"; } if(dbtype.equals("text")){ javatype = "String"; } if(dbtype.equals("datetime")){ javatype = "Date"; } if(dbtype.equals("decimal")){ javatype = "Integer"; } if(dbtype.equals("int")){ javatype = "Integer"; } if(dbtype.equals("integer")){ javatype = "Integer"; } return javatype; } }其中基本功能包括:
1、测试某个数据库是否可以连接。
2、获取某个数据库的所有表信息。
3、获取某个表的所有字段信息。
4、获取某个表的所有记录。
5、获取某个表的某条记录。
等等
其他的一系列操作。
操作 数据库连接的 controller 是 :DBConnectController
欢迎下载完整代码:https://github.com/wenhaoran/design
相关推荐
Powerdesign连接远程oracle数据库;其他数据库类似。按文档步骤操作,powerdesign可以实现与oracle数据库同步,导入导出表信息等。
数据库连接池:Druid 1.2.3 缓存数据库: Redis 4.0.9 项目管理工具: Maven 3.3+ 工具类:Hutool 5.5.1 SpringBoot+MyBatis-Plus+Mysql+Vue实现智慧园区管理系统 软件架构 核心框架:Spring Boot 2.4.0 安全框架:...
Design patterns are elegant, adaptable, and reusable solutions to everyday software development problems. Programmers use design patterns to organize objects in programs, making them easier to write ...
powerdesign连接数据库.rar,里面是一个网页,用IE打开,如果打不开,可以直接看那些图片,很明了
快速搭建专属电商系统,内置多租户saas等功能,方便迅速展开业务,安全便捷,框架成熟稳定便于扩展,支持二次...数据库连接池:Druid 1.2.3 缓存数据库: Redis 4.0.9 项目管理工具: Maven 3.3+ 工具类:Hutool 5.5.1
Modern C++ Design: Generic Programming and Design Patterns Applied By Andrei Alexandrescu Publisher : Addison Wesley Pub Date : February 01, 2001 ISBN : 0-201-70431-5 ...
Quartus II Software Design Series: Optimization:时序约束参考设计
code_final:实现小程序的全部代码design_detail:设计思路和细节image:小程序所需要的图片CS连接:客户和服务端的连接,目前为基础功能的本地简易实现题库:加入到数据库的题目的原始题目小程序二维码:发布后所有人...
How to Design Worlds: Imaginative Programming in DrScheme
C# Design Patterns: A Tutorial C#设计模式 源代码
该软件: • 允许我设计数据库模式 • 生成 ddl 和 dml 代码 • 允许我更快、更便宜地构建原型 • 可用作学习/教学工具 • 可作为免费软件使用
After more than ten years, object technology pioneer Rebecca Wirfs-Brock teams with expert Alan McKean to present a thoroughly updated, modern, and proven method for the design of software. The book ...
{ 项目名称 } 数据库设计报告 "文件状态: "文件标识:"Company-Project-SD-DATABASE " "[ ] 草稿 " " " "[ ] 正式发布 " " " ... ----------------------- 机构图标 软件项目数据库设计报告全文共7页,当前为第1页。 C
本机电脑为64win7系统,64位oracle11gr2数据库,使用powerdesign连接oracle时,常出现的两类错误提示的解决办法
Establishing a solid foundation of digital design principles An authoritative introduction to basic digital design, Digital Design: Principles and Practices helps readers build a foundational ...
核心功能: 1. 驾驶舱 ⼯作台:多维数据图形报表的展示,配合资产管理模块最⼤化的了解(本⽉)账单、物业管 ...数据库连接池:Druid 1.2.3 缓存数据库: Redis 4.0.9 项目管理工具: Maven 3.3+ 工具类:Hutool 5.5.1
Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 Design Pattern: Singleton...
Object-Oriented Design Knowledge:Principles, Heuristics And Best Practices.pdf
1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也...