面向接口的DAO设计(JDBC数据库操作)

在这里插入图片描述
在lib下导入数据库链接包

-DAO (Data Access Objects) 数据访问对象是第一个面向对象的接口,DAO模式是通过对业务层提供数据抽象层接口。它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 象直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或小范围本地分布使用。DAO模式是通过对业务层提供数据抽象层接口。

创建数据库基类BaseDao
import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;




/**
 * @author LLp
 *数据库操作基类
 */
public class BaseDao {
	Connection cn=null;
	PreparedStatement pstm=null;
	ResultSet rs=null;
  //获取数据库连接
	public boolean getConnection(){
		try{
			//加载不同数据库厂商提供的驱动
			Class.forName("com.mysql.jdbc.Driver");
			String url="jdbc:mysql://localhost:3306/kgcnews";
			//root为数据库账号  数字为密码
			cn=DriverManager.getConnection(url,"root","5869413");
		}catch (ClassNotFoundException e) {
			e.printStackTrace();
			return false;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
		return true;
	}
  //增删改
  public int executeUpdate(String sql,Object []parames){
	   int updateRows=0;
	   if(this.getConnection()){
		   try {
			pstm=cn.prepareStatement(sql);
			  for(int i=0;i<parames.length;i++){
			  pstm.setObject(i+1, parames[i]);
			   }
			updateRows = pstm.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 
	   }
	   return updateRows;
  }
	//查
  public ResultSet executeSQL(String sql,Object[] parmes){
	  if(this.getConnection()){
		  try{
		  pstm=cn.prepareStatement(sql);
		  for (int i = 0; i < parmes.length; i++) {
	      pstm.setObject(i+1, parmes[i]);
		}
		  rs=pstm.executeQuery();
	  }catch(SQLException e){
		  e.printStackTrace();
	  }
  }
	return rs;
	}

	//释放资源
public boolean closeResource(){
	if(rs!=null){
		try {
			rs.close();
		} catch (SQLException e) {
			// TODO: handle exception
			e.printStackTrace();
			return false;
		}
	}
	 if(pstm!=null){
		 try{
			 pstm.close();
		 }catch (SQLException e) {
			// TODO: handle exception
			 e.printStackTrace();
			 return false;
		}
	 }
	if(cn!=null){
		try{
			cn.close();
		}catch (SQLException e) {
			// TODO: handle exception
			e.printStackTrace();
			return false;
		}
	}
return true;
}

}



创建NewsDao1接口并实现其创建抽象方法体
import java.sql.Date;
		/**使用JDBC实现课工场新闻数据的增删查改
	 * @param args
	 */
	
	//获取数据库连接

	//增加新闻新闻
	public void addNews(int id,int categoryid,String title,String summary,String content,String author,Date createdate);
	//删除特定的新闻方法
	public void deleteNews(int id);
	//修改特定新闻标题的方式
	public void updateNews(int id,String title) ;
	//查询全部新闻信息
	public void getNesList() ;
		// TODO Auto-generated method stub
	//查询特定标题的新闻信息
	public void getNewsByTitle(String title);
	
创建NewsDaoImpl类继承BaseDao并实现NewsDao1
  • SQL语句中?号为占位符,负责给Object[] parames传值;一定按?号顺序写
import java.sql.Connection;
import java.sql.Date;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.sql.Timestamp;



import cn.kgc.dao.BaseDao;
import cn.kgc.dao.NewsDao1;







public class NewsDaoImpl extends BaseDao implements NewsDao1 {

	/**使用JDBC实现课工场新闻数据的增删查改
	 * @param args
	 */
	Connection connection;
	PreparedStatement stmtStatement=null;
	ResultSet rSet=null;
	//获取数据库连接
	
	//增加新闻新闻
	public void addNews(int id,int categoryid,String title,String summary,String content,String author,Date createdate){
		
		try {
			
			String sql="INSERT INTO news_detail(id,categoryid,title,summary,content,author,createdate) VALUES(?,?,?,?,?,?,?)";
			//SQL语句中有几个?号表示要传入几个参数
            Object [] params={id,categoryid,title,summary,content,author,new Timestamp(createdate.getTime())};
		 int i=  this.executeUpdate(sql, params);
	
			if(i>0){
				System.out.println("插入新闻成功");
			}
		}finally{
			this.closeResource();
		}
	}
	//删除特定的新闻方法
	public void deleteNews(int id){
	
				try {
					String sql="DELETE FROM news_detail WHERE id=?";
					Object[] parames={id};
					int i=this.executeUpdate(sql,parames);
					if (i>0) {
						System.out.println("删除成功");
					}
				
				}finally{
					this.closeResource();
				}
	}
	//修改特定新闻标题的方式
	public void updateNews(int id,String title) {
		try {
			String sql="UPDATE news_detail SET title=? WHERE id=?";
	        Object parames[]={title,id};
	        int i=this.executeUpdate(sql, parames);
			if (i>0) {
				System.out.println("修改新闻成功");
			}
		
		}finally{
			this.closeResource();
		}
	}
	//查询全部新闻信息
	public void getNesList() {
		// TODO Auto-generated method stub
        
          try {
        	 
              String sql="SELECT id,categoryid,title,summary,content,author,createdate FROM news_detail";
			Object [] params={};
			ResultSet rSet=this.executeSQL(sql, params);
			  while(rSet.next()){
				  int id=rSet.getInt("id");
				  int categoryid=rSet.getInt("categoryid");
				  String newsTitle=rSet.getString("title");
				  String summary=rSet.getString("summary");
				  String content=rSet.getString("content");
				  String author=rSet.getString("author");
				  Timestamp createdate=rSet.getTimestamp("createdate");
				  System.out.println(id+"\t"+categoryid+"\t"+newsTitle+"\t"+summary+"\t"+content+"\t"+author+"\t"+createdate);
				  
			  }
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			this.closeResource();
		}
          
	}
	//查询特定标题的新闻信息
	
	
	
	public void getNewsByTitle(String title){
	  try{
		  String sql="SELECT id, title FROM news_detail where title=?";
		  	Object []parames={title};
		  	ResultSet rs=this.executeSQL(sql, parames);
		  	while(rs.next()){
		  		int id=rs.getInt("id");
		  		String title1=rs.getString("title");
		  		System.out.println(id+"\t"+title);
		  	}
	  } catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally{
		  this.closeResource();
	  }
	
		 		
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//查询特定标题的新闻信息
			
	//  newsDao1.addNews(3, 1, "test", "test", "test", "test", new Date(1998, 10, 0));
	  //newsDao1.updateNews(3, "newTitle");
		//newsDao1.getNesList();
		
      NewsDao1 dao1=new NewsDaoImpl();
      dao1.getNesList();
      dao1.getNewsByTitle("Java Web开课啦");
       
	}

}

数据库设计表名为news_detail

z

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值