1.准备工作,首先要有一个数据库,在数据库里新建一个表,用来操作id要设置为自动增长列,否则在插入操作无法成功
在MyEclipse中新建一个Web Progect工程
在src目录下建立entity包,dao包
在WebRoot/WebInfo/lib/导入sqljdbc.jar包(用于对数据库进行操作)
2.entity包,用于操作数据库 (这部分用到的成员变量最好直接通过数据库来直接复制,以免存在漏泄,写错单词等低级错误,其他的就是简单的get和set方法了)
- package entity;
-
- public class UserInfo {
- private int id;
- private String user_name;
- private String user_sex;
- private int user_age;
- private String user_hobby;
- private String user_city;
- private String mtext;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getUser_name() {
- return user_name;
- }
- public void setUser_name(String user_name) {
- this.user_name = user_name;
- }
- public String getUser_sex() {
- return user_sex;
- }
- public void setUser_sex(String user_sex) {
- this.user_sex = user_sex;
- }
- public int getUser_age() {
- return user_age;
- }
- public void setUser_age(int user_age) {
- this.user_age = user_age;
- }
- public String getUser_hobby() {
- return user_hobby;
- }
- public void setUser_hobby(String user_hobby) {
- this.user_hobby = user_hobby;
- }
- public String getUser_city() {
- return user_city;
- }
- public void setUser_city(String user_city) {
- this.user_city = user_city;
- }
- public String getMtext() {
- return mtext;
- }
- public void setMtext(String mtext) {
- this.mtext = mtext;
- }
- }
Dao包下用于对数据库的操作数据库
(1)
BaseDao.Java链接数据库(其中的close方法中依次关闭了结果集,操作句柄,链接)
- package dao;
-
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.Statement;
-
- public class BaseDao {
- public static Connection getConnection()throws Exception{
- Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
- String url="jdbc:sqlserver://127.0.0.1:1433;database=mydb";
- return DriverManager.getConnection(url, "sa", "sa");
- }
-
- public static void close(ResultSet rs,Statement sta,Connection con)throws Exception{
- if(rs!=null){
- //关闭结果集
- rs.close();
- }
- if(sta!=null){
- //关闭操作句柄
- sta.close();
- }
- if(con!=null){
- //关闭链接
- con.close();
- }
- }
- }
UserinfoDao.java
是数据库的增删改查的方法
- package dao;
-
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.util.ArrayList;
-
- import entity.UserInfo;
-
- public class UserInfoDao {
-
- //查询所有(查)
- public ArrayList findAll(){
- Connection con=null;
- PreparedStatement psta=null;
- ResultSet rs=null;
- ArrayList list=new ArrayList();
- String sql="select * from userinfo";
- try{
- con=BaseDao.getConnection();
- psta=con.prepareStatement(sql);
- rs=psta.executeQuery();
- while(rs.next()){
- UserInfo obj=new UserInfo();
- obj.setId(rs.getInt(1));
- obj.setUser_name(rs.getString(2));
- obj.setUser_sex(rs.getString(3));
- obj.setUser_age(rs.getInt(4));
- obj.setUser_hobby(rs.getString(5));
- obj.setUser_city(rs.getString(6));
- obj.setMtext(rs.getString(7));
- list.add(obj);
- }
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- try{
- BaseDao.close(rs, psta, con);
- }catch(Exception e){
- e.printStackTrace();
- }
- return list;
- }
- }
-
- //插入方法(增)
- public boolean save(UserInfo obj){
- Connection con=null;
- PreparedStatement psta=null;
- String sql="insert into userinfo values(?,?,?,?,?,?)";
- boolean flag=false;
- try{
- con=BaseDao.getConnection();
- psta=con.prepareStatement(sql);
- psta.setString(1, obj.getUser_name());
- psta.setString(2, obj.getUser_sex());
- psta.setString(3, obj.getUser_age()+"");
- psta.setString(4, obj.getUser_hobby());
- psta.setString(5, obj.getUser_city());
- psta.setString(6, obj.getMtext());
- flag=psta.executeUpdate()>0;
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- try{
- BaseDao.close(null, psta, con);
- }catch(Exception e){
- e.printStackTrace();
- }
- return flag;
- }
- }
-
- //删除方法(删)
- public boolean remove(int id){
- Connection con=null;
- PreparedStatement psta=null;
- boolean flag=false;
- String sql="delete from userinfo where id=?";
- try{
- con=BaseDao.getConnection();
- psta=con.prepareStatement(sql);
- psta.setInt(1, id);
- flag=psta.executeUpdate()>0;
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- try{
- BaseDao.close(null, psta, con);
- }catch(Exception e){
- e.printStackTrace();
- }
- return flag;
- }
- }
- //通过id修改,为更新做准备的(改)
- public UserInfo findById(int id){
- Connection con=null;
- PreparedStatement psta=null;
- ResultSet rs=null;
- UserInfo obj=null;
- String sql="select * from userinfo where id=?";
- try{
- con=BaseDao.getConnection();
- psta=con.prepareStatement(sql);
- psta.setInt(1, id);
- rs=psta.executeQuery();
- if(rs.next()){
- obj=new UserInfo();
- obj.setId(rs.getInt(1));
- obj.setUser_name(rs.getString(2));
- obj.setUser_sex(rs.getString(3));
- obj.setUser_age(rs.getInt(4));
- obj.setUser_hobby(rs.getString(5));
- obj.setUser_city(rs.getString(6));
- obj.setMtext(rs.getString(7));
- }
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- try{
- BaseDao.close(rs, psta, con);
- }catch(Exception e){
- e.printStackTrace();
- }
- return obj;
- }
- }
-
- //更新方法(修改数据)(改)
- public boolean update(UserInfo obj){
- Connection con=null;
- PreparedStatement psta=null;
- String sql="update userinfo set user_name=?,user_sex=?,user_age=?,user_hobby=?,user_city=?,mtext=? where id=?";
- boolean flag=false;
- try{
- con=BaseDao.getConnection();
- psta=con.prepareStatement(sql);
- psta.setString(1, obj.getUser_name());
- psta.setString(2, obj.getUser_sex());
- psta.setString(3, obj.getUser_age()+"");
- psta.setString(4, obj.getUser_hobby());
- psta.setString(5, obj.getUser_city());
- psta.setString(6, obj.getMtext());
- psta.setInt(7,obj.getId());
- flag=psta.executeUpdate()>0;
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- try{
- BaseDao.close(null, psta, con);
- }catch(Exception e){
- e.printStackTrace();
- }
- return flag;
- }
- }
-
-
- }
3.界面演示
查找界面
在WebRoot/WEB-INF下的index.jsp下设计要演示的界面
这里为了方便操作还增加了一些删除和修改的跳转链接(这部分是为了方便后续的删除和修改操作)
- <pre name="code" class="javascript"><%@ page import="java.util.*,dao.*,entity.*" pageEncoding="UTF-8"%>
- <html>
- <head>
- <title></title>
- </head>
- <%
- UserInfoDao dao=new UserInfoDao();
- ArrayList list=dao.findAll();
- %>
-
- <script type="text/javascript">
- function myAction(pid){
- document.forms[0].id.value=pid;
- document.forms[0].submit();
- }
- </script>
- <body>
- <h1 align="center"><br></h1><h1 align="center"> 用户信息</h1>
- <form action="doRemove.jsp" method="post">
- <!-- 用于存放选择的id,然后会随表单提交给服务器处理页面 -->
- <input type="hidden" name="id">
- <table align="center" border="1" width="80%">
- <tr>
- <td colspan="8" align="right">
- <a href="add.jsp">添加新信息</a>
- </td>
- </tr>
- <tr>
- <th>编号</th>
- <th>姓名</th>
- <th>性别</th>
- <th>年龄</th>
- <th>爱好</th>
- <th>城市</th>
- <th>描述</th>
- <th>操作</th>
- </tr>
- <%for(int i=0;i<list.size();i++){
- UserInfo obj=(UserInfo)list.get(i);%>
- <!--Html代码-->
- <tr>
- <td><%=obj.getId()%></td>
- <td><%=obj.getUser_name()%></td>
- <td><%=obj.getUser_sex()%></td>
- <td><%=obj.getUser_age()%></td>
- <td><%=obj.getUser_hobby()%></td>
- <td><%=obj.getUser_city()%></td>
- <td><%=obj.getMtext()%></td>
- <td>
- <%-- <a href="doRemove.jsp?id=<%=obj.getId()%>">删除</a> --%>、
- <a href="update.jsp?id=<%=obj.getId()%>">修改</a>
- <input type="button" value="删除" onclick="myAction('<%=obj.getId()%>')"/>
- </td>
- </tr>
- <%}%>
- </table>
- </form>
- </body>
- <html>
对于JSP onclick的方法中提交时可以用document.forms[0].name.value (name为表单的名字,这个表单中为id)
或者 document.表单名.控件名.value 提交的必须是<input/>中的
打开数据库,开启服务器后,在浏览器中键入地址后的界面如下
这样查询的操作就完成了
4.下面进行添加数据的操作
设计add.jsp提供数据添加的界面
这个界面要将新添加的信息发送给doadd.jsp页面,因此表单中要有post方式
界面如下
而doadd.jsp 是处理操作的页面,并非用于显示数据,所以无需任何HTML代码,只是将上一个add.jsp传递过来的数据进行处理,不用于在浏览器上显示出来
- <%@ page import="java.util.*,entity.*,dao.*" pageEncoding="UTF-8"%>
- <!-- 处理操作的页面,并非用于显示数据,所以无需任何HTML代码 -->
- <%
- //接收数据,在JSP中每个页面都具备一个隐藏的对象,这个对象包含着所有提交的请求信息
- //这就是request对象,也成为请求对象
- //request是一个隐式对象,所谓的隐式对象是无需声明直接使用的对象(事实上声明是存在的,不过不由我们来做)
- //getParameter是request中最常见的方法,作用是根据传入的name获取value
- //setCharacterEncoding是设置请求对象中参数的编码,必须在调用getParameter之前调用该方法
- //并且一般来说这里的编码要和提交页面的编码一致
- request.setCharacterEncoding("UTF-8");
- String user_name=request.getParameter("user_name");
- String user_sex=request.getParameter("user_sex");
- String user_age=request.getParameter("user_age");
- //getParameterValues可以获取name对应的一组value(如果name下有多个value被提交的话)
- String[] s1=request.getParameterValues("user_hobby");
- StringBuffer user_hobby=new StringBuffer();
- for(int i=0;s1!=null&&i<s1.length;i++){
- user_hobby.append(s1[i]);
- if(i<s1.length-1){
- user_hobby.append(",");
- }
- }
- String[] s2=request.getParameterValues("user_city");
- StringBuffer user_city=new StringBuffer();
- for(int i=0;s2!=null&&i<s2.length;i++){
- user_city.append(s2[i]);
- if(i<s2.length-1){
- user_city.append(",");
- }
- }
- String mtext=request.getParameter("mtext");
- UserInfo obj=new UserInfo();
- obj.setUser_name(user_name);
- obj.setUser_sex(user_sex);
- obj.setUser_age(Integer.parseInt(user_age));
- obj.setUser_hobby(user_hobby.toString());
- obj.setUser_city(user_city.toString());
- obj.setMtext(mtext);
-
- UserInfoDao dao=new UserInfoDao();
- dao.save(obj);
-
- //除了request外,还有个隐藏的对象叫response
- //response也是隐式对象,无需声明就可以直接使用
- //和request不同的地方在于,它是表示响应
- //现在我们要做的时候结束完所有工作后,页面重新为index.jsp
- //所以需要通过响应对象将index.jsp页面响应回客户浏览器,否则客户浏览器得到的是doadd.jsp的页面代码
- //换句话说就是空无一物
- response.sendRedirect("index.jsp");
- %>
接下来进行删除操作
doRemove.jsp
- <%@ page import="java.util.*,dao.*" pageEncoding="UTF-8"%>
- <%
- request.setCharacterEncoding("UTF-8");
- UserInfoDao dao=new UserInfoDao();
- int id=Integer.parseInt(request.getParameter("id"));
- String msg="操作出问题了,请稍后重试,或联系管理员";
- if(dao.remove(id)){
- msg="恭喜你,操作成功,成功删除id为"+id+"的数据";
- }
- //response.sendRedirect是重定向
- //重定向会让我们的浏览器显示指定的页面,但是对于用户来说无法得知操作是否成功(只能通过查看显示的页面效果来判断)
- //除了重定向以外还有3种提示效果
- /
- //1.弹出对话框,等待用户确认消息后再继续前往下一个页面
- //2.显示信息,在一段时间后自动前往下一个页面
- //response.sendRedirect("index.jsp");
- %>
- <%--
- <script type="text/javascript">
- alert("<%=msg%>");
- location.href="index.jsp";
- </script>
- --%>
- <%--
- JSP是一个多种代码混杂的编写环境,其中包括的代码可以分为服务器端代码和客户端代码
- 所谓的服务器端代码是指运行在服务器环境中,由服务器负责解析和执行的代码,在JSP中Java代码就是服务器端代码
- 而其他的HTML,JS,CSS等代码都是客户端代码,是由浏览器来解析和执行
- 从请求响应模式的流程来说,是先执行服务器代码,然后执行客户端代码
- 在这个执行过程中不会去考虑混杂在一起后的先后顺序问题
- 简单的说,就是执行Java代码的时候,HTML,JS等代码是完全忽略的
- 而执行HTML,JS等代码的时候,Java代码早已执行完毕,所有Java代码的地方已经变成运行后的结果
- --%>
- <%//response.sendRedirect("index.jsp"); %>
- <!-- 2.显示信息,在一段时间后自动前往下一个页面 -->
- <%--
- <html>
- <head>
- <meta http-equiv="refresh" content="5;index.jsp">
- </head>
- </html>
- <h1><%=msg%>,5秒后返回首页,如浏览器无反应,<a href="index.jsp">请点击</a></h1>
- --%>
- <div id="msg"><h1><%=msg%>,5秒后返回首页,如浏览器无反应,<a href="index.jsp">请点击</a></h1></div>
- <script type="text/javascript">
- var count=4;
- window.setInterval(function(){
- if(count==0){
- location.href="index.jsp";
- }
- var div_msg=document.getElementById("msg");
- div_msg.innerHTML="<h1><%=msg%>,"+count+"秒后返回首页,如浏览器无反应,<a href='index.jsp'>请点击</a></h1>"
- count--;
- }, 1000);
- </script>
修改操作update.jsp
doUpdate.jsp- <%@ page import="java.util.*,dao.*,entity.*" pageEncoding="UTF-8"%>
- <%
- request.setCharacterEncoding("UTF-8");
- String user_name=request.getParameter("user_name");
- String user_sex=request.getParameter("user_sex");
- String user_age=request.getParameter("user_age");
- //如果多选控件没有选定值的话,返回是null而非长度为0的数组
- String[] hobbys=request.getParameterValues("user_hobby");
- StringBuffer user_hobby=new StringBuffer();
- for(int i=0;hobbys!=null&&i<hobbys.length;i++){
- user_hobby.append(hobbys[i]);
- if(i<hobbys.length-1){
- user_hobby.append(",");
- }
- }
- String[] citys=request.getParameterValues("user_city");
- StringBuffer user_city=new StringBuffer();
- for(int i=0;citys!=null&&i<citys.length;i++){
- user_city.append(citys[i]);
- if(i<citys.length-1){
- user_city.append(",");
- }
- }
- String mtext=request.getParameter("mtext");
- int id=Integer.parseInt(request.getParameter("id"));
-
-
- UserInfo obj=new UserInfo();
- obj.setId(id);
- obj.setUser_name(user_name);
- obj.setUser_sex(user_sex);
- obj.setUser_age(Integer.parseInt(user_age));
- obj.setUser_hobby(user_hobby.toString());
- obj.setUser_city(user_city.toString());
- obj.setMtext(mtext);
- UserInfoDao dao=new UserInfoDao();
- dao.update(obj);
- response.sendRedirect("index.jsp");
-
- %>
|