java操作數據庫的3中基本方式
package utils;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import com.mysql.jdbc.Statement;
public class JdbcUtils {
private static final String URL;
private static final String USERNAME;
private static final String PASSWORD;
static{
Properties p = new Properties();
try {
p.load(new FileInputStream("src/jdbc.properties"));
} catch (FileNotFoundException e) {
e.printStackTrace();
e.printStackTrace();
}
DRIVERCLASS = p.getProperty("driverClass");
URL = p.getProperty("url");
USERNAME = p.getProperty("username");
PASSWORD = p.getProperty("password");
}
/**
- 加載驅動
*/
public static void loadDriver(){
try {
// 加載驅動
Class.forName(DRIVERCLASS);
e.printStackTrace();
}
}
/** - 獲取連接,返回連接
- @return
*/
public static Connection getConnection(){
// 調用一次加載驅動的方法
loadDriver();
Connection conn = null;
try {
// 獲取連接
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/** - 釋放資源
- @param stmt
-
@param conn
*/
public static void release(Statement stmt,Connection conn){
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}/**
- 釋放資源
- @param stmt
- @param conn
*/
public static void release(ResultSet rs,Statement stmt,Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
//鏈接池和jdbc聯合提取出來的工具類
package utils;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mysql.jdbc.Statement;
public class JdbcUtils {
/**
* 獲取連接,返回連接 是apache的
* @return
*/
public static Connection getDbcpConnection(){
Connection connection = null;
try {
Properties pro = new Properties();
pro.load(new FileInputStream("src\\dbcpconfig.properties"));
DataSource ds = BasicDataSourceFactory.createDataSource(pro);
connection = ds.getConnection();//被增強後的connetion
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
/**
* 獲取連接,返回連接 不是apache的
* 配置文件名稱是固定的c3p0-config.xml 並且 放在src目錄下
* ComboPooledDataSource會自動去src目錄查找c3p0-config.xml的配置文件
* @return
*/
public static Connection getC3P0Connection(){
Connection connection = null;
try {
DataSource ds =new ComboPooledDataSource();//這個地方的參數是與配置文件匹配,如果不寫,則為默認
connection = ds.getConnection();//被增強後的connetion
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
/**
* 釋放資源
* @param stmt
* @param conn被增強後的
*/
public static void release(Statement stmt,Connection conn){
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
// 已經變成了歸還了...
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 釋放資源
* @param stmt
* @param conn被增強後的
*/
public static void release(ResultSet rs,Statement stmt,Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
// 把close()給修改了,原來是銷毀連接,現在讓方法變成歸還連接。
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
//DButis的使用 導入包
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.junit.Test;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
- 因為:沒有使用DButis之前
- (1)數據庫鏈接對象、sql語句操作對象,封裝結果集對象,這三大對象會重復定義
(2)封裝數據的代碼重復,而且操作復雜,代碼量大
(3)釋放資源的代碼重復
結果:(1)程序員在開發的時候,有大量的重復勞動。(2)開發的周期長,效率低
所以apache開發了一套封裝jdbc的工具類DButis提供給程序員使用 - @author WangShuang
-
*/
public class test {
DataSource ds = new ComboPooledDataSource();@Test
br/>@Test
/**-
- 先創建QueryRunner類
-
- 調用update()方法,可以完成增刪改的操作
/
QueryRunner qr = new QueryRunner(ds);
try {
// 添加
qr.update("insert into product values (null,?,?,?)", "鴨梨",3.5,new Date());
} catch (SQLException e) {e.printStackTrace();
}
}
@Test
br/>e.printStackTrace();
}
}
@Test
QueryRunner qr = new QueryRunner();
try {
qr.query("select from product where pid = ?",new MyResultSetHandler() , 1);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
- 調用update()方法,可以完成增刪改的操作
-
- 類似BeanHandler
- @author WangShuang
-
*/
class MyResultSetHandler implements ResultSetHandler<Product>{@Override
br/>@Override
Product p = new Product();
p.setPid(arg0.getInt(1));
p.setPname(arg0.getString(2));
p.setPrice(arg0.getDouble(3));
p.setPdate(arg0.getDate(4));
return p;
}
}
java操作數據庫的3中基本方式