一、JavaBean简介
其实就是一个java类,用来封装业务逻辑和封装数据。
二、封装数据
在参数多的时候,一一写出太麻烦,这时候就可以创建个实体类,传一个实体类对象过去,把数据都赋在这个对象的属性里面。一般数据中的表都是有相应的实体类,这样实体类对象里面的属性和表中的数据可以一一对应。
所以这里又可以进一步优化接口的其实现类,将接口里面的参数都换为对象并修改其实现类。
接口修改后代码如下:
package cn.kgc.dao;
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.util.Date;
import cn.kgc.pojo.News;
public interface NewsDao {
// 增加新闻信息
public void addNews(News news);
// 删除特定新闻
public void deleteNews(News news);
// 修改特定新闻的标题
public void updateNews(News news);
// 查询全部新闻信息
public void getAllNews();
// 查询特定的新闻id、标题
public void getNewsByTitle(News news);
// 通过数据源获取连接,然后进行数据库操作来查询新闻
public void getAllNewsByDS();
}
实现类代码如下:
package cn.kgc.dao.implement;
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.util.Date;
import cn.kgc.dao.BaseDao;
import cn.kgc.dao.NewsDao;
import cn.kgc.pojo.News;
// 使用PreparedStatement
public class NewsDaoImpl extends BaseDao implements NewsDao {
// 增加新闻信息
public void addNews(News news){
String sql = "INSERT INTO news_detail(id, categoryId, title, " +
"summary,content,author, createDate) VALUES(?,?,?,?,?,?,?);";
Object[] params = {news.getId(), news.getCategoryId(), news.getTitle(), news.getSummary(),news.getContent(), news.getAuthor(),news.getCreateDate()};
int i = this.executeUpdate(sql, params);
if (i > 0) {
System.out.println("插入资源成功!");
}
this.closeSource();
}
// 删除特定新闻
public void deleteNews(News news){
String sql = "DELETE FROM news_detail WHERE id=?";
Object[] params = {news.getId()};
int i = this.executeUpdate(sql, params);
if (i > 0){
System.out.println("删除新闻信息成功");
}
this.closeSource();
}
// 修改特定新闻的标题
public void updateNews(News news){
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("修改新闻信息成功");
}
this.closeSource();
}
// 查询全部新闻信息
public void getAllNews(){
String sql = "SELECT id, title, author,createDate FROM news_detail";
Object[] params = {};
ResultSet rs = this.executeSQL(sql,params);
try {
while(rs.next()){
int id = rs.getInt("id");
String newsTitle = rs.getString("title");
String author = rs.getString("author");
Timestamp createdate = rs.getTimestamp("createDate");
System.out.println(id + " " + newsTitle + " " + author + " " + createdate);
}
} catch (SQLException e) {
e.printStackTrace();
}
this.closeSource();
}
// 查询特定的新闻id、标题
public void getNewsByTitle(News news){
try {
String sql = "SELECT id, title FROM news_detail where title=?";
Object[] params = {news.getTitle()};
ResultSet rs = this.executeSQL(sql,params);
while(rs.next()){
int id = rs.getInt("id");
String newsTitle = rs.getString("title");
System.out.println(id + " " + newsTitle);
}
}catch (SQLException e) {
e.printStackTrace();
} finally {
this.closeSource();
}
}
public static void main(String[] args) {
NewsDao dao = new NewsDaoImpl();
// dao.getAllNewsByDS();
News news = new News();
news.setId(88);
news.setAuthor("哈哈");
news.setCategoryId(1);
news.setContent("不知道啊");
news.setCreateDate(new Date());
news.setSummary("kankan ba ");
news.setTitle("要死了");
dao.addNews(news);
dao.getAllNews();
}
// 通过数据源获取的连接去执行查询
public void getAllNewsByDS() {
String sql = "SELECT id, title, author,createDate FROM news_detail";
Object[] params = {};
ResultSet rs = this.executeSQL2(sql,params);
try {
while(rs.next()){
int id = rs.getInt("id");
String newsTitle = rs.getString("title");
String author = rs.getString("author");
Timestamp createdate = rs.getTimestamp("createDate");
System.out.println(id + " " + newsTitle + " " + author + " " + createdate);
}
} catch (SQLException e) {
e.printStackTrace();
}
this.closeSource();
}
}
总上,JavaBean封装数据就是把以前零散的参数用一个实体类对象传递过去。每一个实体类在创建的时候对应着数据库中的一个表。这样比以前更方便。
三、bug汇总
3.1我修改完在打算插入数据的时候出现了空值异常,原因在于:
1、配置文件没有写
2、在使用文件管理参数的类中Properties类对象没有实例化。