package com.pb.news.dao.impl;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.sql.Timestamp;

import com.pb.news.dao.BaseDao;
import com.pb.news.dao.NewsDao;
import com.pb.news.entity.News;
import com.pb.news.util.ConfigManager;
import com.pb.news.util.Page;

public class NewsDaoImpl extends BaseDao implements NewsDao{

@Override
//通过新闻ID获取新闻
public News getNewsById(int id) {
News news=null;
try{
//(3)获得Statement对象,执行SQL语句
String sql="select * from news_detail where id= "+id;

Object[] params={};
ResultSet rs=this.excuteSQL(sql, params);
////(4)处理执行结果(ResultSet)
if(rs.next()){
int categoryId=rs.getInt("categoryId");
String title=rs.getString("title");
String summary=rs.getString("summary");
String content=rs.getString("content");
String picPath=rs.getString("picPath");
String author=rs.getString("author");
Timestamp time=rs.getTimestamp("createdate");
//封装成新闻信息对象
news=new News();
news.setId(id);
news.setCategoryId(categoryId);
news.setTitle(title);
news.setSummary(summary);
news.setContent(content);
news.setPicpath(picPath);
news.setAuthor(author);
news.setCreatedate(time);

}
}catch(SQLException e){
e.getStackTrace();
}finally{
this.closeResource();
}

return news;
}
//查询新闻信息
public List<News> getNewsList(){
List<News> newList=new ArrayList<News>();
try {

//3.获得Statement对象,执行sql语句
String sql="select * from news_detail order by createdate ASC";
Object[] params={};
ResultSet rs=this.excuteSQL(sql, params);
//4.处理执行结果(ResultSet),释放资源
while(rs.next()){
int id=rs.getInt("id");
String title=rs.getString("title");
String summary=rs.getString("summary");
String content=rs.getString("content");
String author=rs.getString("author");
Timestamp time=rs.getTimestamp("createdate");

// System.out.println(id+"\t"+title+"\t"+summary+"\t"+
// content+"\t"+author+"\t"+time);

//封装成新闻信息对象
News news=new News();
news.setId(id);
news.setTitle(title);
news.setSummary(summary);
news.setContent(content);
news.setAuthor(author);
news.setCreatedate(time);

//将新闻对象放到集合中
newList.add(news);
}
}catch (SQLException e) {

e.printStackTrace();
}finally{
//释放资源
this.closeResource();
}
return newList;
}

//增加新闻信息
public boolean add(News news){
boolean flag=false;
try {

String sql="insert into news_detail(id,categoryId,title,summary,content,picPath,createdate,author) "
+ "values(SEQ_NEWS.nextval,?,?,?,?,?,?,?)";
Object[] params={news.getCategoryId(),news.getTitle(),news.getSummary()
,news.getContent(),news.getPicpath(),new java.sql.Timestamp(news.getCreatedate().getTime()),news.getAuthor()};

int i=this.excuteUpdate(sql, params);
//4.处理执行结果(ResultSet),释放资源
if(i>0){
System.out.println("插入新闻成功!");
}
flag=true;
}finally{
//释放资源
this.closeResource();
}

return flag;
}
//删除新闻信息
public boolean delete(int id){
boolean flag=false;

try {

//获取statement对象,执行sql语句
String sql="delete from news_Detail where id=?";
Object[] params={id};
//处理执行结果
int i=this.excuteUpdate(sql, params);
if(i>0){
System.out.println("册除新闻成功!");
}
flag=true;
} finally{
//释放资源
this.closeResource();

}
return flag;
}

//修改整个新闻信息
public boolean update(News news){
boolean flag=false;

try {

//获取statement对象,执行sql语句
String sql="update news_Detail set categoryId=?,title=?,summary=?,content=?,"
+ "picpath=?,author=?,modifydate=? where id=?";
Object[] params={news.getCategoryId(),news.getTitle(),news.getSummary(),
news.getContent(),news.getPicpath(),news.getAuthor(),
new java.sql.Timestamp(news.getModifydate().getTime()),news.getId()};
//处理执行结果
int i=this.excuteUpdate(sql, params);
if(i>0){
System.out.println("修改新闻成功!");
}
flag=true;
} finally{
//释放资源
this.closeResource();

}
return flag;
}

@Override
//获取新闻总数量
public int getTotalCount() {
int totalCount=0;
String sql="select count(*) from news_detail";
Object[] params={};
ResultSet rs=this.excuteSQL(sql, params);
try {
while(rs.next()){
totalCount=rs.getInt(1);
}
} catch (SQLException e) {

e.printStackTrace();
}finally{
this.closeResource();
}
return totalCount;
}

@Override
//分页获取新闻信息
public List<News> getPageNewsList(int pageNo, int pageSize) {
List<News> newsList=new ArrayList<News>();
String sql="SELECT id,title,author,createdate FROM (SELECT id,title,author,createdate,ROWNUM rn FROM news_detail) a WHERE a.rn>=? AND a.rn<=? ";
Page page=new Page();
page.setCurrPageNo(pageNo);//设置当前页码
page.setPageSize(pageSize);//每页显示记录数
//计算sql语句的起始记录数及结束记录数的行数
int startRow=page.getStartRow();
int endRow=page.getEndRow();
Object[] params={startRow,endRow};
ResultSet rs=this.excuteSQL(sql, params);
try {
while(rs.next()){
int id=rs.getInt("id");
String title=rs.getString("title");
String author=rs.getString("author");
Date date=rs.getDate("createdate");
News newInfo=new News();
newInfo.setId(id);
newInfo.setTitle(title);
newInfo.setAuthor(author);
newInfo.setCreatedate(new java.sql.Timestamp(date.getTime()));

newsList.add(newInfo);
}
} catch (SQLException e) {

e.printStackTrace();
}finally{
this.closeResource();
}
return newsList;
}

//获取新闻总数(执行存储过程)
public int getTotalCountProc(){
int totalCount=0;
CallableStatement proc=null;
String sql="{call getNewsCount(?)}";
getConnection();
try {
proc=conn.prepareCall(sql);
proc.registerOutParameter(1, Types.INTEGER);
proc.execute();
totalCount=proc.getInt(1);
} catch (SQLException e) {

e.printStackTrace();
}

return totalCount;
}

//测试
public static void main(String[] args) {
NewsDaoImpl newsDao=new NewsDaoImpl();
//newsDao.add(2,1,"快女选秀快讯","快女比赛正入白热化","她、她、她,谁是你心中的快女冠军",new Date());
//newsDao.update(3, "快女选秀快讯速递");
//newsDao.delete(3);
// List<News>newsList=newsDao.getNewsList();
// for (News news : newsList) {
// //System.out.println(id+"\t"+title+"\t"+summary+"\t"+
// content+"\t"+author+"\t"+time);
// System.out.println(news.getId()+"\t"+news.getTitle()+"\t"+news.getSummary()+"\t"+news.getContent()+"\t"+news.getPicpath()+"\t"+news.getAuthor()+"\t"+news.getCreatedate());
// }
// int totalCount=newsDao.getTotalCount();
// System.out.println("新闻总数量是:"+totalCount);
//第一页显示新闻信息(每页显示2条)
List<News>newsList=newsDao.getPageNewsList(1, 2);
//第2页显示新闻信息(每页显示2条)
// List<News>newsList=newsDao.getPageNewsList(2, 2);
//第3页显示新闻信息(每页显示2条)
//List<News>newsList=newsDao.getPageNewsList(3, 2);
// for (News news : newsList) {
// System.out.println(news.getTitle()+"\t"+news.getAuthor()+"\t"+news.getCreatedate());
// }

int totalCount=newsDao.getTotalCountProc();
System.out.println("新闻总数是:"+totalCount);
}

}

NewsDaoImpl的更多相关文章

  1. 深入浅出Struts2+Spring+Hibernate框架

    一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司 ...

  2. SSH框架使用注解简化代码

    注释的优势: 1.最简单直接的优势就是减少了配置文件的代码量. 2.注释和Java代码位于一个文件中,而XML 配置采用独立的配置文件.配置信息和 Java 代码放在一起,有助于增强程序的内聚性.而采 ...

  3. SSH(Struts2+Spring4+HIbernate5)的简化

    今天给大家带来的是一个简单的新闻发布系统 首先在学习过程中我是深有体会,做事情不要浮躁,不要想着一口吃下一个胖子, 最最重要的是理解,理解透了学什么东西都是随心所欲的. 开发环境:win10系统 jd ...

  4. ssh简化后之事务管理

    为了能让大家更好的了解,所以今天跟大家分享整个项目.ps:ssh环境的搭建我就不一一讲解了,请大家参考 http://www.cnblogs.com/zczc1996/p/5842367.html. ...

  5. 搭建ssh后的简化

    对于SSh框架的简化,我们可以从下面几个方面来剖析: 1.实体类entity 2.注入 3.类注解 下面,我来一一为大家讲解.ps:写的不好还请多多指教,欢迎大家"来找茬". 关于 ...

  6. struts2+spring+hibernate 实现分页

    在这里要感谢下这位博友发表的博文 http://www.blogjava.net/rongxh7/archive/2008/11/29/243456.html 通过对他代码的阅读,从而自己实现了网页分 ...

  7. 使用spring注解@Controller @Service @Repository简化配置

    前言:在web项目中引入spring框架中的配置文件,我们给每一个java bean进行相关配置可以非常安全,便捷的管理我们的bean.那么,问题来了,如果一个项目中所涉及到的java bean十分庞 ...

  8. Spring的注解

    Action想使用serviceImpl时,都需要最原始的方法New一个接口,Service service = new serviceImpl();去实例化service了.都需要Action主动创 ...

  9. spring aop 声明式事务管理

    一.声明式事务管理的概括 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的方式之一. Spring的声明式事务顾名思义就是采用声明 ...

随机推荐

  1. Java反射机制剖析(三)-简单谈谈动态代理

    通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1.     代理模式 代理模式就是为其他对象提供一种代理来 ...

  2. SPFA求单源最短路径

    序 求最短路径的算法有很多,各有优劣. 比如Dijkstra(及其堆(STL-priority_queue)优化),但是无法处理负环的情况: 比如O(n^3)的Floyd算法:比如Bellman-Fo ...

  3. 基于Groovy应用程序的spring boot

    spring boot CLI 它是使用Spring Boot的最简单的和快速的的方法.他是一个基于Groovy脚本的命令工具.可以按照以下步骤安装次工具: 1.去spring官网下载 http:// ...

  4. Windows下以Local模式调试SparkStreaming的WordCount例子

    1.下载Windows版的NetCat https://eternallybored.org/misc/netcat/ 2.启动NetCat nc -l -p 9999 3.将SAPRK_HOME\c ...

  5. WEB前端:浏览器(IE+Chrome+Firefox)常见兼容问题处理--02

    兼容问题目录 8.IE6不支持固定定位 9.IE6下前面元素浮动,后面元素不浮动后他们之间会有间隙 10.IE6下双边距问题 11.IE67下父级有边框,子级有margin的话会不起作用 12.IE6 ...

  6. 移动应用/APP的测试流程及方法

    1. APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前先 ...

  7. iOS bug调试技巧学习----breakpoint&condition

    给断点添加条件 - (void)testCondition2 { NSArray *array = @[@"我们", @"一起", @"来" ...

  8. iptables实用教程(二):管理链和策略

    概念和原理请参考上一篇文章"iptables实用教程(一)". 本文讲解如果管理iptables中的链和策略. 下面的代码格式中,下划线表示是一个占位符,需要根据实际情况输入参数, ...

  9. myeclipse导入项目时出现Exploded location overlaps an existing deployment错误解决方法

    版权声明:本文为博主原创文章,转载时请注明原文链接. 今天拿别人的项目,在自己的软件上配置,通过tomcat添加项目时出现了 Exploded location overlaps an existin ...

  10. Scrapyd部署爬虫

    Scrapyd部署爬虫 准备工作 安装scrapyd: pip install scrapyd 安装scrapyd-client : pip install scrapyd-client 安装curl ...