您的位置:首页 > 编程语言 > Java开发

JavaWeb--数据库操作及数据库连接池(dbcp连接)

2018-01-20 18:36 441 查看
1、JDBC:是提供用来执行SQL语句的java API.步骤如下:加载驱动程序、与数据库建立连接、发送SQL语句、处理结果。

2、JTA:事务有提交和回滚两个概念。提交:所有的操作步骤都被完整的执行后,称为事务被提交。回滚:由于某一操作步骤执行失败,导致所有步骤都没有被提交,则事务必须回滚,即回到事务执行前的状态。
代码如下:

package henu.utils;
import java.sql.*;

public class DbUtil {
/**
* 声明连接数据库的信息,例如数据库URL、用户名、密码等
*/

private static String url = "jdbc:mysql://localhost:3306/user";
private static String user = "root";
private static String password = "123";

/**
* 声明相关对象
*/
private static Statement stmt = null;
private static ResultSet rs = null;
private static Connection conn = null;

/**
* 创建数据库链接
*/

public static synchronized Connection getConnect() {
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}

/**
* 执行insert、update、delete语句
*
* 返回int类型
*/

public static int executeUpdate(String sql) {
int result = 0;

try {
stmt = getConnect().createStatement();
result = stmt.executeUpdate(sql);

} catch (SQLException e) {

e.printStackTrace();
}
return result;
}
/**
* 执行select语句
*
* 返回查询ResultSet的结果集
*/
public static ResultSet executeQuery(String sql) {

try {
stmt = getConnect().createStatement();
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}

/**
* 执行动态的Sql语句
* @param sql含有参数的动态Sql语句
* @result 返回PreparedStatement对象
*/

public static PreparedStatement executePrepareStatement(String sql) {
PreparedStatement ps = null;
try {
ps = getConnect().prepareStatement(sql);

} catch (Exception e) {

e.printStackTrace();
}

return ps;
}

/**
* 事务回滚
*/

public static void rollback() {
try {
getConnect().rollback();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 关闭数据库
*/

public static void close() {

try {
if(rs!=null)
rs.close();
if(stmt!=null)
rs.close();
if(conn!=null)
conn.close();

} catch (SQLException e) {
e.printStackTrace();
}
}

/**
* 连接Sql Server 2008
* 需要下载sqljdbc.jar
* Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
* url = "jdbc:sqlserver://localhost:1433;DatabaseName = dbName"
*
*
* 连接Oracle数据库
* 加载驱动程序
* DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
* url = "jdbc:oracle:oci8:@user"
*或者
*Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
*url = "jdbc:oracle:thin:@localhost:1512:user"
*/

}

3、数据库连接池:在一个虚拟的池中预先建好一定数量的Connection对象等待客户端的连接,当客户端连接时则分配一个空闲的Connection对象给客户端连接数据库;当这个客户端请求结束时则将Connection对象归还给池中,用来等待下一个客户端的访问。独立于Web服务器的数据库连接池:dbcp方式

需要commons-dbcp-xxx.jar和commons-pool-xxx.jar

package henu.util;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
/**
* DBCP
* @author
* 2017-10-20
*/
public class DbUtil {

private static BasicDataSource dataSource = null;

public static void init(){
if (dataSource != null){
try{
dataSource.close();
}catch(Exception e){
e.printStackTrace();
}
dataSource = null;
}

try {
Properties p = new Properties();
//硬编码方式
p.setProperty("driverClassName", "com.mysql.jdbc.Driver");
p.setProperty("url", "jdbc:mysql://localhost:3306/webdisk");
p.setProperty("username", "root");
p.setProperty("password", "123456");
p.setProperty("maxActive", "30");
p.setProperty("maxIdle", "10");
//读取配置文件
//p.load(DbUtil.class.getClass().getResourceAsStream("/db.properties"));
dataSource = (BasicDataSource)BasicDataSourceFactory.createDataSource(p);
} catch(Exception e) {
e.printStackTrace();
}
}

public static DataSource getDataSource()
{
if(dataSource == null) {
init();
}
return dataSource;
}

public static synchronized Connection getConnection() {
Connection con = null;
if(dataSource == null) {
init();
}
if(dataSource!=null) {
try {
con = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
return con;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐