开发环境
开发语言为Java,开发环境Eclipse或者IDEA都可以。数据库采用:MySQL。运行主程序,或者执行打开JAR文件即可以运行本程序。
系统框架
利用JDK自带的SWING框架开发,不需要安装第三方JAR包。MySQL数据库,纯窗体模式,直接运行Main文件即可以。同时带有详细得设计文档
系统主要功能
基于C/S日记本用Java语言编写,是一个简单的窗体程序,采用swing框架编写,系统涉及到文件、UI、数据库操作、事件等操作。系统的主要功能包括:
日记功能
1 写日记:运行Main.java文件后,进入程序的主界面。
2 设置日志的分类:对日志分类进行增删改操作
3 根据关键字搜索匹配的日记信息
4 按开始日期---截止日期模式搜索覆盖条件的日志信息
5 日记信息批量导出成EXCEL格式,和文本形式
6 日记修改:选中一条日记,对日记信息进行更新
7 日记删除:选中一条日记信息,进行日记的删除。删除前提醒用户是否确认要删除
提醒功能
8 指定时间的闹钟提醒
实现效果
关键代码
package com.dao;
import java.io.File;
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.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import com.information.Information;
import com.windows.SearchFrame;
public class Dao {
//数据库驱动路径
private static final String driver="org.apache.derby.jdbc.EmbeddedDriver";
private static String url="jdbc:derby:db_Remember";
private static Dao dao=null;
private static java.sql.Connection conn=null;
private Statement stm;
private ResultSet rs;
PreparedStatement pst;
private List<Information> informations=new ArrayList<Information>();
private Information information=new Information();
//获取Dao实例
public static Dao getDao(){
if(dao==null)
dao=new Dao();
return dao;
}
//设置数据库文件夹生成的位置
private void setDBSystemDir(){
//用System类获取程序的根目录
String userHomeDir=System.getProperty("user.dir",".");
String systemDir=userHomeDir+"/DATA";
//设置javaDB的derby.system.home属性,也就是数据库文件夹存放的位置。
System.setProperty("derby.system.home",systemDir);
}
//判断数据库是否已存在
private boolean db_Exists(){
boolean bExists=false;
String userHomeDir=System.getProperty("user.dir",".");
String systemDir=userHomeDir+"/DATA";
File dbFileDir=new File(systemDir);
String[] list=dbFileDir.list();
if(list.length>1){
bExists=true;
System.out.println("数据库已经建立");
}
dbFileDir=null;
list=null;
return bExists;
}
//用于创建数据库表
public void createTable(){
//创建remember表
String createRemember="create table tb_Remember(title varchar(200) primary key,content varchar(8000),time timestamp,tipsdate timestamp,type int)";
try{//用于向数据库发送sql语句的statement对象。
stm=conn.createStatement();
stm.execute(createRemember);
stm.close();//释放数据库资源
}catch(SQLException e){
e.printStackTrace();
}
}
//添加单条信息
public void addInformation(Information information){
String sql="insert into tb_Remember values(?,?,?,?,?)";
try{//创建预编译的sql语句
pst=conn.prepareStatement(sql);
pst.setString(1, information.getTitle());
pst.setString(2, information.getContent());
pst.setTimestamp(3, information.getTime());
pst.setTimestamp(4, information.getTipsdate());
pst.setInt(5, information.getType());
pst.executeUpdate();
System.out.println("插入单条数据成功..........................................");
//JOptionPane.showMessageDialog(SearchFrame.searchframe, "插入信息成功");
pst.close();
}catch(SQLException e){
System.out.println("插入单条数据失败????????????????????????");
JOptionPane.showMessageDialog(SearchFrame.searchframe, "插入信息[ "+information.getTitle()+" ]失败");
e.printStackTrace();
}
}
//更新单条信息
public void updateInformation(Information informationparameter){
String sql="update tb_Remember set content=?,tipsdate=?,type=? where title=?";
try{//创建预编译的sql语句
pst=conn.prepareStatement(sql);
pst.setString(1, informationparameter.getContent());
pst.setTimestamp(2, informationparameter.getTipsdate());
pst.setInt(3, informationparameter.getType());
pst.setString(4, informationparameter.getTitle());
pst.executeUpdate();
System.out.println("更新单条数据成功..........................................");
JOptionPane.showMessageDialog(SearchFrame.searchframe, "更新信息成功");
pst.close();
}catch(SQLException e){
System.out.println("更新单条数据失败????????????????????????");
JOptionPane.showMessageDialog(SearchFrame.searchframe, "更新信息[ "+informationparameter.getTitle()+" ]失败");
e.printStackTrace();
}
}
//删除单条信息
public void deleteInformation(String title){
String sql="delete from tb_Remember where title=?";
try{//创建预编译的sql语句
pst=conn.prepareStatement(sql);
pst.setString(1, title);
pst.executeUpdate();
System.out.println("删除单条数据成功..........................................");
JOptionPane.showMessageDialog(SearchFrame.searchframe, "删除信息成功");
pst.close();
}catch(SQLException e){
System.out.println("删除单条数据失败????????????????????????");
JOptionPane.showMessageDialog(SearchFrame.searchframe, "删除信息[ "+title+" ]失败");
e.printStackTrace();
}
}
//批量删除信息
public void deleteInformationLike(List<Information> list){
String sql="delete from tb_Remember where title=?";
int i=0;
try{//创建预编译的sql语句
pst=conn.prepareStatement(sql);
for(;i<list.size();i++){
pst.setString(1, list.get(i).getTitle());
pst.executeUpdate();
}
System.out.println("批量删除信息成功..........................................");
JOptionPane.showMessageDialog(SearchFrame.searchframe, "批量删除信息成功");
pst.close();
}catch(SQLException e){
System.out.println("批量删除信息失败????????????????????????");
JOptionPane.showMessageDialog(SearchFrame.searchframe, "批量删除信息[ "+list.get(i).getTitle()+" ]失败");
e.printStackTrace();
}
}
//查询所有数据
public List<Information> getInformations(){
informations.clear();
try{
String sql="select * from tb_Remember order by type desc";
stm=conn.createStatement();
rs=stm.executeQuery(sql);
while(rs.next()){
Information i = new Information();
i.setTitle(rs.getString(1));
i.setContent(rs.getString(2));
i.setTime(rs.getTimestamp(3));
i.setTipsdate(rs.getTimestamp(4));
i.setType(rs.getInt(5));
informations.add(i);
}
System.out.println("查询所有数据成功..........................................");
rs.close();
stm.close();
}catch(SQLException e){
System.out.println("查询所有数据失败????????????????????????");
e.printStackTrace();
}
return informations;
}
//查询到期提示数据
public List<Information> getTipsInformations(Timestamp tipsdate){
informations.clear();
try{
String sql="select * from tb_Remember";
stm=conn.createStatement();
rs=stm.executeQuery(sql);
while(rs.next()){
if(rs.getTimestamp(4)==null || rs.getTimestamp(4).compareTo(tipsdate)>0)
continue;
Information i = new Information();
i.setTitle(rs.getString(1));
i.setContent(rs.getString(2));
i.setTime(rs.getTimestamp(3));
i.setTipsdate(rs.getTimestamp(4));
i.setType(rs.getInt(5));
informations.add(i);
}
System.out.println("查询所有数据成功..........................................");
rs.close();
stm.close();
}catch(SQLException e){
System.out.println("查询所有数据失败????????????????????????");
e.printStackTrace();
}
return informations;
}
//模糊查询
public List<Information> getInformationsLike(String title,Timestamp datefrom,Timestamp dateto,int type){
informations.clear();
try{
String sql = "select * from tb_Remember";
if(!title.trim().equals("") && type!=0)
sql = sql + " where title like '%"+title+"%' and type = " + type;
if(!title.trim().equals("") && type==0)//0为默认的【未定义】
sql = sql + " where title like '%"+title+"%'";
if(title.trim().equals("") && type!=0)
sql = sql + " where type = " + type;
//if(title.trim().equals("") && type==0)
sql = sql + " order by time desc";
stm=conn.createStatement();
rs=stm.executeQuery(sql);
while(rs.next()){
//数据库中的时间在参数时间1以前或参数时间2以后则跳过
if(datefrom != null && rs.getTimestamp(3).compareTo(datefrom)<0){
continue;
}
if(dateto != null && rs.getTimestamp(3).compareTo(dateto)>0){
continue;
}
Information i = new Information();
i.setTitle(rs.getString(1));
i.setContent(rs.getString(2));
i.setTime(rs.getTimestamp(3));
i.setTipsdate(rs.getTimestamp(4));
i.setType(rs.getInt(5));
informations.add(i);
}
System.out.println("条件查询成功..........................................");
rs.close();
stm.close();
}catch(SQLException e){
System.out.println("条件查询失败????????????????????????");
e.printStackTrace();
}
return informations;
}
//查询单条数据
public Information getInformation(String title){
information.clear();
try{
String sql="select * from tb_Remember where title=?";
pst=conn.prepareStatement(sql);
pst.setString(1, title);
rs=pst.executeQuery();
if(rs.next()){
information.setTitle(rs.getString(1));
information.setContent(rs.getString(2));
information.setTime(rs.getTimestamp(3));
information.setTipsdate(rs.getTimestamp(4));
information.setType(rs.getInt(5));
System.out.println("查询单条数据成功..........................................");
}
rs.close();
pst.close();
}catch(SQLException e){
System.out.println("查询单条数据失败????????????????????????");
e.printStackTrace();
}
return information;
}
private Dao(){
try{
//显式地加载 JDBC 驱动程序
//设置数据库文件夹生成的位置
setDBSystemDir();
Class.forName(driver);
if(!db_Exists()){//如果不存在
//DriverManager 试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序。
//create=true会创建新的数据库
//如果javaDB数据库已经运行,那么在执行此句时会抛出异常。
conn=DriverManager.getConnection(url + ";create=true");
createTable();//创建数据库表。
}else
//如果javaDB数据库已经运行,那么在执行此句时会抛出异常。
conn=DriverManager.getConnection(url);
}catch(Exception e){
e.printStackTrace();
//null指定所属窗口为默认窗口
JOptionPane.showMessageDialog(null,"数据库已经启动,请检查本软件是否已经运行");
System.exit(0);
}
}
public static void main(String [] args){
Dao dao=new Dao();
Information information = new Information();
/*测试插入单条数据
information.setTitle("testtitle2");
information.setContent("testcontent");
Timestamp time = new Timestamp(System.currentTimeMillis());
information.setTime(time);
information.setTipsdate(time);
information.setType(1);
dao.addInformation(information);*/
/*测试查询所有数据
List<Information> informations=new ArrayList<Information>();
informations=dao.getInformations();
for(Information i : informations){
System.out.println("title="+i.getTitle());
System.out.println("content="+i.getContent());
System.out.println("time="+i.getTime());
System.out.println("tipsdate="+i.getTipsdate());
System.out.println("type="+i.getType());
}
System.out.println("size="+informations.size());*/
/*测试到期提示数据
List<Information> informations=new ArrayList<Information>();
Timestamp time = new Timestamp(System.currentTimeMillis());
information.setTime(time);
informations=dao.getTipsInformations(time);
for(Information i : informations){
System.out.println("title="+i.getTitle());
System.out.println("content="+i.getContent());
System.out.println("time="+i.getTime());
System.out.println("tipsdate="+i.getTipsdate());
System.out.println("type="+i.getType());
}
System.out.println("size="+informations.size());*/
/*测试查询单条数据
String title="testtitle2";
information = dao.getInformation(title);
System.out.println("title="+information.getTitle());
System.out.println("content="+information.getContent());
System.out.println("time="+information.getTime());
System.out.println("tipsdate="+information.getTipsdate());
System.out.println("type="+information.getType());*/
/*测试更新单条数据
information = dao.getInformation("1");
information.setContent("更新");
information.setType(2);
dao.updateInformation(information);
System.out.println("title="+information.getTitle());
System.out.println("content="+information.getContent());
System.out.println("time="+information.getTime());
System.out.println("tipsdate="+information.getTipsdate());
System.out.println("type="+information.getType());*/
/*测试批量添加数据*/
for(int i=1000;i<50000;i++){
information.setTitle("测试数据"+i);
information.setContent("testcontent");
Timestamp time = new Timestamp(System.currentTimeMillis());
information.setTime(time);
information.setTipsdate(time);
information.setType(i%4);
dao.addInformation(information);
}
/*测试删除单条数据
dao.deleteInformation("测试数据2");*/
/*测试条件查询
List<Information> informations=new ArrayList<Information>();
informations=dao.getInformationsLike("1",java.sql.Timestamp.valueOf("2010-11-10 00:00:00.0"),java.sql.Timestamp.valueOf("2010-11-13 00:00:00.0"),0);
for(Information i : informations){
System.out.println("title="+i.getTitle());
System.out.println("content="+i.getContent());
System.out.println("time="+i.getTime());
System.out.println("tipsdate="+i.getTipsdate());
System.out.println("type="+i.getType());
}
System.out.println("size="+informations.size());*/
/*批量删除信息
dao.deleteInformationLike(informations);*/
}
}