一、JDBC(Java Database Connectivity)

  JDBC是Java语言中访问数据库的应用程序接口,可以为多种关系数据库提供统一访问。

jdbc.properties

jdbc.driverClass=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test
jdbc.username=root
jdbc.password=root

测试类

public class DBUtil {

    public static Connection getConnection() throws IOException, ClassNotFoundException, SQLException {
Properties props = new Properties();
props.load(new FileInputStream("jdbc.properties"));
Class.forName(props.getProperty("jdbc.driverClass"));
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
return DriverManager.getConnection(url, username, password);
} public static List<Student> query(String name) throws ClassNotFoundException, IOException, SQLException {
Connection conn = getConnection();
Statement st = conn.createStatement();
String sql = "select * from student where name='" + name + "'";
ResultSet rs = st.executeQuery(sql);
List<Student> list = new ArrayList<Student>();
while (rs.next()) {
int id = rs.getInt("id");
list.add(new Student(id, name));
}
st.close();
conn.close();
return list;
} public static int insert(Student student) throws ClassNotFoundException, IOException, SQLException {
Connection conn = getConnection();
PreparedStatement pstmt = null;
int result = 0;
String sql = "insert into student(id, name) values(?, ?)";
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setInt(1, student.getId());
pstmt.setString(2, student.getName());
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(pstmt!=null)
pstmt.close();
if(conn!=null)
conn.close();
}
return result;
} public static void main(String[] args) throws ClassNotFoundException, IOException, SQLException {
System.out.println("insert " + insert(new Student(1, "Anne")) + " records.");
System.out.println(query("Anne"));
}
}

二、DBCP

JDBC的访问模式存在以下问题:

1. 现在的Web应用经常有几千人同时访问,然而频繁的进行数据库连接操作不仅耗时,还会占用很多的系统资源,导致网站的响应速度下降,严重的甚至会造成服务器的崩溃。
2. 对于每一次数据库连接,使用完后都得断开。如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。
3. 这种开发方式不能控制创建的连接数,系统资源会被毫无顾及的分配出去,连接过多可能导致内存泄漏,服务器崩溃。

  为了解决资源的频繁分配、释放所造成的问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。Java中常用的两个数据库连接池: DBCP和C3P0

导入jar包 commons-dbcp-1.4.jar 和 commons-pool-1.3.jar

a. 直接代码实现

public class ConnectionFactory {
private static final Logger logger = Logger.getLogger(ConnectionFactory.class);
private PoolingDataSource dataSource = null;
private ObjectPool CP =null;
private static ConnectionFactory connectionFactory = new ConnectionFactory(); private ConnectionFactory() {
} public static ConnectionFactory getInstance() {
return connectionFactory;
} private void configure () throws ClassNotFoundException {
try {
Properties props = new Properties();
props.load(new FileInputStream("jdbc.properties"));
Class.forName(props.getProperty("jdbc.driverClass"));
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
dataSource = setupDataSource(url, username, password);
} catch (IOException e) {
logger.error("ConnectionFactory.configure() error", e);
}
} public synchronized Connection getConnection() throws SQLException{ Connection conn = null;
try {
if (dataSource == null) {
configure();
}
conn = dataSource.getConnection();
} catch (SQLException e) {
logger.error("ConnectionFactory.getConnection() error", e);
throw e;
} catch (ClassNotFoundException e) {
logger.error("ConnectionFactory.getConnection() error", e);
throw new SQLException("Drive Class not found exception."
);
}
return conn;
} public void shutDown () {
try {
logger.info("db connection pool shut down is called");
CP.close();
} catch (Exception e) {
logger.error("db connection pool shut down throws exception");
}
} private PoolingDataSource setupDataSource(String connectURI, String user, String password) { GenericObjectPool.Config config = new GenericObjectPool.Config();
config.maxActive = 150;
config.maxIdle = 100;
config.minIdle = 30;
config.maxWait = 1000; ObjectPool connectionPool = new GenericObjectPool(null, config);
DriverManagerConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectURI, user, password);
@SuppressWarnings("unused")
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(
connectionFactory, connectionPool, null, null, false, true);
PoolingDataSource poolingDataSource = new PoolingDataSource(connectionPool);
CP = connectionPool; return poolingDataSource;
}
}

b. 使用配置文件

driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test
username=root
password=root #<!-- 初始化连接 -->
dataSource.initialSize=10
#<!-- 最大空闲连接 -->
dataSource.maxIdle=20
#<!-- 最小空闲连接 -->
dataSource.minIdle=5
#最大连接数量
dataSource.maxActive=50
#是否在自动回收超时连接的时候打印连接的超时错误
dataSource.logAbandoned=true
#是否自动回收超时连接
dataSource.removeAbandoned=true
#超时时间(以秒数为单位)
dataSource.removeAbandonedTimeout=180
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
dataSource.maxWait=1000
public static DataSource getDataSource () {
DataSource dataSource = null;
try {
Properties props = new Properties();
props.load(DBUtil.class.getResourceAsStream("dbcp.properties"));
dataSource = BasicDataSourceFactory.createDataSource(props);
} catch (Exception e) {
throw new DBException("file not found: dbcp.properties");
}
return dataSource ;
}

三、Spring 

jtds

JPA

Hibernate

参考

http://www.2cto.com/kf/201407/317622.html

java 数据库连接的更多相关文章

  1. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

  2. Java数据库连接池封装与用法

    Java数据库连接池封装与用法 修改于抄袭版本,那货写的有点BUG,两个类,一个用法 ConnectionPool类: package com.vl.sql; import java.sql.Conn ...

  3. Java数据库连接池

    转载过来的,最近在做一个小网站,准备使用这种方法.     Java jdbc数据库连接池总结! 1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及, ...

  4. 一个JAVA数据库连接池实现源码

    原文链接:http://www.open-open.com/lib/view/open1410875608164.html // // 一个效果非常不错的JAVA数据库连接池. // from:htt ...

  5. Java数据库连接——JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  6. Java数据库连接代码集合(转)

    Java数据库连接接口(JDBC)是Java里定义的一套用于数据库连接和操作的API的集合.有不同的数据库厂商提供这套接口的实现类,对于 Java程序员来说,程序员不需要关心数据库的底层的实现,统一的 ...

  7. Sae配置Java数据库连接

    Sae配置Java数据库连接 Sae在Java中配置mysql数据库 >>>>>>>>>>>>>>>>& ...

  8. Java数据库连接池的几种配置方法(以MySQL数据库为例)

    Java数据库连接池的几种配置方法(以MySQL数据库为例) 一.Tomcat配置数据源: 前提:需要将连接MySQL数据库驱动jar包放进Tomcat安装目录中common文件夹下的lib目录中 1 ...

  9. java数据库连接类,已经把数据库操作的方法都封装好了

    在这里分享一个已经封装好了的java数据库连接类,只要创建对象就可以实现数据库的增删改查操作,用过都说好.其实这个不是我自己写的,是一个理解和学习能力超高的朋友写的,他也很乐于分享交流,本人也深受他的 ...

  10. Java数据库连接--JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

随机推荐

  1. JAVA中的垃圾回收机制以及其在android开发中的作用

    http://blog.csdn.net/xieqibao/article/details/6707519 这篇文章概述了JAVA中运行时数据的结构,以及垃圾回收机制的作用.在后半部分,描述了如何检测 ...

  2. day17-jdbc 5.url介绍

    url用于标识数据库的位置,用于标识找哪个数据库. 总结:url是路径,其实就是确定是哪个数据库.用来确定我用的是哪一个数据库,并且通知我这个Connection或者是这个DriverManager获 ...

  3. cocos2d中setBlendFunc设置颜色混合方案

    CCSprite有一个ccBlendFunc类型的blendFunc_结构体成员,可以用来设置描绘时的颜色混合方案.ccBlendFunc包含了一个src和一个dst,分别表示源和目标的运算因子. 如 ...

  4. zedboard:使用ISE和modelsim搭建仿真环境 标签: zedboardfpgamodelsimise 2017-03-03 14:00 528人阅读

    详细步骤: 产生ISE仿真库文件 开始->所有程序->xilinx design tools->simulation library compilation wizard.路径可能不 ...

  5. R: 判别分析

    判别与聚类的比较: 聚类分析和判别分析有相似的作用,都是起到分类的作用. 判别分析是已知分类然后总结出判别规则,是一种有指导的学习: 聚类分析则是有了一批样本,不知道它们的分类,甚至连分成几类也不知道 ...

  6. 339E Three Swaps

    传送门 题目大意 给出由1-n组成的序列,每次可将一个区间翻转.问如何从1-n的递增序列变成给出的序列,输出操作次数以及每次操作的区间.最多翻转3次,保证有解,输出任意方案即可. 分析 我们对于每一次 ...

  7. Xshell连接linux(deepin)时提示ssh服务器拒绝了密码,请再试一次解决方法

    用Xshell root连接时显示ssh服务器拒绝了密码,应该是应该是sshd的设置不允许root用户用密码远程登录 修改 /etc/ssh/sshd_config文件,注意,安装了openssh才会 ...

  8. C指针的解析

    这是我从网上转载的一篇关于C指针的文章,方便自己以后回顾,自己添加修改部分内容 ,不对请指正 Attention:指针是指针变量 ,数组是指针常量 第一章 指针的概念  指针是一个特殊的变量,它里面存 ...

  9. Sql Server 判断表是否存在方法

    在创建表之前,通常需要先判断该表是否已经存在,如果存在则不需要创建:有时候删除表之前也需要先行判断是否存在,否则会报错. 判断方法大致有以下两种: 方法一: from sysObjects where ...

  10. postgre教程

    http://www.yiibai.com/html/postgresql/2013/080890.html