新人报道!
第一次写博客,也不知道写点啥,正好最近写了个不大不小的程序(一个基于控制台实现的留言板小程序),刚上大二的我觉得有点小成就感,在这里跟大家分享一下。其中也有点小瑕疵,还请路过的各位大神多多指教啊!不多说了,请看下面的代码。
这个类中实现了数据库的连接和关闭方法,不过其中需要注意的一点就是在定义username和password的时候一定要注意是自己数据库的用户名和密码哦,不然会编译出错的。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/*
* 数据库连接和关闭类
*/
public class BaseDao {
//实现数据库的连接功能
public static Connection getConnection() throws SQLException{
Connection con=null;
// PreparedStatement pstmt=null;
// ResultSet rs=null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//通过DriverMannger获取数据库连接
String url="jdbc:mysql://localhost:3306/tb_message";
String username="root";
String passward="zcy01142406";
con=DriverManager.getConnection(url,username,passward);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
//实现数据库的关闭功能
public static void closeAll(ResultSet rs,Statement stmt,Connection con) {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con!=null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
下面的这个类呢就是封装了你留言的内容
import java.time.LocalDateTime;
/*
* 留言实体类
*/
public class Mesage {
//创建特有属性
private int id;
private String username;
private String title;
private String contents;
private String createTime;
public Mesage() {
}
//自动生成set,get方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public Mesage(String username,String title,String contents,String createTime) {
this.username=username;
this.title=title;
this.contents=contents;
this.createTime=createTime;
}
}
下面这个类是用来定义调用sql语句的接口
/*
* mysql语句抽象类
*/
public interface MessageDao{
//定义查询语句的抽象方法
public String selSql();
//定义添加语句的抽象方法
public String upSql();
}
这个类呢是实现sql语句的
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.util.Scanner;
/*
* 留言实现类
*/
//注意:类一般是先继承再实现
public class MessageDaoMysql extends BaseDao implements MessageDao {
public int addData(String username,String title,String contents,String createTime) throws SQLException {
int flag=0;
Connection con=this.getConnection();
int i=0;
try {
PreparedStatement pstmt=null;
pstmt.setString(1,username);
pstmt.setString(2,title);
pstmt.setString(3,contents);
pstmt.setString(4,createTime);
//pstmt.execute();
i=pstmt.executeUpdate();
if(i==1) {
System.out.println("留言成功");
}else {
System.out.println("留言失败");
}
catch(SQLException e) {
e.printStackTrace();
}finally{
this.closeAll(null,pstmt,con);
}
return flag;
}
public String upSql(){
String sql="insert into message(username,title,contents,createTime)values(?,?,?,?)"; //注意问号之间要以逗号隔开
return sql;
}
public int selectData() throws SQLException {
int flag=0;
Mesage m=new Mesage();
Connection con=BaseDao.getConnection();
ResultSet rs=null;
PreparedStatement pstmt=null;
try {
pstmt=con.prepareStatement(this.selSql());
rs=pstmt.executeQuery();
// System.out.println("id\tusername\ttitle\tcontents\tcreateTime");
while(rs.next()) {
// System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getString(4)+"\t"+rs.getString(5));
System.out.println("留言人:"+rs.getString(2)+" \t"+"留言时间:"+rs.getString(5));
System.out.println("留言标题:"+rs.getString(3));
System.out.println("留言内容:"+rs.getString(4));
System.out.println();
}
}catch(SQLException e) {
e.printStackTrace();
}finally{
this.closeAll(null,pstmt,con);
}
return flag;
public String selSql() {
String sql="select*from message";
return sql;
}
}
这个类是用来打印菜单栏和让用户来留言的
import java.sql.SQLException;
import java.util.Scanner;
/*
* 留言业务类
*/
public class MessageService {
Scanner sc=new Scanner(System.in);
public MessageService(){
//创建Message类的对象
Mesage ms =new Mesage();
MessageDaoMysql mdm=new MessageDaoMysql();
int count;
//留言板登陆
while(true) {
System.out.println("----欢迎登陆留言版系统---");
System.out.println("-------主菜单-------");
System.out.println(" 1.查询留言 ");
System.out.println(" 2.添加留言 ");
System.out.println(" 3.退出系统 ");
System.out.print("请选择:");
count=sc.nextInt();
//判断
if(count==1) {
try {
mdm.selectData();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(count==2) {
System.out.print("请输入留言人姓名:");
ms.setUsername(sc.next());
System.out.print("请输入留言标题:");
ms.setTitle(sc.next());
System.out.print("请输入留言内容:");
ms.setContents(sc.next());
System.out.print("请输入留言时间");
ms.setCreateTime(sc.next());
try {
mdm.addData(ms.getUsername(),ms.getTitle(),ms.getContents(),ms.getCreateTime());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(count==3) {
System.out.println("谢谢使用,再见!");
break;
}
}
}
}
下面这个类呢就简单啦,就是调用各种类来输出信息的。
import java.util.Scanner;
/*
* 测试类
*/
public class Test {
public static void main(String[] args) {
//创建输入流
Scanner sc=new Scanner(System.in);
//输出菜单
MessageService ms=new MessageService();
//调用
MessageDaoMysql mdm=new MessageDaoMysql();
sc.close();
}
}
嗯,根据以上代码觉可以简单实现一个基于控制台的留言板啦,不过有个问题我还不太懂,希望路过的各位大神可以帮我看看。
this.closeAll(null,pstmt,con);
就是在调用关闭数据库方法的时候,第一个参数为什么是null而不是rs呢?
以上,就是我关于留言板这个小程序的心得啦,希望看到的你们多来找我交流交流啊!(▽)