用這個(gè)類吧.好的話,給我加加分.
創(chuàng)新互聯(lián)專注于扶風(fēng)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供扶風(fēng)營銷型網(wǎng)站建設(shè),扶風(fēng)網(wǎng)站制作、扶風(fēng)網(wǎng)頁設(shè)計(jì)、扶風(fēng)網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造扶風(fēng)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供扶風(fēng)網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
import java.sql.*;
/**
* @功能: 一個(gè)JDBC的本地化API連接類,封裝了數(shù)據(jù)操作方法,只用傳一個(gè)SQL語句即可
* @作者: 李開歡
* @日期: 2007/
*/
public class ConnectionDemo {
/*
* 這里可以將常量全部放入另一個(gè)類中,以方便修改
*/
private static Connection conn;
private static Statement ps;
private static ResultSet rs;
private static final String DRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
private static final String URL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
private static final String USER ="sa";
private static final String PASS = "sa";
public ConnectionDemo() {
// TODO Auto-generated constructor stub
ConnectionDemo.getConnection();
}
public static Connection getConnection(){
System.out.println("連接中...");
try {
Class.forName(ConnectionDemo.DRIVER);
conn = DriverManager.getConnection(ConnectionDemo.URL, ConnectionDemo.USER, ConnectionDemo.PASS);
System.out.println("成功連接");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static Statement getStatement(String sql){
System.out.println("執(zhí)行SQL語句中...");
try {
ps = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
if(sql.substring(0, 6).equals("select")){
rs = ps.executeQuery(sql);
System.out.println("執(zhí)行完查詢操作,結(jié)果已返回ResultSet集合");
}else if(sql.substring(0, 6).equals("delete")){
ps.executeUpdate(sql);
System.out.println("已執(zhí)行完畢刪除操作");
}else if(sql.substring(0, 6).equals("insert")){
ps.executeUpdate(sql);
System.out.println("已執(zhí)行完畢增加操作");
}else{
ps.executeUpdate(sql);
System.out.println("已執(zhí)行完畢更新操作");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ps;
}
public static ResultSet getResultSet(){
System.out.println("查詢結(jié)果為:");
return rs;
}
public static void closeConnection(){
System.out.println("關(guān)閉連接中...");
try {
if (rs != null) {
rs.close();
System.out.println("已關(guān)閉ResultSet");
}
if (ps != null) {
ps.close();
System.out.println("已關(guān)閉Statement");
}
if (conn != null) {
conn.close();
System.out.println("已關(guān)閉Connection");
}
} catch (Exception e) {
// TODO: handle exception
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ConnectionDemo.getConnection();
String sql = "delete from type where id = 1";
ConnectionDemo.getStatement(sql);
String sql2 = "insert into type values(1,'教學(xué)設(shè)備')";
ConnectionDemo.getStatement(sql2);
String sql1 = "select * from type";
ConnectionDemo.getStatement(sql1);
ResultSet rs = ConnectionDemo.getResultSet();
System.out.println("編號(hào) "+"類 型");
try {
while(rs.next()){
System.out.print(" "+rs.getInt(1)+" ");
System.out.println(rs.getString(2));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ConnectionDemo.closeConnection();
}
}
先要配置一個(gè)數(shù)據(jù)源,打開控制面板 - 管理工具 - 數(shù)據(jù)源 (ODBC),選擇"系統(tǒng)DSN",也可以選擇"用戶DSN"選項(xiàng)卡,點(diǎn)擊"完成",彈出的對話框里將"數(shù)據(jù)源名"一項(xiàng)設(shè)為你喜歡的名字,比如redsun。點(diǎn)"選擇",例如:找到"C:/mess.mdb"文件,如此一個(gè)ODBC數(shù)據(jù)源就配置好了。要連接該數(shù)據(jù)源,也就是連接數(shù)據(jù)庫,首先要建立一個(gè)JDBC-ODBC橋接器,上面已經(jīng)說過了,其方法是:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Class 是Java.lang包中的一個(gè)類,通過調(diào)用它的靜態(tài)方法forName就可以建立橋接器。但建立橋接器時(shí)可能發(fā)生異常,這是我們所不想見到的,因此要捕獲這個(gè)異常:
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){異常捕獲}
然后就是連接數(shù)據(jù)庫了,這里要用到j(luò)ava.sql包中的Connection類聲明一個(gè)對象,再用類DriverManager調(diào)用它的靜態(tài)方法getConnection創(chuàng)建這個(gè)連接。
Connection con=DriverManager.getConnection("jdbc:odbc:數(shù)據(jù)源名字","數(shù)據(jù)源用戶名","數(shù)據(jù)源密碼");
沒有錯(cuò)的,你在sql執(zhí)行后面加個(gè)手動(dòng)提交呢,conn.commit();//conn這是數(shù)據(jù)庫連接變量,根據(jù)你自己的修改下。
首先你得確定你的數(shù)據(jù)庫連接是通過什么形式連接的,hibernate還是原生態(tài)的jdbc 還是spring;
如果是只有hibernate,那么你得通過加載配置文件得到sessionFactory,然后得到session
如果spring,那么同樣也需要注入sessionfactory到你的dao
如果是jdbc方式,那么你就按照原生態(tài)jdbc寫法
總之,在你構(gòu)造DAO時(shí),得有數(shù)據(jù)源。這樣才能操縱你的數(shù)據(jù)庫
如果搞懂了這些問題,那么你的第一個(gè),第三個(gè)問題就迎刃而解了。至于第二問題,我沒明白你什么意思!
你要注意的是連接方式,如果是用sun公司給的Access直連驅(qū)動(dòng)包,那么是可以插入的。
如果是用java自帶的rt.jar包下驅(qū)動(dòng)的通過ODBC橋連接的那種連接方式,
用execute或者executeUpdate都只是先把數(shù)據(jù)寫入日志文件。
比如access文件叫db.mdb,用以上的方法會(huì)將條目先寫入db.ldb中。
在關(guān)閉連接,就是做close()的時(shí)候,才將數(shù)據(jù)寫入數(shù)據(jù)庫文件db.mdb
因?yàn)閍ccess默認(rèn)的是事件處理模式,所以你執(zhí)行的SQL語句先是緩存,至少要做commit()以后才會(huì)執(zhí)行。但是由于access機(jī)制,所以必須每次close以后才會(huì)實(shí)際的修改到數(shù)據(jù)庫。
希望能解決您的問題。
有測試框架。mock可以模擬測試而不對數(shù)據(jù)庫操作省去還原數(shù)據(jù)庫的麻煩?;蛘咧苯泳帉慾unit測試操作數(shù)據(jù)庫。但是這樣要在操作后還原數(shù)據(jù)庫。