一、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. Ros学习——录制与回放

    mkdir ~/bagfiles cd ~/bagfiles rosbag record -a 录制完成后,查看文件: rosbag info <your bagfile> 回放:在终端中 ...

  2. Ubuntu 添加用户到sudoers

    ubuntu上的用户有时候需要用到管理员权限,可以通过修改 /etc/sudoers 文件内容添加用户权限. 操作方式 1. 首先以root进入系统打开文件 sudo vim /etc/sudoers ...

  3. acrord32 pdf自动化

    这个东西就是帮助用户自动化处理pdf的 . 可以看作是adobe reader的命令行

  4. SDUT 3404 数据结构实验之排序七:选课名单.!?

    数据结构实验之排序七:选课名单 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 随着学校规模 ...

  5. SQL Server相关知识和经验的碎片化记录

    1.在向服务器发送请求时发生传输级错误 在向服务器发送请求时发生传输级错误. (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接.) ---> Sy ...

  6. 《Head First Servlets & JSP》-12-Web应用安全

    serlvet安全的4大要素 认证.授权.机密性和数据完整性. 容器完成认证和授权的过程 代码中不要有安全信息 大多数Web应用,大多数情况下Web应用的安全约束都应该以声明方式处理,即在部署描述文档 ...

  7. Understanding the Effective Receptive Field in Deep Convolutional Neural Networks

    Understanding the Effective Receptive Field in Deep Convolutional Neural Networks 理解深度卷积神经网络中的有效感受野 ...

  8. springMvc参数传递的方法

    package cn.edu.hj.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; im ...

  9. C++日志模块实现的经验之谈

    以类的方式对日志模块进行封装,可创建一个单实例的接口或创建一个全局的日志对象指针,同时提供相应的对外写日志接口. 写日志的接口采用可变参数来建立,可使用va_list类型和##args参数,同时在写日 ...

  10. Paste JSON as Code • quicktype 软件的使用

    1.软件图标认知 该软件为json字符串与对象之间相互转户的自动化软件. 下载地址 2.打开软件 配置基本设置 3.生成.h文件 选择生成.h文件 拷贝代码到你管理该对象json文件的.h文件下 4. ...