JSP与数据库的增删改查

1.准备工作,首先要有一个数据库,在数据库里新建一个表,用来操作id要设置为自动增长列,否则在插入操作无法成功

JSP与数据库的增删改查_第1张图片

在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.界面演示

JSP与数据库的增删改查_第2张图片

查找界面

在WebRoot/WEB-INF下的index.jsp下设计要演示的界面

这里为了方便操作还增加了一些删除和修改的跳转链接(这部分是为了方便后续的删除和修改操作)

<%@ page import="java.util.*,dao.*,entity.*" pageEncoding="UTF-8"%>

    
    
  
  <%
  	UserInfoDao dao=new UserInfoDao();
  	ArrayList list=dao.findAll();
   %>
   
   
  
	


用户信息

<%for(int i=0;i <%}%>
添加新信息
编号 姓名 性别 年龄 爱好 城市 描述 操作
<%=obj.getId()%> <%=obj.getUser_name()%> <%=obj.getUser_sex()%> <%=obj.getUser_age()%> <%=obj.getUser_hobby()%> <%=obj.getUser_city()%> <%=obj.getMtext()%> <%-- 删除 --%>、 修改

对于JSP    onclick的方法中提交时可以用document.forms[0].name.value    (name为表单的名字,这个表单中为id)      

                                 或者 document.表单名.控件名.value   提交的必须是中的


 
  

打开数据库,开启服务器后,在浏览器中键入地址后的界面如下

JSP与数据库的增删改查_第3张图片

这样查询的操作就完成了

4.下面进行添加数据的操作

设计add.jsp提供数据添加的界面

<%@ page import="java.util.*" pageEncoding="UTF-8"%>


  
    
  
  
  
  
  
	

新增信息

姓名:
性别:
年龄:
爱好: 唱歌 跳舞 阅读
城市:
描述:
    


这个界面要将新添加的信息发送给doadd.jsp页面,因此表单中要有post方式

界面如下

JSP与数据库的增删改查_第4张图片

doadd.jsp 是处理操作的页面,并非用于显示数据,所以无需任何HTML代码,只是将上一个add.jsp传递过来的数据进行处理,不用于在浏览器上显示出来

<%@ page import="java.util.*,entity.*,dao.*" pageEncoding="UTF-8"%>

<%
	//接收数据,在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

接下来进行删除操作

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");
 %>
 <%--

 --%>
<%--
JSP是一个多种代码混杂的编写环境,其中包括的代码可以分为服务器端代码和客户端代码
所谓的服务器端代码是指运行在服务器环境中,由服务器负责解析和执行的代码,在JSP中Java代码就是服务器端代码
而其他的HTML,JS,CSS等代码都是客户端代码,是由浏览器来解析和执行
从请求响应模式的流程来说,是先执行服务器代码,然后执行客户端代码
在这个执行过程中不会去考虑混杂在一起后的先后顺序问题
简单的说,就是执行Java代码的时候,HTML,JS等代码是完全忽略的
而执行HTML,JS等代码的时候,Java代码早已执行完毕,所有Java代码的地方已经变成运行后的结果
 --%>
<%//response.sendRedirect("index.jsp"); %>

<%-- 

	
		
	

<%=msg%>,5秒后返回首页,如浏览器无反应,请点击

--%>

<%=msg%>,5秒后返回首页,如浏览器无反应,请点击

修改操作update.jsp

<%@ page import="java.util.*,dao.*,entity.*" pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("UTF-8");
	int id=Integer.parseInt(request.getParameter("id"));
	UserInfoDao dao=new UserInfoDao();
	UserInfo obj=dao.findById(id);
	
	//准备好常量
	ArrayList sexs=new ArrayList();
	sexs.add("男");
	sexs.add("女");
	ArrayList hobbys=new ArrayList();
	hobbys.add("唱歌");
	hobbys.add("跳舞");
	hobbys.add("阅读");
	ArrayList citys=new ArrayList();
	citys.add("北京");
	citys.add("南京");
	citys.add("成都");
	citys.add("杭州");
	citys.add("深圳");
	citys.add("西安");
	citys.add("长沙");
	citys.add("武汉");
	citys.add("上海");
 %>

  
    
  
  
  
	

修改信息

姓名:
性别: <%for(int i=0;i checked="checked" <% } %> /><%=sexs.get(i).toString()%> <% } %>
年龄:
爱好: <%for(int i=0;i checked="checked"<%}%>/><%=hobbys.get(i).toString()%><% } %>
城市:
描述:
    

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




你可能感兴趣的:(JSP与数据库的增删改查)