public class DataSourceProvider { private static Logger logger = Logger.getLogger(DataSourceProvider.class); static Map<String,DataSource> dataSourceCache = new HashMap<String,DataSource>(); public static synchronized DataSource getDataSource(String jdbcDriver, String jdbcUsername, String jdbcPassword, String jdbcUrl) { String key = jdbcDriver+jdbcUsername+jdbcPassword+jdbcUrl; DataSource dataSource = dataSourceCache.get(key); if(dataSource == null) { try { ComboPooledDataSource ds = new ComboPooledDataSource(); ds.setDriverClass(jdbcDriver); ds.setUser(jdbcUsername); ds.setPassword(jdbcPassword); ds.setJdbcUrl(jdbcUrl); ds.setCheckoutTimeout(10 * 1000); if(jdbcDriver.contains("mysql")) { ds.setPreferredTestQuery("select 1"); ds.setIdleConnectionTestPeriod(60); } ds.setUnreturnedConnectionTimeout(60 * 60); ds.setLoginTimeout(10); dataSource = ds; dataSourceCache.put(key, dataSource); logger.info("create DataSource,url:["+jdbcUrl+"], username:"+jdbcUsername); } catch (PropertyVetoException e) { throw new IllegalArgumentException("invalid driver:"+jdbcDriver,e); } catch( SQLException e) { throw new IllegalArgumentException(e); } } return dataSource; } }
public class TableUtil { private static Log logger = LogFactory.getLog(TableUtil.class); private static DsService dsService; private static TableInfoService tableInfoService; private static void init(){ dsService = (DsService) ApplicationContextHolder.getBean("dsService"); tableInfoService = (TableInfoService)ApplicationContextHolder.getBean("tableInfoService"); } public static void refreshDbTables(){ init(); List<Ds> dataSources = dsService.getDsList(); for (Ds ds:dataSources) { DataSource dataSource = DataSourceProvider.getDataSource(ds.getDriver(), ds.getUsername(), ds.getPassword(), ds.getUrl()); //jdbc:mysql://183.61.12.73:3306/lobbystat3?useUnicode=true&characterEncoding=utf8 //截取库名 String url = ds.getUrl(); String database = url.substring(url.lastIndexOf("/")+1, url.indexOf("?")); Map<String, String> tableInfoMap = getDbTableInfo(dataSource, database); for(Map.Entry<String, String> tableInfo:tableInfoMap.entrySet()){ logger.info("====>添加表:"+database+"."+tableInfo.getKey()); logger.info("====>"+tableInfo.getValue()); TableInfo tableInfoEntity = new TableInfo(tableInfo.getKey(), database, tableInfo.getValue()); tableInfoService.addTableInfo(tableInfoEntity); logger.info("====>添加完毕:"+database+"."+tableInfo.getKey()); } } } /** * 把某一个库的表信息保存到Map<String, String>里==>Map<表名, 建表信息> * @param dataSource * @param database * @return */ public static Map<String, String> getDbTableInfo(DataSource dataSource, String database){ Map<String, String> tableMap = new HashMap<String, String>(); NamedParameterJdbcTemplate dataSourceJdbcTemplate = new NamedParameterJdbcTemplate(dataSource); String tableSql = "show tables from " + database; List<String> tables = dataSourceJdbcTemplate.getJdbcOperations().queryForList(tableSql, String.class); for(String table:tables){ String createInfoSql = "SHOW CREATE TABLE " + table; Map<String, Object> resultMap = dataSourceJdbcTemplate.getJdbcOperations().queryForMap(createInfoSql); String createInfo = (String) resultMap.get("Create Table") !=null ? (String) resultMap.get("Create Table") : (String) resultMap.get("Create View"); tableMap.put(table, createInfo); } return tableMap; }
相关推荐
下面我们将详细探讨Java连接数据库的相关知识点。 首先,要连接到数据库,我们需要以下组件: 1. **JDBC驱动**:这是Java程序与特定数据库通信的桥梁。不同的数据库有不同的JDBC驱动,例如,对于SQL Server 2000,...
Java连接数据库并修改内容,Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动器 Connection con=DriverManager.getConnection(dbURL,user,password); //获取连接 String sqlStr="select * from ...
Java连接数据库是一个常见的任务,尤其在开发Web应用时,如JSP(JavaServer Pages)页面。以下是对给定文件中提到的各种数据库连接方法的详细解释: 一、JSP连接Oracle8/8i/9i数据库(用thin模式) 在Oracle数据库...
java连接数据库图书管理系统源码.zipjava连接数据库图书管理系统源码.zipjava连接数据库图书管理系统源码.zipjava连接数据库图书管理系统源码.zipjava连接数据库图书管理系统源码.zipjava连接数据库图书管理系统源码...
Java连接数据库是应用程序与数据库交互的基础,通过Java的JDBC(Java Database Connectivity)API,开发者可以实现对多种数据库系统的操作。以下将详细讲解标题和描述中提到的知识点,并结合给出的部分内容进行扩展...
### Java连接数据库增删改查知识点详解 #### 数据库连接 - DBConnection类解析 在Java中,连接数据库是一项基础但至关重要的操作。`DBConnection`类是实现这一目标的关键组件,它封装了与SQL Server 2000数据库...
总的来说,纯Java连接数据库涉及了JDBC API的使用,包括加载驱动、创建连接、执行SQL和管理结果。同时,了解如何处理数据库结果和管理数据库资源也是必不可少的。通过上述步骤,开发者可以编写出高效、安全的Java...
Java连接数据库时,通常会使用Java Database Connectivity (JDBC) API,它是一个Java编程语言的标准接口,允许应用程序与各种类型的数据库进行交互。JDBC提供了一种标准的API,使得开发者可以编写与数据库无关的代码...
在Java编程中,连接数据库以实现用户登录功能是一项基础但重要的任务。这通常涉及到数据库的交互,如查询、验证用户凭据等。本教程将详细解释如何使用Java连接Oracle数据库来实现这一功能。 首先,我们需要了解Java...
Java连接数据库的图书管理系统是一个基于Java编程语言实现的软件应用,它主要用于管理和操作图书相关的数据。这个系统的核心功能包括添加图书、查询图书、借阅图书、归还图书以及对图书库存进行管理等。通过与数据库...
### Java连接数据库详解 在Java应用中连接数据库是一项基本且重要的技能。无论是开发Web应用程序还是桌面应用程序,都需要与数据库交互来存储和检索数据。本文将详细介绍如何使用Java连接数据库,并通过具体的步骤...
本文将详细讲解如何使用Java连接数据库,执行登录查询,并将查询结果导出为Excel文件,主要涉及的技术包括Java的JDBC(Java Database Connectivity)用于数据库操作,以及Apache POI库用于生成Excel文件。...
连接数据库后进行的修改 java连接数据库 连接数据库后进行的修改 java连接数据库orcl
总之,Java连接数据库涉及的JAR文件和连接池技术是Java后端开发中的基础组件,理解它们的工作原理和使用方法对提升应用性能和稳定性具有重要意义。开发者应根据实际需求选择合适的数据库驱动和连接池实现,并确保...
这是我自己编写的一个JAVA连接数据库的例子,带解说,
在Java编程中,连接数据库是常见的...总的来说,Java连接数据库涉及JDBC API的使用,包括加载数据库驱动、建立连接、执行SQL语句和处理结果集等步骤。理解并熟练掌握这些操作对于任何Java开发者来说都是至关重要的。
本资源包“Java连接数据库所需要的软件.zip”是为Java开发者准备的一套完整工具集合,帮助他们顺利地进行数据库连接和管理。下面将详细介绍这个压缩包中的关键组件及其在Java数据库连接中的作用。 首先,MySQL是一...