1. 程式人生 > >java操作數據庫的3中基本方式

java操作數據庫的3中基本方式

rman import etc dbutils ace port runner pid data

//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 com.mysql.jdbc.Statement;

public class JdbcUtils {

private static final String DRIVERCLASS;
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();
} catch (IOException e) {
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);
    } catch (ClassNotFoundException e) {
    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
    /**

      1. 先創建QueryRunner類
      1. 調用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();
        }
        }
        }
        /**
  • 類似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中基本方式