JAVA是面向對象的語言,開發者在操作數據的時候,通常更習慣面對一個特定類型的對象,如一個用戶就是一個User類的對象。DAO層需要做的,就是為上層提供充分的對象支持,讓上層再也看不到具體的數據,而是一個個活生生的對象。
增加,刪除,查詢和修改操作是DAO需要做的最基本的4項操作。查詢一般需要提供遍歷查詢和id查詢,對于遍歷查詢,DAO需要提供User泛型的list對象,對于id查詢則提供已經裝配好數據的User對象,至于增加和修改操作,上層一般會提供一個User對象,DAO把User對象中的數據使用Insert語句插入到表格中。刪除操作則只需提供一個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類
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獲取用戶對象
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()){
//如果存在,則直接構建并返回用戶對象
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;
}
//查詢所有用戶
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();
//循環添加用戶對象
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;
}
//修改用戶數據
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;
}
}
//刪除用戶數據
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;
}
}
//插入用戶數據
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;
}
}
}
}
總結
以上就是本文關于使用JDBC實現數據訪問對象層(DAO)代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱:JDBC常用接口總結、BaseJDBC和CRUDDAO的寫法實例代碼、JDBC中resutset接口操作實例詳解等,如有不足之處,歡迎留言指出,小編會及時回復大家并改正。感謝朋友們對億速云的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。