使用JDBC實(shí)現(xiàn)數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象層(DAO)代碼示例
JAVA是面向?qū)ο蟮恼Z(yǔ)言,開(kāi)發(fā)者在操作數(shù)據(jù)的時(shí)候,通常更習(xí)慣面對(duì)一個(gè)特定類(lèi)型的對(duì)象,如一個(gè)用戶(hù)就是一個(gè)User類(lèi)的對(duì)象。DAO層需要做的,就是為上層提供充分的對(duì)象支持,讓上層再也看不到具體的數(shù)據(jù),而是一個(gè)個(gè)活生生的對(duì)象。
增加,刪除,查詢(xún)和修改操作是DAO需要做的最基本的4項(xiàng)操作。查詢(xún)一般需要提供遍歷查詢(xún)和id查詢(xún),對(duì)于遍歷查詢(xún),DAO需要提供User泛型的list對(duì)象,對(duì)于id查詢(xún)則提供已經(jīng)裝配好數(shù)據(jù)的User對(duì)象,至于增加和修改操作,上層一般會(huì)提供一個(gè)User對(duì)象,DAO把User對(duì)象中的數(shù)據(jù)使用Insert語(yǔ)句插入到表格中。刪除操作則只需提供一個(gè)id即可
class User{
private long id;
private String name;
private String gender;
public User(){
super();
}
public User(long id,String name,String gender){
super();
this.id = id;
this.name = name;
this.gender = gender;
}
//get,set方法
}
//DAO類(lèi)
public class jdbcDao{
static{
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(Exception e){
e.printStackTrace();
}
}
private Connection getConn(){
try{
return DriverManager.getConnection("jdbc:mysql://localhost:3306:xe","root","password");
}catch(Exception e){
e.printStackTrace();
}
}
return null;
}
private void release(ResultSet rs,Statement ps,Connection conn){
if(rs!=null){
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(ps!=null){
try{
ps.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
//用ID獲取用戶(hù)對(duì)象
public User getUserById(long id){
ResultSet rs = null;
PreparedStatement ps = null;
Connection conn = null;
String sql = "select * from user where id = ?";
try{
conn = this.getConnection();
ps = conn.prepareStatement(sql);
ps.setLong(1,id);
rs = ps.executeQuery();
if(rs.next()){
//如果存在,則直接構(gòu)建并返回用戶(hù)對(duì)象
User user = new User(rs.getLong("id"),rs.getString("name"),rs.getString("gender"));
return user;
}
}catch(Exception e){
e.printStackTrace();
}finally{
this.release(rs,ps,conn);
}
return null;
}
//查詢(xún)所有用戶(hù)
public List<User> getAllUsers(){
List<User> list = new ArrayList<User>();
ResultSet rs = null;
PreparedStatement ps = null;
Connection conn = null;
String sql = "select * from user ";
try{
conn = this.getConnection();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
//循環(huán)添加用戶(hù)對(duì)象
while(rs.next()){
User user = new User(rs.getLong("id"),rs.getString("name"),rs.getString("gender"));
list.add(user);
}
}catch(Exception e){
e.printStackTrace();
}finally{
this.release(rs,ps,conn);
}
return list;
}
//修改用戶(hù)數(shù)據(jù)
public User updateUser(User user){
PreparedStatement ps = null;
Connection conn = null;
String sql = "update user set id =?,name=?,gender=?";
try{
conn = this.getConnection();
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
ps.setLong(1,user.getId());
ps.setString(2,user.getName());
ps.setString(3,user.getGender());
int rst = ps.executeUpdate();
if(rst>0){
return new User(user.getId(),user.getName(),user.getGender());
}
conn.commit();
}catch(Exception e){
e.printStackTrace();
try{
conn.rollback();
}catch(Exception e1){
e1.printStackTrace();
}
}finally{
this.release(null,ps,conn);
}
return null;
}
}
//刪除用戶(hù)數(shù)據(jù)
public boolean deleteUser(long id){
PreparedStatement ps = null;
Connection conn = null;
String sql = "delete from user where id =?;
try{
conn = this.getConnection();
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
ps.setLong(1,user.getId());
ps.setString(2,user.getName());
ps.setString(3,user.getGender());
int rst = ps.executeUpdate();
if(rst>0){
return user;
}
conn.commit();
}catch(Exception e){
e.printStackTrace();
try{
conn.rollback();
}catch(Exception e1){
e1.printStackTrace();
}
}finally{
this.release(null,ps,conn);
}
return null;
}
}
//插入用戶(hù)數(shù)據(jù)
public User insertUser(User user){
PreparedStatement ps = null;
Connection conn = null;
String sql = "insert into user values(?,?,?)";
try{
conn = this.getConnection();
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
ps.setLong(1,user.getId());
ps.setString(2,user.getName());
ps.setString(3,user.getGender());
int rst = ps.executeUpdate();
if(rst>0){
return user;
}
conn.commit();
}catch(Exception e){
e.printStackTrace();
try{
conn.rollback();
}catch(Exception e1){
e1.printStackTrace();
}
}finally{
this.release(null,ps,conn);
}
return null;
}
}
}
}
總結(jié)
以上就是本文關(guān)于使用JDBC實(shí)現(xiàn)數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象層(DAO)代碼示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱:JDBC常用接口總結(jié)、BaseJDBC和CRUDDAO的寫(xiě)法實(shí)例代碼、JDBC中resutset接口操作實(shí)例詳解等,如有不足之處,歡迎留言指出,小編會(huì)及時(shí)回復(fù)大家并改正。感謝朋友們對(duì)腳本之家的支持!
相關(guān)文章
Spring BeanName 的自動(dòng)生成原理示例詳解
這篇文章主要介紹了Spring BeanName 的自動(dòng)生成原理示例詳解,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
分享Spring Boot 3.x微服務(wù)升級(jí)歷程
Spring Boot 3.0.0 GA版已經(jīng)發(fā)布,好多人也開(kāi)始嘗試升級(jí),有人測(cè)試升級(jí)后,啟動(dòng)速度確實(shí)快了不少,這篇文章主要介紹了Spring Boot 3.x微服務(wù)升級(jí)經(jīng)歷,需要的朋友可以參考下2022-12-12
java?設(shè)計(jì)模式從風(fēng)控鏈理解責(zé)任鏈模式
這篇文章主要為大家介紹了java?設(shè)計(jì)模式從風(fēng)控鏈理解責(zé)任鏈模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
使用IDEA創(chuàng)建servlet?JavaWeb?應(yīng)用及使用Tomcat本地部署的實(shí)現(xiàn)
本文主要介紹了使用IDEA創(chuàng)建servlet?JavaWeb?應(yīng)用及使用Tomcat本地部署2022-01-01
Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之字符串暴力匹配
字符串暴力匹配算法是指在一個(gè)長(zhǎng)字符串中暴力尋找是否包含某一子串所謂暴力匹配,就是不使用任何其他算法,將兩個(gè)字符串中的字符一一進(jìn)行比對(duì)2022-02-02
Java漢字轉(zhuǎn)拼音類(lèi)庫(kù)Pinyin4j詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了Java漢字轉(zhuǎn)拼音類(lèi)庫(kù)Pinyin4j詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-02-02
Javaweb中Request獲取表單數(shù)據(jù)的四種方法詳解
本文主要介紹了Javaweb中Request獲取表單數(shù)據(jù)的四種方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04

