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下设计要演示的界面
这里为了方便操作还增加了一些删除和修改的跳转链接(这部分是为了方便后续的删除和修改操作)
<%@ page import="java.util.*,dao.*,entity.*" pageEncoding="UTF-8"%>
<%
UserInfoDao dao=new UserInfoDao();
ArrayList list=dao.findAll();
%>
用户信息
对于JSP onclick的方法中提交时可以用document.forms[0].name.value (name为表单的名字,这个表单中为id)
或者 document.表单名.控件名.value 提交的必须是中的
打开数据库,开启服务器后,在浏览器中键入地址后的界面如下
这样查询的操作就完成了
4.下面进行添加数据的操作
设计add.jsp提供数据添加的界面
<%@ page import="java.util.*" pageEncoding="UTF-8"%>
新增信息
这个界面要将新添加的信息发送给doadd.jsp页面,因此表单中要有post方式
界面如下
而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("上海");
%>
修改信息
<%@ 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