JSP新闻系统之二DAO框架
  TEZNKK3IfmPf 2023年11月15日 15 0
JSp
package com.news.util;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

//Dao工厂类
public class DaoFactory {
	private static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
	private static String url = "jdbc:sqlserver://localhost:1433;DatabaseName=News";
	private static String user = "sa";
	private static String pwd = "123@qwe";
	
//	private static String driver="com.mysql.jdbc.Driver";
//	private static String url="jdbc:mysql://localhost:3306/news";
//    private static String user = "root" ;   
//    private static String pwd = "admin" ;  
    
	// 1.公共方法是获得数据库链接对象
	public static Connection getConnection() {
		Connection con = null;
		try {
			Class.forName(driver);// 加,连
			con = DriverManager.getConnection(url, user, pwd);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return con;// 非void都需要return
	}
	// 2.关闭所有方法;有3个参数!,省代码了!!!
	public static void closeAll(ResultSet rs, Statement stmt, Connection con) {
		try {
			if (rs != null) {
				rs.close();
			}
			if (stmt != null) {
				stmt.close();
			}
			if (con != null) {
				con.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	// 3.setParams,用来设置预编译语句对象的?占位符的值;
	public static void setParams(PreparedStatement pstmt, Object[] params) {
		if (params == null) {
			return;
		}// return:直接返回,啥也不做;
		try {
			for (int i = 0; i < params.length; i++) {
				pstmt.setObject(i + 1, params[i]);
			}
		} catch (SQLException e) {// 有异常,加上去
			e.printStackTrace();
		}
	}

	// 4.做公共的更新方法,可以更新所有的基本sql语句;
	public int executeUpdate(String sql, Object[] params) {
		// 1.声明对象;是将来工作当中省内存;
		Connection con = null;
		PreparedStatement pstmt = null;
		int count = 0; // 增删改受影响的行数;

		try {
			con = this.getConnection();// 调用本类的方法;
			pstmt = con.prepareStatement(sql);// 建对象:预编译对象,?
			setParams(pstmt, params);// 调用设置?的方法,已经写过了!!!
			count = pstmt.executeUpdate();// 3.执行;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			this.closeAll(null, pstmt, con);
		}
		return count;
	}

	// 5.执行查询方法;
	public static List executeQuery(String sql, Object[] params) {
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		int colCount = 0;
		ArrayList tableList=new ArrayList();//表集合
		
		try {
			con = getConnection();
			pstmt = con.prepareStatement(sql);
			setParams(pstmt, params);
			rs = pstmt.executeQuery();// 执行查询,结果给rs
			ResultSetMetaData rd = rs.getMetaData();// 获得元数据
			colCount = rd.getColumnCount();
			while (rs.next()) {
				ArrayList rowList = new ArrayList();//行集合
				for (int i = 1; i <= colCount; i++) {
					rowList.add(rs.getString(i));
				}
				tableList.add(rowList);				
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			closeAll(rs,pstmt,con);
		}
		return tableList;
	}
}

package com.news.dao;

import java.util.List;

import com.news.entity.User;

/**
 * 用户访问接口
 * @author Administrator
 *
 */
public interface UserDao {
	public List<User> getAllUser();//查询所有用户
	public boolean saveUser(String username,String pwd,String email,String address,String bobby);
	public User queryUserByNameAndPwd(String username,String userpwd);//根据用户名和密码来查询用户是否存在;
	//通过查询获取数据表中数据总条数;
	public int getCount();
	//根据当前页码和页数,来分页的方法;返回User集合;
	public List<User>queryUserByPage(int currentPage,int pageSize);
}

package com.news.dao;

import java.util.List;

import com.news.entity.Topic;

public interface TopicDao {
	public List<Topic> getAllTopic();//获得所有栏目
	public int addTopic(String tname); //实现类和接口方法务必一致;!
	public boolean deleteTopicById(int id);//根据ID删除主题栏目;
	
	//更新主题,先根据ID找到该主题;
	//根据ID查询一条主题记录
	Topic queryTopicById(int id);
	//根据ID修改一条记录
	public int updateTopicById(int id,String tname);
}

package com.news.dao;

import java.util.List;

import com.news.entity.News;

/**
 * News接口
 * @author Administrator
 *
 */
public interface NewsDao {
	List<News>queryNews();
	public int addNews(News news);//使用实体类进行传输数据;
	//根据新闻主题查询新闻
	public List<News>queryNewsByTopicId(int topicId);
	public News queryNewsById(int id);
}

 

//实体类User,News,Topic等暂时省略

 

package com.news.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.sql.*;

import com.news.dao.UserDao;
import com.news.entity.User;
import com.news.util.DaoFactory;

public class UserDaoImpl implements UserDao{
	@Override
	public List<User> getAllUser() {
		Connection con=null;
		Statement st=null;
		ResultSet rs=null;
		List<User>users=null;//利用泛型来创建users集合
		String sql="select * from t_user";
		//获得数据库的代码
		try {
			con=DaoFactory.getConnection();//贾琏
			st=con.createStatement();//语句对象;
			rs=st.executeQuery(sql);//执行结果;
			//遍历结果集
                         users=new ArrayList<User>();

			while(rs.next()){
				//从数据库取出数据,然后再把数据库放入实体对象中;
				User user=new User();
				user.setId(rs.getInt("id"));
				user.setUsername(rs.getString("username"));
				user.setPwd(rs.getString("pwd"));
				user.setEmail(rs.getString("email"));
				user.setHobby(rs.getString("hobby"));
				user.setAddress(rs.getString("address"));

				users.add(user);
		}
			//users=DaoFactory.executeQuery(sql, null);
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//操作结束
			DaoFactory.closeAll(rs, st, con);
		}
		return users;//返回user的集合
	}

	@Override
	public boolean saveUser(String username, String pwd, String email,
			String address, String bobby) {
		Connection con=null;
		PreparedStatement pstmt=null;
		boolean flag=false;
		//String sql="insert into t_user values(null,?,?,?,?,?)";//mysql格式;
		String sql="insert t_user values(?,?,?,?,?)";
		
		try {
			con=DaoFactory.getConnection();		
			pstmt=con.prepareStatement(sql);
			Object[]params={username,pwd,email,address,bobby};
			DaoFactory.setParams(pstmt, params);
			pstmt.executeUpdate();
			flag=true;//成功则为true;
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(null, pstmt, con);
		}
		return flag;
	}

	@Override
	public User queryUserByNameAndPwd(String username, String userpwd) {
		Connection con=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		User user=null;
		String sql="select * from t_user where username=? and pwd=?";
		
		try {
			con=DaoFactory.getConnection();
			pstmt=con.prepareStatement(sql);
			Object[]params={username,userpwd};
			DaoFactory.setParams(pstmt, params);
			rs=pstmt.executeQuery();
			while(rs.next()){
				user=new User();
				user.setId(rs.getInt("id"));
				user.setUsername(rs.getString("username"));
				user.setPwd(rs.getString("pwd"));
				user.setEmail(rs.getString("email"));
				user.setHobby(rs.getString("hobby"));
				user.setAddress(rs.getString("address"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(rs, pstmt, con);
		}
		return user;
	}

	/* 获得user的总个数,即要分页的总记录数
	 * @see com.news.dao.UserDao#getCount()
	 */
	@Override
	public int getCount() {
		Connection con=null;
		Statement st=null;
		ResultSet rs=null;
		int count=0;
		
		try {
			con=DaoFactory.getConnection();
			st=con.createStatement();
			String sql="select count(*) from t_user";
			rs=st.executeQuery(sql);
			if(rs.next()){
				count=rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(rs, st, con);
		}
		return count;
	}

	@Override
	public List<User> queryUserByPage(int currentPage, int pageSize) {
		Connection con=null;
		Statement st=null;
		ResultSet rs=null;
		List<User>users=null;
		
		try {
			con=DaoFactory.getConnection();
			st=con.createStatement();
			users=new ArrayList<User>();
			String sql="select top "+pageSize+" * from t_user where id not in (select top "+(currentPage-1)*pageSize+" id from t_user order by id)order by id";
			rs=st.executeQuery(sql);
			//遍历结果集
			while(rs.next()){
				//从数据库中取出一条记录后,放到实体对象中;
				User user=new User();
				user.setId(rs.getInt("id"));
				user.setUsername(rs.getString("username"));
				user.setEmail(rs.getString("email"));
				user.setAddress(rs.getString("address"));
				user.setHobby(rs.getString("hobby"));
				//将实体对象放入集合中;
				users.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(rs, st, con);
		}
		return users;
	}
	
}

package com.news.dao.impl;

import java.sql.*;
import java.util.*;

import com.news.dao.TopicDao;
import com.news.entity.Topic;
import com.news.util.DaoFactory;

public class TopicDaoImpl implements TopicDao {

	@Override
	public List<Topic> getAllTopic(){
		Connection con=null;
		Statement st=null;
		ResultSet rs=null;
		String sql="select * from t_topic";
		List<Topic>topices=new ArrayList<Topic>();
		
		try {
			con=DaoFactory.getConnection();
			st=con.createStatement();
			rs=st.executeQuery(sql);
			while(rs.next()){
				Topic topic=new Topic();
				topic.setId(rs.getInt("id"));
				topic.setTname(rs.getString("tname"));
				topic.setCreatetime(rs.getDate("createtime"));
				
				topices.add(topic);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(rs, st, con);
		}
		return topices;		
	}

	@Override
	public int addTopic(String tname) {
		Connection con=null;
		PreparedStatement pstmt=null;
		String sql="insert t_topic values(?,getDate())";
		int result=0;
		
		try {
			con=DaoFactory.getConnection();
			pstmt=con.prepareStatement(sql);
			Object[]params={tname};
			DaoFactory.setParams(pstmt, params);
			result=pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(null, pstmt, con);
		}
		return result;
	}

	/* 需要注意,存在关联删除的情况,如何报错!本处没有做处理!
	 * @see com.news.dao.TopicDao#deleteTopicById(int)
	 */
	@Override
	public boolean deleteTopicById(int id) {
		Connection con=null;
		Statement st=null;
		boolean flag=false;
		String sql="delete from t_topic where id="+id;
		try {
			con=DaoFactory.getConnection();
			st=con.createStatement();
			st.executeUpdate(sql);
			flag=true;
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(null, st, con);
		}
		return flag;
	}

	@Override
	public Topic queryTopicById(int id) {
		Connection con=null;
		Statement st=null;
		ResultSet rs=null;
		Topic topic=null;
		
		try {
			con=DaoFactory.getConnection();
			st=con.createStatement();
			String sql="select * FROM t_topic where id="+id;
			rs=st.executeQuery(sql);
			while(rs.next()){
				topic=new Topic();
				topic.setId(rs.getInt("id"));
				topic.setTname(rs.getString("tname"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(rs, st, con);
		}
		return topic;
	}

	@Override
	public int updateTopicById(int id, String tname) {
		Connection con=null;
		PreparedStatement pstmt=null;
		int result=0;
		String sql="update t_topic set tname=? where id=?";
		
		try {
			con=DaoFactory.getConnection();
			pstmt=con.prepareStatement(sql);
			Object[]params={tname,id};
			DaoFactory.setParams(pstmt, params);
			result=pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(null, pstmt, con);
		}
		return result;
	}
}

package com.news.dao.impl;

import java.util.*;
import java.util.Date;
import java.sql.*;

import com.news.dao.NewsDao;
import com.news.entity.News;
import com.news.util.DaoFactory;

/**
 * NewsDao的实现类,可以对新闻实现查询;
 * @author Administrator
 *
 */

public class NewsDaoImpl implements NewsDao {

	@Override
	public List<News> queryNews() {
		Connection con=null;
		Statement st=null;
		ResultSet rs=null;
		List<News>newses=new ArrayList<News>();
		String sql="select * from t_news";
		try {
			con=DaoFactory.getConnection();
			st=con.createStatement();
			rs=st.executeQuery(sql);
			while(rs.next()){
				News news=new News();
				news.setId(rs.getInt("id"));
				news.setTitle(rs.getString("title"));
				news.setAuthor(rs.getString("author"));
				news.setCreatetime(rs.getDate("createtime"));
				news.setModifyTime(rs.getDate("modifytime"));
				news.setNcontent(rs.getString("ncontent"));
				news.setSummary(rs.getString("summary"));
				news.setTid(rs.getInt("tid"));
				
				newses.add(news);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(rs, st, con);
		}
		return newses;
	}

	@Override
	public int addNews(News news) {
		Connection con=null;
		PreparedStatement pstmt=null;
		int result=0;
		String sql="insert t_news values(?,?,?,getdate(),?,getdate(),?,null)";
		
		try {
			con=DaoFactory.getConnection();
			pstmt=con.prepareStatement(sql);
			Object[]params={news.getTid(),news.getTitle(),news.getAuthor(),news.getNcontent(),news.getSummary()};
			DaoFactory.setParams(pstmt, params);
			result=pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(null, pstmt, con);
		}
		return result;
	}

	@Override
	public List<News> queryNewsByTopicId(int topicId) {
		Connection con=null;
		Statement st=null;
		ResultSet rs=null;
		List<News>newes=null;
		
		try {
			con=DaoFactory.getConnection();
			st=con.createStatement();
			newes=new ArrayList<News>();
			//根据主题id进行查询;
			String sql="select top 5 * from t_news where tid="+topicId+" order by createtime desc";
			rs=st.executeQuery(sql);
			while(rs.next()){
				//从数据库取出一条记录后,然后把数据放入实体对象中;
				News news=new News();
				news.setId(rs.getInt("id"));
				news.setTitle(rs.getString("title"));
				news.setAuthor(rs.getString("author"));
				//放入集合中;
				newes.add(news);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(rs, st, con);
		}
		return newes;
	}

	@Override
	public News queryNewsById(int id) {
		Connection con=null;
		Statement st=null;
		ResultSet rs=null;
		News news=null;
		
		try {
			con=DaoFactory.getConnection();
			st=con.createStatement();
			String sql="select * from t_news where id="+id;
			rs=st.executeQuery(sql);
			while(rs.next()){
				news=new News();
				news.setId(rs.getInt("id"));
				news.setTitle(rs.getString("title"));
				news.setNcontent(rs.getString("ncontent"));
				news.setAuthor(rs.getString("author"));
				news.setCreatetime(rs.getDate("createtime"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DaoFactory.closeAll(rs, st, con);
		}
		return news;
	}
}


 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月15日   29   0   0 servletJSp
  TEZNKK3IfmPf   2023年11月15日   16   0   0 JSp
  TEZNKK3IfmPf   2023年11月15日   17   0   0 JSp
TEZNKK3IfmPf