欣欣的留言板项目====超级触动的dbUtil实现留言板
留言板管理系统
我的完成效果图:
提交后:
我的留言板基本架构如图:
创建留言板数据库:
刚开始我的前台主页中写留言信息表单:
<body>
<h1>留言板</h1>
<form action="提交后的页面地址" method="post" >
留言者:<input type="text" name="author" />
留言的内容:<input type="text" name="content" rows="100 "cols=""/>
<input type="submit" value="提交信息"/>
</form>
</body>
开始建立后台Java类中层次
我先在我的实体层里写了一个实体类实现增加的实体类如图:
public class MessageBorad {
private int id; private String message; private String author; private Date pastTime; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public String getAuthor() {
return author;
} public void setAuthor(String author) {
this.author = author;
} public Date getPastTime() {
return pastTime;
} public void setPastTime(Date pastTime) {
this.pastTime = pastTime;
} }
写我Dao层里的BaseDao工具类
public class BaseDao{ public static final String driver="com.mysql.jdbc.Driver";
public static final String url="jdbc:mysql://localhost:3306/数据库名字";
public static final String username="root";
public static final String password=""; public Connection con;
public PreparedStatement ps;
public ResultSet rs; static{
Class.forname(driver);
}
public Connection getConnection() throws Exception{
if(con==null||con.isClosed()){
con=DriverManager.getConnection(url,username,password);
}
return con;
}
public void closeResources() throws Exception{
rs.close();
ps.close();
con.close();
}
//执行增删改
public int exeuteUpdate(String sql,Object...Objs) throws Exception{
con=getConnection();
ps=con.prepareStatement(sql);
for(int i=;i<objs.length;i++){
ps.setObject(i+,objs[i]);
}
int count=ps.executeUpdate();
return count;
}
//获取结果集ResultSet
public ResultSet executeQuery(String sql,Object...Objs) throws Exception{
con=getConnection();
ps=con.prepareStatement(sql);
for(int i=;i<objs.length;i++){
ps=setObject(i+,objs[i]);
}
rs=ps.executeQuery();
return rs;
}
public int delete(int id) throws Exception{
return ;
}
}
在Dao层里写一个实现类:
public interface ImessageBorad{
//所有我接口里的方法:
public boolean addMessage(String message,String author,Date paseTime) throws Exception;
//分页的集合方法
public List<Object[]> boradList(int pageIndex,int pageSize) throws Exception;
//分页的总数
public int messageCount() throws Exception;
}
在我的实现包里写一个实现类:
用我的dbutil的时候,加入一个dbutil的jar包,链接数据库也需要jar包,中间的是文件上传的Jar包:
我的实现类的引用:
开始写我的类:
public class ImpMessageBorad implements ImessageBorad {
con=bd.getConection();
DbUtils ut=new DbUtil();
QueryRunner qr=new QueryRunner();
BaseDao bd=new BaseBao();
ArrayListHandler al=new ArrayListHandler();
public boolean addMessage(String boradContent, String author, Date time) throws Exception {
int num=qr.update(con,"insert into message(message,author,pastTime) values (?,?,?)",boradContent,author,DateTime);
if(num>){
flag=true;
}
ut.closeQuietly(con);
}
public List<Object[]> boradList(int pageIndex,int pageSize) throws Exception{
String sql="select * from message limit ?,?";
Object[] parameters={
(pageIndex)';
(pageSize);
};
return qr.query(con,sql,parameters,al); }
public int messageCount() throws Exception{
string sql="select count(1) as co from message";
int num=;
ResultSet rs=bd.executeQuery(sql);
if(rs.next()){
num=rs.getInt("co");
}
return num;
} }
service 就是调用我的Dao层里的方法和实现
所以直接写我的servlet调用我的service里的方法:
//先解决乱码问题:
ImessageBoradService msg=new MessageBoradServiceImp();
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
if(“da”.equest.getParameter("action")){
String boradContent=request.getParameter("name");
String author=request.getParameter("message");
Date dt=new Date();
try{
if(msg.addMessage(boradContent, author, dt)){
request.setAttribute("success", "添加成功");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}else {
request.setAttribute("success", "添加失败");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace(); } }
int pageSize=2;
int pageIndex=0;
if("ww".equals(request.getParameter("ca"))){
String index=request.getParameter("pageIndex");
System.out.println(index);
if(index.equals("0")){
pageIndex=pageIndex+pageSize; }else{
System.out.println(2);
int in=Integer.parseInt(index);
pageIndex=in+pageSize;
System.out.println(3);
}
} if("ws".equals(request.getParameter("ca"))){
String index=request.getParameter("pageIndex");
System.out.println(index);
if(index.equals("0")){ pageIndex=0;
}
else {
int in=Integer.parseInt(index); pageIndex=in-pageSize;
} }
request.setAttribute("pageIndex", pageIndex);
try {
request.setAttribute("list", msg.boradList(pageIndex, pageSize)) ;
request.getRequestDispatcher("/index.jsp").forward(request, response);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
在我的前台页面中form表单:
<h1>留言板:</h1>
<br>
<%
List<Object[]> list=(List<Object[]>)request.getAttribute("list"); for(Object[] object:list){ %>
<p style="backcolor:red">作者:<%=object[2] %> <%=object[0] %>楼</p>
<lable>内容</lable>
<label><%=object[1] %></label>
<p> <%=object[3] %></p>
<%
} %> <br>
<a href="MessageServlet?ca=ww&&pageIndex=${pageIndex}">下一页</a>
<a href="MessageServlet?ca=ws&&pageIndex=${pageIndex}">上一页</a> <form action="MessageServlet?action=da" method="post"> 请输入你的姓名:<br><input type="text" name="name"><br> 留言内容:<br><textarea rows="15" cols="20" name="message"></textarea><br><br>
<input type="submit" value="提交信息"><br>
</form>
<label style="color:red">${success }</label>
我还在这里 奋斗着 你在哪里 在奋斗吗 地狱的镰刀
欣欣的留言板项目====超级触动的dbUtil实现留言板的更多相关文章
- vue+egg.js+mysql一个前后端分离留言板项目
一.前序 我相信每个人前端搬运工和我想法都是一样的,都有一个做全栈的梦,无奈面对众多的后台语言,却不从下手,今天由我来带你们潜入全栈的门槛,注意是门槛.能不能学的会后面的内容全靠坚持了. 我今天主要做 ...
- ARM核心板_迅为imx6工控核心板_核心板中的小新潮
ARM核心板_迅为imx6工控核心板_核心板中的小新潮核心板参数 尺寸 51mm*61mm CPU Freescale Cortex-A9 四核 i.MX6Q,主频 1.2 GHz 内存 2GB DD ...
- [安卓开发板]迅为IMX6 四核Android开发板
工业级核心板-Android开发板 10层高速PCB设计,充分保证电磁兼容 处理器:开发板默认是四核商业扩展级芯片,可根据用户需求更换单核.双核.工业级.汽车级处理器,批量更省成本. 扩展引脚:320 ...
- asp.net留言板项目源代码下载
HoverTree是一个asp.net开源项目,实现了留言板功能. 前台体验网址:http://hovertree.com/guestbook/ 后台请下载源代码安装. 默认用户名:keleyi 默认 ...
- Django入门3 简单留言板项目案例及mysql驱动的安装配置
新建jangostart项目 使用manager.py新建app即单独的应用 创建一个message应用 manage.py@djangostart > startapp message 如果a ...
- Java基础重点知识之欣欣向然
题目: 第一题:二重循环: public class Text01 { //完成歌曲排序的效果 public static void main(String[] args) { String[] zi ...
- Asp.net mvc5开源项目"超级冷笑话"
业务时间做了个小网站,超级冷笑话,地址:http://www.superjokes.cn/ 开发技术: asp.net mvc5 +SQLServer2012 ORM:NPoco 用了简单的三层结构 ...
- Android Studio 第一次新建Android Gradle项目超级慢的解决方案
大家有什么问题,欢迎问我! 注:Android Studio在第一次新建一个Gradle项目时需要下载Gradle,所以启动很慢(Gradle-bin大约三十几兆),所以我们应该事先帮他下载好. 首先 ...
- vue项目中使用bpmn-番外篇(留言问题总结)
前情提要 “vue项目中使用bpmn-xxxx”系列的七篇文章在上周已经更新完成,发表后,有小伙伴在使用时提出了一些文章中没有讲到的问题,此篇作为番外篇,将大家提出的共性问题解答一下,欢迎大家支持原创 ...
随机推荐
- Windows下安装Redis服务(zip)
1.官方没有 Windows版本的 Redis,官网介绍: Redis项目不正式支持Windows.但是,微软开发并维护了针对Win64的Windows版本. 2.Windows版本下载地址:http ...
- yolov3源码分析keras(二)损失函数计算
一.前言 损失函数计算主要分析两部分一部分是yolo_head函数的分析另一部分为ignore_mask的生成的分析. 二.重要细节分析 2.1损失函数计算具体代码及部分分析 def yolo_los ...
- dubbo核心流程一览
整体设计 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI. Serv ...
- Ubuntu系统下移动宽带自动启用设置
对于需要自动移动联网的Ubuntu系统(安装了4G移动手机卡的),步骤如下: . 在终端编辑自启动文件:sudo gedit /etc/rc.local 2. 在最后一句exit 0的上⾯面加上如下指 ...
- POJ 2253 Frogger ,poj3660Cow Contest(判断绝对顺序)(最短路,floyed)
POJ 2253 Frogger题目意思就是求所有路径中最大路径中的最小值. #include<iostream> #include<cstdio> #include<s ...
- es put mapping
fd dg public Map<String, Map<String, String>> javaBeanToMapping(Object instance, List< ...
- 2016424王启元 Exp5 msf基础应用
成功实现的有: 一个主动攻击实践,ms08_067 一个针对浏览器的攻击,ms11_050 一个针对客户端的攻击,Adobe(在实现这一步骤的时候有点小瑕疵,就是Adobe的版本问题换了三四个才成功) ...
- Kettle 中生成随机数 或者GUID唯一标识符
添加步骤 "生成随机数" 英文名字叫 "Generate Random Value" 如下图..选择UUID..
- (转)nmon和nmon analyser的下载和使用
原文:https://blog.csdn.net/a7442358/article/details/50186283 nmon 工具可以为 AIX 和 Linux 性能专家提供监视和分析性能数据的功能 ...
- eclipse中springsource-tool-suite(sts)插件安装教程
插件的下载参照:http://www.cnblogs.com/jepson6669/p/8540157.html 用过的eclipse不能安装成功,需要重新解压新的才能安装成功,不知道为什么? 解压上 ...