背景
父类 :BaseDao.java 提供 所有表格都要执行的共同操作方法:增删改查,这样减少代码的重复
接口: NewsDao.java 为一个表格对应的接口,这样降低代码的耦合性
实现类: NewsDaoImpl.java 实现接口
数据表格对应的普通java类: news.java, 通过 封装 set/get方法 调用属性、和赋值
连接数据库的方法:直接写在父类业务类中;
news.java
package com.kgc.pojo;
import java.util.Date;
public class News {
private int id;
private int categoryId;
private String title;
private String summary;
private String content;
private String picPath;
private String author;
private Date createDate;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getCategoryId() {
return categoryId;
}
public void setCategoryId(int categoryId) {
this.categoryId = categoryId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPicPath() {
return picPath;
}
public void setPicPath(String picPath) {
this.picPath = picPath;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
}
BaseDao.java
package com.kgc.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BaseDao {
//实现增删改查的功能 以及连接 和释放资源
Connection cnt=null;
PreparedStatement ps=null;
ResultSet rs=null;
//连接有3种方式
public boolean getConnection(){
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/kgcnews";
String username="root";
String password="root";
try {
Class.forName(driver);
cnt=DriverManager.getConnection(url,username,password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
//关闭资源
public boolean closeResource(){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(cnt!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return true;
}
//增删改
public int executeUpdate(String sql ,Object [] params){
int updateRows=0;
if(this.getConnection()){
//获得sql语句
try {
ps=cnt.prepareStatement(sql);
//给占位符的赋值
for(int i=0;i<params.length;i++){
ps.setObject(i+1,params[i] );
}
//执行 增删改,返回影响的行数
updateRows=ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return updateRows;
}
//查询 全部信息 或者指定部分信息
public ResultSet ExecuteQuery(String sql ,Object [] params){
if(this.getConnection()){
try {
ps=cnt.prepareStatement(sql);
//给占位符赋值
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
// 执行查询,返回值是ResultSet型的
rs=ps.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return rs;
}
}
NewsDao.java
package com.kgc.dao;
import java.util.Date;
import com.kgc.pojo.News;
//接口类
public interface NewsDao {
//查询全部信息
public void getList();
//查询部分信息
public void getNewsTitle(News news);
//增
public void add(News news);
//public void add(int id,int categoryId,String title,
//String summary,String content,Date createDate);
//删
public void delete(News news);
//改
public void update(News news);
}
NewsDaoImpl.java
package com.kgc.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import com.kgc.dao.BaseDao;
import com.kgc.dao.NewsDao;
import com.kgc.pojo.News;
public class NewsDaoImpl extends BaseDao implements NewsDao{
ResultSet rs=null;
Connection cnt=null;
PreparedStatement ps=null;
//查询全部信息
@Override
public void getList() {
// TODO Auto-generated method stub
String sql="select id, categoryId,title,summary, content,picPath,author,createDate,modifyDate from news_detail";
//初始化 数组 ,避免空指针
Object[] params={};
rs=this.ExecuteQuery(sql, params);
//在控制台输出 rs的结果集
try {
while(rs.next()){
int id=rs.getInt(1);
int categoryId=rs.getInt(2);
String title=rs.getString("title");
String summary=rs.getString(4);
String content=rs.getString(5);
String picPath=rs.getString(6);
String author=rs.getString(7);
Date createDate=rs.getDate(8);
Date modifyDate=rs.getDate(9);
System.out.println(id+"\t"+categoryId+"\t"+title+"\t"+summary+"\t"+content+"\t"+picPath+"\t"+author+"\t"+createDate+"\t"+modifyDate );
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.closeResource();
}
}
//查询部分信息
@Override
public void getNewsTitle(News news) {
// TODO Auto-generated method stub
//返回值是ResultSet类型
String sql="select id, categoryId,title,summary, content,picPath,author,createDate,modifyDate from news_detail where title like ?";
Object [] params={news.getTitle()};
rs=this.ExecuteQuery(sql, params);
//在控制台遍历出 结果集
try {
while(rs.next()){
int id=rs.getInt(1);
int categoryId=rs.getInt(2);
String title1=rs.getString("title");
String summary=rs.getString(4);
String content=rs.getString(5);
String picPath=rs.getString(6);
String author=rs.getString(7);
Date createDate=rs.getDate(8);
Date modifyDate=rs.getDate(9);
System.out.println(id+"\t"+categoryId+"\t"+title1+"\t"+summary+"\t"+content+"\t"+picPath+"\t"+author+"\t"+createDate+"\t"+modifyDate );
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.closeResource();
}
}
//增
@Override
public void add(News news) {
// TODO Auto-generated method stub
String sql="insert into news_detail(id, categoryId, title, summary,content, createDate) values(?,?,?,?,?,?)";
//Object [] params={id, categoryId, title, summary,content, createDate};
Object[] params={news.getId(),news.getCategoryId(),news.getTitle(),news.getSummary()
,news.getContent(),news.getCreateDate()};
int i=this.executeUpdate(sql, params);
if(i>0){
System.out.println("添加成功");
}
}
//删除
@Override
public void delete(News news) {
// TODO Auto-generated method stub
String sql="delete from news_detail where id=?";
Object [] params={news.getId()};
int i=this.executeUpdate(sql, params);
if(i>0){
System.out.println("删除成功");
}
}
//修改
@Override
public void update(News news) {
// TODO Auto-generated method stub
String sql="update news_detail set title=? where id=?";
Object [] params={news.getTitle(),news.getId()};
int i=this.executeUpdate(sql, params);
if(i>0){
System.out.println("修改成功");
}
}
public static void main(String[] args) {
//向上转型
NewsDao newsDao=new NewsDaoImpl();
News news=new News();
//newsDao.add(7, 1, "a", "b", "c", new Timestamp(new Date().getTime()));
//上面是通过 添加字段来赋值,下面是通过 创建表格对应的java普通类,通过 set get方法进行赋值
//测试 :增
/*
news.setId(8);
news.setCategoryId(2);
news.setTitle("a");
news.setSummary("su");
news.setContent("con");
news.setCreateDate(new Timestamp(new Date().getTime()));
newsDao.add(news);*/
//newsDao.delete(6);
//删
/*news.setId(8);
newsDao.delete(news);
*/
//改
/*news.setId(1);
news.setTitle("xxxinxin");
newsDao.update(news);*/
//查全部
//newsDao.getList();
//查部分信息
news.setTitle("a");
newsDao.getNewsTitle(news);
}
}