有些時候,配置一個spring+mybatis框架,然后寫xml,dao ,service顯得特別繁瑣。
如果我們只是想查一下數據庫,不考慮連接復用也不考慮動態sql,可以用原生的jdbc來實現,方便快捷,也有利於認識原生jdbc。
我們需要的東西其實不多:
一個數據庫連接的配置文件(甚至這個也可以不需要),
db.properties
driver=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@ip:port:sid user=username password=pwd
一個class
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");
}
}
}
數據庫驅動ojdbc6、或者mysql驅動。
當然,以上只是非常簡單的用法,不考慮任何的擴展性重用性之類的。
如果有稍微多一點的需求,就最好自己寫個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();
}
}
