- 浏览: 248802 次
- 性别:
- 来自: 湖南
最新评论
-
KANGOD:
android:overScrollMode="ne ...
去掉ScrollVIew拉到尽头时再拉的阴影效果 -
yangsongjing:
comsci 写道非常感谢.....希望大家的代码和文档都能够 ...
java DES 加密解密 算法 -
comsci:
非常感谢.....
希望大家的代码和文档都能够用一种简单的方 ...
java DES 加密解密 算法 -
yangsongjing:
不过2.3以下的版本没这个方法怎么解决啊?
去掉android scrollview滚动到顶部继续滚会出现一个渐变的颜色块 -
yangsongjing:
setOverScrollMode(View.OVER_SCR ...
去掉android scrollview滚动到顶部继续滚会出现一个渐变的颜色块
其好处是易于扩展,代码的重用性极高。具有很高的移植性
它需要配置一个.properties的属性文件
例如:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ysj
user=root
password=a
很简单吧 你也试下吧
package com.icss.dao;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.dbcp.BasicDataSource;
public class DBHelper {
private Connection con = null;
private PreparedStatement pstmt;
private ResultSet rs;
private ResultSetMetaData metaData;
public Connection getCon() {
try {
if (con == null) {
BasicDataSource ds = new BasicDataSource();
// 基本参数
ds.setDriverClassName(Env.getInstance().getProperty("driver"));
ds.setUsername(Env.getInstance().getProperty("user"));
ds.setPassword(Env.getInstance().getProperty("password"));
ds.setUrl(Env.getInstance().getProperty("url"));
// 池属性
ds.setInitialSize(5);// 初始化连接池时,创建连接个数
ds.setMinIdle(10);// 最小空闲连接数
ds.setMaxIdle(100);// 最大空闲连接数
ds.setMaxActive(100);// 连接池最大并发容量
con = ds.getConnection();
}
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
protected void fillParameter(PreparedStatement pstmt, String[] params) {
if (pstmt != null && params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
try {
pstmt.setString(i + 1, params[i]);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public void closeAll(Connection con, PreparedStatement pstmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public int doUpdate(String sql, String[] params) {
int result = -1;
con = getCon();
try {
pstmt = con.prepareStatement(sql);
fillParameter(pstmt, params);
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll(con, pstmt, null);
}
return result;
}
public int getUniqueResult(String sql, String[] params) {
int result = -1;
con = this.getCon();
try {
pstmt = con.prepareStatement(sql);
fillParameter(pstmt, params);
rs = pstmt.executeQuery();
while (rs.next()) {
result = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll(con, pstmt, rs);
}
return result;
}
public <T> List<T> findAll(String sql, String[] params, Class<T> t) {
List<T> list = new ArrayList<T>();
// 通过反射取出Class中所有的方法
Method[] methods = t.getMethods();
con = this.getCon();
try {
pstmt = con.prepareStatement(sql);
fillParameter(pstmt, params);
// 获取数据库中要查询的表的信息
int columnCount = getColumnCount(pstmt);
// 定义一个字符串数组用来存所有的数据表中的列名
String[] columnNames = new String[columnCount];
// 将所有的列名都按顺序存到这个数组中去
restoreAllColumnNames(columnNames);
// 继续执行rs操作
rs = pstmt.executeQuery();
while (rs.next()) {
// 实例化一个对象
T instance = t.newInstance();
// 循环方法数组和columnNames组
for (Method m : methods) {
for (int i = 0; i < columnNames.length; i++) {
// 取出columnNames中的名字在前面加上set
String mname = "set" + columnNames[i];
//System.out.println("数据库列:" + columnNames[i]);
//System.out.println("方法是:" + m.getName());
//System.out.println("类型为:"
// + rs.getObject(columnNames[i]).getClass()
// .getName());
if (m.getName().equalsIgnoreCase(mname)) {
if ("java.math.BigDecimal".equals(rs.getObject(
columnNames[i]).getClass().getName())) {
m
.invoke(instance, rs
.getDouble(columnNames[i]));
} else {
m
.invoke(instance, rs
.getObject(columnNames[i]));
}
}
}
}
list.add(instance);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return list;
}
/**
* 将所有的列名都按顺序存到这个数组中去
*
* @param pstmt2
* @param columnNames
* @throws SQLException
*/
private void restoreAllColumnNames(String[] columnNames)
throws SQLException {
for (int i = 0; i < columnNames.length; i++) {
columnNames[i] = metaData.getColumnName(i + 1);
}
}
/**
* 获取数据库中要查询的表的所有的列的数量
*
* @param pstmt2
* @return
* @throws SQLException
*/
private int getColumnCount(PreparedStatement pstmt) throws SQLException {
int count = 0;
metaData = pstmt.getMetaData();
count = metaData.getColumnCount();
return count;
}
}
发表评论
-
ios公司账号申请流程记录
2020-08-04 17:04 3591.注册APPLE ID 2.填写公司信息,申请邓白氏码(企业 ... -
阿里百川HotFix接入指南
2017-04-11 14:46 1561阿里百川HotFix接入指南 1.首先需要成为阿里开放平台的开 ... -
安卓应用每次从后台切换到前台都会启动欢迎界面的问题
2016-07-15 09:18 2807问题描述: 应用安装后,通过安装界面的打开按钮打开应用,每当应 ... -
android性能分析工具整理
2016-03-28 22:57 719原文链接:http://www.jians ... -
android 技术经验归纳
2016-03-28 22:54 5171.android基于java,java的抽象封装要会用,并且 ... -
android面试提问
2015-11-16 11:54 0一。登录过程中需要取消登录 怎么中断连接 1)如果用httpc ... -
android 手机判断是否在充电 如断电自动打电话提醒功能
2015-05-18 11:14 3330public class MainActivity exten ... -
ANDROID应用安全防御
2015-04-02 10:06 1281Android应用的安全隐患包括三个方面:代码安全、数据安全和 ... -
Fragment加入Pagerview效果
2015-04-01 14:50 492转自 http://www.eoeandroid.com/t ... -
设计模式记忆方法(转)
2015-03-11 10:20 870设计模式的分类 创建型。 情景记忆:两个人在聊天。 ... -
android 数据库版本升级
2015-03-03 16:41 738数据库升级的意义 我 ... -
java 23种设计模式示例代码集合
2015-02-09 09:40 712策略模式,建造者模式,简单工厂模式,单例模式,抽象工厂模式 ... -
ios本地数据存储
2014-08-22 16:21 829在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题 ... -
ios 学习笔记3(界面的跳转和按钮事件等)
2014-08-21 16:50 15771.ios的很多应用程序都是采用多视图设计,控制器类型4种 ... -
iOS 学习笔记2(http get 登录)
2014-08-21 11:49 608// // ViewController.m // ... -
ios 学习笔记1
2014-08-21 11:48 856每个应用程序都有属于自己的UIWindow,UIWindow ... -
oc笔记6(NSNumber/NSValue/NSNull)
2014-08-20 18:04 856NSNumber: // 将int类型的10包装成一个NS ... -
oc笔记5(字典)
2014-08-20 17:23 762NSDictionary 通过唯一的key找到唯 ... -
oc笔记4(NSArray)
2014-08-20 15:41 14811.NSArray *array = [NSArray a ... -
oc笔记3(NSMutableString)
2014-08-20 14:54 7421.创建一个可变字符串 NSMutableString * ...
相关推荐
**JDBC连接池&JDBCTemplate** 在Java Web开发中,JDBC(Java Database Connectivity)是用于连接Java应用程序和数据库的标准接口。然而,直接使用JDBC进行数据库操作存在一些效率问题,比如频繁创建和关闭数据库...
**JDBC数据源连接池配置与使用详解** 在Java Web应用中,数据库连接的管理是至关重要的。为了提高性能和资源利用率,开发人员通常会使用数据源连接池。本篇文章将详细讲解JDBC数据源连接池的配置和使用,以帮助你更...
在这个场景中,我们关注的是一个基于SpringBoot、MyBatis和Druid连接池的项目,它利用了ClickHouse的JDBC官方驱动进行数据操作。这个组合提供了强大的数据库管理和分析能力,特别适合大数据量的实时查询和分析。下面...
本文将详细介绍如何在Tongweb5中配置JDBC连接池,以及Web应用如何通过JNDI(Java Naming and Directory Interface)查找并使用这些数据源。 首先,我们需要了解JDBC连接池的基本原理。JDBC连接池是在应用启动时预...
在Java开发中,数据库操作是不可或缺的一部分,而JDBC连接池是提高数据库访问效率、优化系统资源使用的重要技术。本文将深入探讨JDBC连接池的概念、工作原理,并以"通用basedao"模板为例,讲解如何在实际项目中应用...
【JDBC连接池&JDBCTemplate】是Java开发中处理数据库交互的重要技术。JDBC是Java Database Connectivity的缩写,它提供了一组接口和类,使得Java程序能够与各种类型的数据库进行通信。JDBC不仅是Java操作数据库的...
JDBC(Java Database Connectivity)是...JDBC连接池和JDBCTemplate是其在实际开发中的两个重要补充,它们提高了性能和代码质量,简化了数据库操作的复杂度。了解并熟练掌握这些知识,对于Java开发人员来说至关重要。
本文将深入探讨SQL Server数据库连接池以及Java JDBC(Java Database Connectivity)如何进行调用。 首先,我们来理解什么是数据库连接池。数据库连接池是一种在应用服务器启动时预先建立的数据库连接集合,这些...
C3P0通过组合多个数据源来实现连接池,可以更好地控制并发和资源管理。 这些jar包的收集意味着开发者可以快速找到适用于不同数据库的JDBC驱动和连接池实现,无需花费时间在网上搜索和验证资源的可靠性。随着技术的...
MySQL 数据连接池是一种数据库管理技术,它在应用服务器和数据库之间起到了中介的作用,优化了数据库的连接使用,提高了系统的性能和资源利用率。在Java、Python等编程语言中,都有相应的库或框架支持数据连接池的...
数据库连接池,又称为数据源,是在应用程序中预先创建并维护的一组数据库连接。它允许多个客户端共享这些连接,而不是每次需要访问数据库时都创建新的连接。这样可以减少创建和销毁连接的开销,提高系统的整体性能。...
"JDBC数据连接池实现"这个主题主要涉及Java数据库连接(JDBC)以及如何有效地管理数据库连接,以提高应用程序的性能和资源利用率。连接池技术在此扮演着至关重要的角色。 首先,JDBC是Java编程语言与各种类型数据库...
1. **选择连接池实现**:首先,我们需要选择一个合适的数据库连接池实现,如Apache的DBCP、C3P0、HikariCP或Tomcat JDBC连接池等。这些连接池库提供了管理和维护数据库连接的功能。 2. **配置连接池**:在应用的...
Java JDBC连接池是一种高效管理数据库连接的技术,它允许应用程序重复使用已经建立的数据库连接,从而减少频繁创建和关闭连接带来的开销。在大型系统中,尤其是高并发环境下,使用连接池能够显著提升性能并降低资源...
本示例中的"简单的jdbc连接池类"实现了一个基本的数据库连接池功能,非常适合初学者理解和实践。 首先,我们来理解`jdbc`。JDBC(Java Database Connectivity)是Java语言用来与各种数据库进行交互的一种标准接口。...
总之,这个"完美的Java JDBC连接池实例"提供了灵活、高效的数据源管理方案,无论是在小型应用还是大型企业级系统中,都能显著提升数据库操作的性能,降低资源消耗。同时,其兼容多种数据库的能力使得迁移和扩展变得...
C3P0是一个支持JDBC3规范和JDBC2的标准扩展的连接池组件,它提供了强大的性能和配置选项。C3P0的核心功能包括: 1. **连接管理**:C3P0能创建并维护一个数据库连接池,这些连接可以在多个请求之间复用,从而避免了...
数据连接池在IT行业中扮演着至关重要的角色,尤其是在大型企业级应用系统中。它是一种管理数据库连接的技术,通过复用已存在的数据库连接,避免频繁创建和销毁连接带来的性能开销,提高了系统的运行效率和资源利用率...
在实际应用中,开发者通常会在Spring框架中配置数据源,选择合适的连接池实现,如在Spring Boot项目中,可以通过YAML或properties配置文件设置连接池的相关参数: ```yaml spring: datasource: type: ...