一個簡單的java jdbc案例

有些時候,配置一個spring+mybatis框架,而後寫xml,dao ,service顯得特別繁瑣。java

若是咱們只是想查一下數據庫,不考慮鏈接複用也不考慮動態sql,能夠用原生的jdbc來實現,方便快捷,也有利於認識原生jdbc。mysql

 

咱們須要的東西其實很少:spring

一個數據庫鏈接的配置文件(甚至這個也能夠不須要),sql

db.properties數據庫

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@ip:port:sid
user=username
password=pwd

一個classapache

import java.io.IOException;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * Created by tm on 2016/12/16.
 */
public class Test {

    /**
     * 初始化數據庫,加載驅動。
     * 調用方法
     * @param args
     */
    public static void main(String[] args) {
        DbConfig.initDriver();
        Map<String,Object> data = new HashMap<String, Object>();
        Test test = new Test();
        System.out.println(test.updateState(data));
    }

    /**
     * 更新某個狀態
     * @param data
     * @return
     */
    public boolean updateState(Map<String, Object> data) {
        Connection conn = null;
        boolean flag = false;
        try {
            String sql = "update table set a=?,b=? ";
            conn = DriverManager.getConnection(dbConfig.url, dbConfig.user, dbConfig.password);
            PreparedStatement state = conn.prepareStatement(sql);
            state.setInt(1,1);
            state.setString(2,"2");
            int count = state.executeUpdate();
            if(count>0){
                flag = true;
            }
            conn.commit();
            state.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return flag;
    }

    /**
     * 靜態內部類,初始化以後就一直存在不會隨對象變化。
     * 持有數據庫信息
     */
    static class DbConfig{
        static String url;
        static String user;
        static String password;

        /**
         * init db driver
         */
        public static void initDriver() {
            Properties props = new Properties();
            {
                try {
                    props.load(dbConfig.class.getClassLoader().getResourceAsStream("db.properties"));
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    System.exit(-1);
                }
            }

            String driver = props.getProperty("driver");
            try {
                Class.forName(driver);
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.exit(-1);
            }

            dbConfig.url = props.getProperty("url");
            dbConfig.user = props.getProperty("user");
            dbConfig.password = props.getProperty("password");
        }
    }
}

數據庫驅動ojdbc六、或者mysql驅動。mybatis

 

固然,以上只是很是簡單的用法,不考慮任何的擴展性重用性之類的。oracle

若是有稍微多一點的需求,就最好本身寫個dao。若是再多一點的需求就考慮使用框架了。框架

貼一個簡單的鏈接管理工具,DBUtil工具

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;

/**
 * 負責管理數據庫鏈接
 * @author TM
 *
 */
public class DBUtil {
	//鏈接池
	private static BasicDataSource cp;
	
	static{
		/*
		 * 初始化靜態屬性!
		 * 靜態塊因爲是在類第一次加載時執行
		 * 而且只會執行一次,因此在這裏初始化靜態屬性是
		 * 最適合的地方。
		 */
		//java.util.properties
		Properties prop =new Properties();
		try {
			prop.load(new FileInputStream("config.properties"));
			//根據配置項初始化
			String driverName=prop.getProperty("driverName");
			String url=prop.getProperty("url");
			String username=prop.getProperty("username");
			String password=prop.getProperty("password");
			//最大鏈接數
			int maxActive=Integer.parseInt(prop.getProperty("maxActive"));
			//最大等待時間
			int maxWait=Integer.parseInt(prop.getProperty("maxWait"));
			
			System.out.println(driverName+"\n"+url+"\n"+username+"\n"+password);
			System.out.println(maxActive+"\n"+maxWait);
			//初始化鏈接池
			cp=new BasicDataSource();
			//至關於Class.forName()中的內容
			cp.setDriverClassName(driverName);
			cp.setUrl(url);
			cp.setUsername(username);
			cp.setPassword(password);
			cp.setMaxActive(maxActive);
			cp.setMaxWait(maxWait);
			
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 獲取一個數據庫鏈接
	 * @return
	 * @throws Exception
	 */
	public static Connection getConnection() throws Exception{
		/*
		 * 向鏈接池要一條可用的空閒鏈接
		 * 若鏈接池尚有可用鏈接,會直接返回
		 * 若沒有,則該方法進入阻塞狀態,等待可用鏈接
		 * 等待的時間(就是初始化鏈接池時設置的maxWait)
		 * 與初始化鏈接池時設置的maxWait的時間一致
		 * 若等待的時間內出現可用的空閒鏈接
		 * 則該方法會馬上返回該鏈接,若等待的時間超過maxWait後
		 * 仍然沒有得到可用鏈接,該方法會拋出超時異常。
		 */
		return cp.getConnection();
	}
	
	/**
	 * 將給定的數據庫鏈接關閉
	 * @param conn
	 */
	public static void closeConnection(Connection conn){
		try{
			if(conn!=null){
				//只是還給了鏈接池了。
				conn.close();
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
		
		
		
	}
	
	public static void main(String[] args) throws Exception{
		Connection conn=DBUtil.getConnection();
	}
}
相關文章
相關標籤/搜索