servlet对mysql数据库的数据增删改

时间:2024-03-07 13:39:05

1、增加数据就是在jsp中添加数据,通过servlet的java代码对数据库进行添加数据(之前的写的DVD为例):

jsp添加:

<form action="servlet/Add" method="post" >
	<table>
    		<tr>
    			<td align="center" colspan="2">
    				<h2>添加图书信息</h2><br>
    			</td>
    		</tr>
    		<tr>
    			<td align="right">ID:</td>
    			<td><input type="text" name="id"></td>
    		</tr>
    		<tr>
    			<td align="right">DVD名称:</td>
    			<td><input type="text" name="name"></td>
    		</tr>
    		<tr>
    			<td align="right">状态:</td>
    			<td><input type="text" name="state"></td>
    		</tr>
    		<tr>
    			<td align="right">日期:</td>
    			<td><input type="text" name="date"></td>
    		</tr>
    		<tr>
    			<td align="right">次数:</td>
    			<td><input type="text" name="count"></td>
    		</tr>

	</table>
	<div class="w">
		<input type="submit" value="提交" > 
		<input type="reset" value="清除" >
		<input type="button" value="退出" onclick="window.location.href=\'/dvd/index.jsp\'">
	</div>

  是使用form表单,进行数据添加的提交,method="post"是在提交的数据再post的方法中(还有get方法,相比post的方法较好一下),reset是页面输入的数据清空,退出就是返回登录页面;

java代码:

                request. setCharacterEncoding("UTF-8"); //是为了避免中文乱码
		String id=request.getParameter("id");
		String name=request.getParameter("name");
		/*String state=request.getParameter("state");
		String date=request.getParameter("date");
		String count=request.getParameter("count");*/
		Connection con = Connect.get();
		
		try {
			PreparedStatement ps=con.prepareStatement("insert into dvd1(id,name) value(\'"+id+"\',\'"+name+"\')");
			ps.executeUpdate();
			ps.close();
			con.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		response.sendRedirect("/dvd/servlet/Check");        

  request.getParameter()是获取jsp中的name值对应的页面输入值,把后面的三个属性注释了,是因为在mysql中给他们设了默认值,这的添加只需要给mysql中添加名称和编号就可以了。注意:response.sendRedirect()是重置,括号里放的是相对地址,是跳转到servlet,而这里的servlet地址是查看Web.xml中对应的地址,在这个地址之前加当前的工程名称。(这里有个数据类型转换问题:mysql语句中不识别java的数据类型,mysql中只识别mysql语句有没有带引号(单引号获取双引号),也就是说,java的中不管是什么数据类型的数据传到数据库中,只要数据库中字段是varchar类型才需要添加引号,其他的数据类型不要(有可能有的需要,可能是我不知道)添加引号。)

2、删除数据:就是先用servlet从数据库中获取数据,然后用jsp在页面上显示之后,才能从已显示的数据中,删除不要的数据,然后在刷新数据库中剩下的数据:

在上个博客中有显示数据库的数据到页面的上的过程,在页面中显示的有删除的按钮:

<input type="button" value="删除" onclick="delete1()">

 这里还需要用js代码,对选择的按钮进行触发事件,

<script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
function delete1(){
	
	if($(\'input[type=checkbox]:checked\').length<1){
		alert("请选择要删除的信息");
  	}else{
  		var ids=\'\';
  		$(\'input[type=checkbox]:checked\').each(function(index,element){
  			ids+=$(element).val()+\',\';
  		});
 		 window.location.href=\'servlet/Delete?ids=\'+ids;
 	 }	
	}
</script>

 当没有按钮被选择的时候,而触发了删除事件,则会提示 "请选择要删除的信息"  这里也可以进行多条数据的删除,用字符串进行拼接在一个,传送到删除的servlet中,而ids就是字符串的拼接的结果,需要传输到删除的servlet中; 

servlet代码:

                request. setCharacterEncoding("UTF-8");
		String ids=request.getParameter("ids");
		String[] str=ids.split(",");
		Connection con = Connect.get();//连接数据库
		try {
			Statement st = con.createStatement();
			for(String id:str){
				st.executeUpdate("delete from dvd1 where id="+id);
			}
			st.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		response.sendRedirect("/dvd/servlet/Check");    

  删除的servlet接收ids字符串,进行切割,放到str的字符串数组中,用增强for循环,把str的id都变量出来,分别放到mysql的删除语句中,进行一一删除,最后response.sendRedirect()重置,调用数据库的数据的方法(Check方法上个博客中有),就是刷新数据了(注意:一开始就调用servlet的,就是使用默认的get方法,只有指定的post方法,才能使用post方法);

3、修改数据:先把数据库中数据打印到页面上(都在Check可以完成了),选择一条数据点击触发修改事件,进入修改servlet中get方法,获取选中的一条数据,放到修改的jsp进行修改,修改完之后,在修改jsp中提交给修改的servlet的post方法;

<input type="button" value="修改" onclick="change()">

  

<script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
	function change(){
	
	if($(\'input[type=checkbox]:checked\').length!=1){
		alert("请选择一条信息");
  	}else{
 		 window.location.href=\'servlet/Change?id=\'+$(\'input[type=checkbox]:checked\').val();
 	 }
	}
</script>

  这里和删除基本上没有区别,只是选择的数据条数,只有一条,

servlet的get方法代码

                request. setCharacterEncoding("UTF-8");
		String id=request.getParameter("id");
		Connection con = Connect.get();
		try {
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery("select * from dvd1 where id="+id);
			ResultSetMetaData rm = rs.getMetaData();
			List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
			while (rs.next()) {
				Map<String, Object> m = new HashMap<String, Object>();
				for (int i = 1; i <= rm.getColumnCount(); i++) {
					m.put(rm.getColumnName(i), rs.getObject(i));
				}
				list.add(m);
			}
			rs.close();
			st.close();
			con.close();

			request.setAttribute("lists", list);
			request.getRequestDispatcher("/change.jsp").forward(request,
					response);//转发

		} catch (SQLException e) {
			e.printStackTrace();
		}    

  这里request.setAttribute("lists", list)中list就是上面ArrayList中的数据,lists是把list的数据传输到jsp中的变量,而下面的转发就是要转发到的jsp中,这的id就是check.jsp中的选中的id,然后用id的值,重新从数据库,获取id完整的数据,在这完整的数据发送到修改的jsp中;

修改的jsp

<form action="servlet/Change" method="post" >
	<%
			request.setCharacterEncoding("utf-8");
			@SuppressWarnings("unchecked")
			List<Map<String, Object>> list = (List<Map<String, Object>>) request
					.getAttribute("lists");
			if (list == null || list.size() == 0) {
				out.print("数据库中没有数据");
			} else {
		%>
	<table>
    		<tr>
    			<td align="center" colspan="2">
    				<h2>修改信息</h2><br>
    			</td>
    		</tr>
    		<tr>
    			<td align="right">ID:</td>
    			<td><input type="text" name="id" value="<%=list.get(0).get("id") %>" readonly="readonly"></td>
    		</tr>
    		<tr>
    			<td align="right">DVD名称:</td>
    			<td><input type="text" name="name" value="<%=list.get(0).get("name") %>"></td>
    		</tr>
    		<tr>
    			<td align="right">状态:</td>
    			<td><input type="text" name="state" value="<%=list.get(0).get("state1") %>"></td>
    		</tr>
    		<tr>
    			<td align="right">日期:</td>
    			<td><input type="text" name="date" value="<%=list.get(0).get("date1") %>"></td>
    		</tr>
    		<tr>
    			<td align="right">次数:</td>
    			<td><input type="text" name="count" value="<%=list.get(0).get("count1") %>"></td>
    		</tr>
		<%} %>
	</table>
	<div class="w">
		<input type="submit" value="提交" > 
		<input type="reset" value="清除" >
		<input type="button" value="退出" onclick="window.location.href=\'/dvd/index.jsp\'">
	</div>
</form>
equest.getAttribute("lists"),就是获取,修改servlet中get方法的ArrayList的数据,list.get(0).get("id"),用get(0),因为lists中就一条数据,之前只选中了一条数据,get("")中有
数据的,就是数据库中的字段名称,把之前的数据修改之后,提交到修改的servlet的post方法中,
request. setCharacterEncoding("UTF-8"); 
        String id=request.getParameter("id");
        String name=request.getParameter("name");
        String date=request.getParameter("date");
        String state=request.getParameter("state");
        String count=request.getParameter("count");
        
        Connection con = Connect.get();
        try {
            PreparedStatement ps=con.prepareStatement("update dvd1 set name=\'"+name+"\',state1="+state+",date1="+date+",
count1="+count+" where id="+id);
            ps.executeUpdate();
            ps.close();
            con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        response.sendRedirect("/dvd/servlet/Check");

  

这的数据修改和数据添加已经没有什么区别了,要是之前看懂了,到这里已经可以看懂了。

 

有什么问题,可以留言,我们可以讨论讨论。