时间:2021-05-20
相关阅读:
Java中jqGrid 学习笔记整理——进阶篇(一)
本篇开始正式与后台(java语言)进行数据交互,使用的平台为
JDK:java 1.8.0_71
myEclisp 2015 Stable 2.0
Apache Tomcat-8.0.30
Mysql 5.7
Navicat for mysql 11.2.5(mysql数据库管理工具)
一、数据库部分
1、创建数据库
使用Navicat for mysql创建数据库(使用其他工具或直接使用命令行暂不介绍)
2、
2.创建表
双击打开上步创建数据库——右击Tables——选择New Table
建立如下字段 保存时会提示输入表名
二、程序部分
1、新建项目
使用myEclipse新建——Web Project
输入项目名称 选择java和运行该项目的Tomcat 一直点下一步 直到下图页面 点选下面自动生成web.xml文件的复选框 后完成
创建如下包结构并新建一个vo类(属性与数据库字段一一对应)
demo.java
package com.xeonmic.vo;public class demo {private int id;private String name;private int type;private double pay;private String text;public demo() {// TODO Auto-generated constructor stub}public demo(int id, int type, Double pay,String name, String text) {this.id = id;this.name = name;this.type = type;this.pay = pay;this.text = text;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getType() {return type;}public void setType(int type) {this.type = type;}public double getPay() {return pay;}public void setPay(Double pay) {this.pay = pay;}public String getText() {return text;}public void setText(String text) {this.text = text;}@Overridepublic String toString() {return "demo [id=" + id + ", name=" + name + ", type=" + type+ ", pay=" + pay + ", text=" + text + "]";}}2、导入数据库连接和JSON文件的jar包
数据库连接jar包可以在mysql安装目录的如下目录查找到
另外下载JSON所需jar包,已上传百度云(http://pan.baidu.com/s/1dETGjRV)一起复制粘贴到WebRoot/WEB-INF/lib目录下
然后全选右键添加到构建路径
3、DAO设计模式的基本分层实现
参考《Java Web开发实战经典基础篇》这里不在叙述直接贴源码后续单独开一篇专门讲这部分基础知识
—3.1、DatabaseConnection.java
package com.xeonmic.dbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DatabaseConnection {private static final String DBDRIVER="org.gjt.mm.mysql.Driver";private static final String DBURL="jdbc:mysql://localhost:3306/jqgriddemo";private static final String DBUSER="root";private static final String DBPASSWORD="1234";private Connection conn =null;public DatabaseConnection(){try {Class.forName(DBDRIVER);this.conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);} catch (ClassNotFoundException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}//System.out.println("连接数据库成功");}public Connection getConnection(){return this.conn;}public void close(){if(this.conn != null){try {this.conn.close();} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}}}—3.2、DemoDAO.java
package com.xeonmic.dao;import java.util.List;import com.xeonmic.vo.demo;public interface DemoDAO {//添加方法public boolean doCreate(demo demo);//查询方法public List<demo> doSearch(String keys);//删除方法public boolean doDelete(int id);//修改方法public boolean doChange(demo demo);}—3.3、DemoDAOImpl.java
package com.xeonmic.dao.impl;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.xeonmic.dao.DemoDAO;import com.xeonmic.vo.demo;public class DemoDAOImpl implements DemoDAO {private Connection conn = null;private PreparedStatement pstmt = null;public DemoDAOImpl(Connection conn){this.conn=conn;}@Overridepublic boolean doCreate(demo demo) {boolean flag = false;String sql = "INSERT INTO t_demo(type,pay,name,text ) VALUES(?,?,?,?)";try {this.pstmt = this.conn.prepareStatement(sql);this.pstmt.setInt(1, demo.getType());this.pstmt.setDouble(2, demo.getPay());this.pstmt.setString(3, demo.getName());this.pstmt.setString(4, demo.getText());if(this.pstmt.executeUpdate()>0){flag = true;}this.pstmt.close();} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}return flag;}@Overridepublic List<demo> doSearch(String keys) {// TODO Auto-generated method stubif (keys==null) {keys="";}String sql = "SELECT id,name,type,pay,text FROM t_demo "+keys;List<demo> all = new ArrayList<demo>();System.out.println(sql);try { this.pstmt = this.conn.prepareStatement(sql); ResultSet rs = this.pstmt.executeQuery();demo demo = null;while(rs.next()){demo = new demo(rs.getInt("id"),rs.getInt("type"),rs.getDouble("pay"),rs.getString("name"),rs.getString("text")); all.add(demo);}this.pstmt.close(); } catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}return all;}@Overridepublic boolean doDelete(int id) {boolean flag = false;String sql = "DELETE FROM t_demo WHERE id = ?";try {this.pstmt = this.conn.prepareStatement(sql);this.pstmt.setInt(1, id);if(this.pstmt.executeUpdate()>0){flag = true;}this.pstmt.close();} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}return flag;}@Overridepublic boolean doChange(demo demo) {boolean flag = false;String sql = "UPDATE t_demo SET type=?,pay=?,name=?,text=? WHERE id=?";try {this.pstmt = this.conn.prepareStatement(sql);this.pstmt.setInt(5, demo.getId());this.pstmt.setInt(1, demo.getType());this.pstmt.setDouble(2, demo.getPay());this.pstmt.setString(3, demo.getName());this.pstmt.setString(4, demo.getText());if(this.pstmt.executeUpdate()>0){flag = true;}this.pstmt.close();} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}return flag;}}—3.5、Factory.java
package com.xeonmic.factory;import com.xeonmic.dao.DemoDAO;import com.xeonmic.dao.proxy.DemoDAOProxy;public class Factory {public static DemoDAO getDemoDAOInstance(){return new DemoDAOProxy();}}—3.6、Demotest.java(对前面的方法进行一次简单测试)
package com.xeonmic.test;import java.util.LinkedList;import java.util.List;import com.xeonmic.factory.Factory;import com.xeonmic.vo.demo;public class Demotest {public static void main(String[] args) {demo demo1 = new demo();demo1.setName("Name");demo1.setPay(0.98);demo1.setType(1);demo1.setText("Text");doCreate(demo1);doSearch(null);if (doSearch(null)!=null&&!doSearch(null).isEmpty()) {demo1 = doSearch("").get(0);demo1.setText("Change Text");doChange(demo1);doSearch("WHERE id = "+demo1.getId());doDelete(demo1.getId());doSearch(null);}}public static List<demo> doSearch(String keys) {List<demo> allDemos = new LinkedList<demo>();allDemos = Factory.getDemoDAOInstance().doSearch(keys);for (demo demo : allDemos) {System.out.println(demo.toString());}return allDemos;}public static void doCreate(demo demo) {if (Factory.getDemoDAOInstance().doCreate(demo)) {System.out.println("添加成功");}else {System.out.println("添加失败");}}public static void doChange(demo demo) {if (Factory.getDemoDAOInstance().doChange(demo)) {System.out.println("修改成功");}else {System.out.println("修改失败");}}public static void doDelete(int id) {if (Factory.getDemoDAOInstance().doDelete(id)) {System.out.println("删除成功");}else {System.out.println("删除失败");}}}/** 输出结果添加成功SELECT id,name,type,pay,text FROM t_demo demo [id=1, name=Name, type=1, pay=0.98, text=Text]SELECT id,name,type,pay,text FROM t_demo demo [id=1, name=Name, type=1, pay=0.98, text=Text]SELECT id,name,type,pay,text FROM t_demo demo [id=1, name=Name, type=1, pay=0.98, text=Text]SELECT id,name,type,pay,text FROM t_demo demo [id=1, name=Name, type=1, pay=0.98, text=Text]修改成功SELECT id,name,type,pay,text FROM t_demo WHERE id = 1demo [id=1, name=Name, type=1, pay=0.98, text=Change Text]删除成功SELECT id,name,type,pay,text FROM t_demo * */4、JSP页面和Servlet部分(重要)
—4.1、index.jsp(将index.html中html标签到html标签中的内容替换index.jsp中html的内容并对JS进行如下修改)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>DEMO</title><link rel="stylesheet" type="text/css" href="css/jquery-ui.min.css" /><link rel="stylesheet" type="text/css" href="css/jquery-ui.theme.min.css" /><link rel="stylesheet" type="text/css" href="css/ui.jqgrid-bootstrap-ui.css" /><link rel="stylesheet" type="text/css" href="css/ui.jqgrid.css" /></head><body><div class="main" id="main"><!--jqGrid所在--><table id="grid-table"></table><!--jqGrid 浏览导航栏所在--><div id="grid-pager"></div></div><script src="js/jquery-1.11.0.min.js" type="text/javascript" charset="utf-8"></script><script src="js/i18n/grid.locale-cn.js" type="text/javascript" charset="utf-8"></script><script src="js/jquery.jqGrid.min.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">//当 datatype 为"local" 时需填写 var grid_selector = "#grid-table";var pager_selector = "#grid-pager";$(document).ready(function() {$("#grid-table").jqGrid({//用于检索的Servlet URLurl:"<%=basePath%>"+"demoServlet", //用于添加、修改、删除的Servlet URLediturl: "<%=basePath%>"+"demochangeServlet",//data: grid_data, //当 datatype 为"local" 时需填写 datatype:"json", //数据来源,本地数据(local,json,jsonp,xml等)height: 150, //高度,表格高度。可为数值、百分比或'auto'mtype:"GET",//提交方式colNames: ['出库单号', '出库类型', '总金额', '申请人(单位)', '备注'],colModel: [{name: 'id',index: 'id', //索引。其和后台交互的参数为sidxkey: true, //当从服务器端返回的数据中没有id时,将此作为唯一rowid使用只有一个列可以做这项设置。如果设置多于一个,那么只选取第一个,其他被忽略width: 100,editable: false,editoptions: {size: "20",maxlength: "30"}}, {name: 'type',index: 'type',width: 200, //宽度editable: true, //是否可编辑edittype: "select", //可以编辑的类型。可选值:text, textarea, select, checkbox, password, button, image and file.seditoptions: {value: "1:采购入库;2:退用入库"}}, {name: 'pay',index: 'pay',width: 60,sorttype: "double",editable: true}, {name: 'name',index: 'name',width: 150,editable: true,editoptions: {size: "20",maxlength: "30"}}, {name: 'text',index: 'text',width: 250,sortable: false,editable: true,edittype: "textarea",editoptions: {rows: "2",cols: "10"}}, ],viewrecords: true, //是否在浏览导航栏显示记录总数rowNum: 10, //每页显示记录数rowList: [10, 20, 30], //用于改变显示行数的下拉列表框的元素数组。pager: pager_selector, //分页、按钮所在的浏览导航栏altRows: true, //设置为交替行表格,默认为false//toppager: true,//是否在上面显示浏览导航栏multiselect: true, //是否多选//multikey: "ctrlKey",//是否只能用Ctrl按键多选multiboxonly: true, //是否只能点击复选框多选// subGrid : true, //sortname:'id',//默认的排序列名//sortorder:'asc',//默认的排序方式(asc升序,desc降序)caption: "采购退货单列表", //表名autowidth: true //自动宽});//浏览导航栏添加功能部分代码$(grid_selector).navGrid(pager_selector, {search: true, // 检索add: true, //添加 (只有editable为true时才能显示属性)edit: true, //修改(只有editable为true时才能显示属性)del: true, //删除refresh: true //刷新}, {}, // edit options{}, // add options{}, // delete options{multipleSearch: true} // search options - define multiple search);});</script></body></html>—4.2、demoServlet.java
package com.xeonmic.action;import java.io.IOException;import java.util.LinkedList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import com.xeonmic.factory.Factory;import com.xeonmic.vo.demo;/*** Servlet implementation class demoServlet*/public class demoServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8"); //这里不设置编码会有乱码response.setContentType("text/html;charset=utf-8");response.setHeader("Cache-Control", "no-cache"); int rows = Integer.valueOf(request.getParameter("rows")); //每页中显示的记录行数int page = Integer.valueOf(request.getParameter("page")); //当前的页码String sord = request.getParameter("sord");//排序方式String sidx = request.getParameter("sidx");//排序列名Boolean search =(request.getParameter("_search").equals("true"))?true:false;//是否用于查询请求List<demo> allList = new LinkedList<demo>();//返回结果集String keys="";//查询条件字符串if(search){keys=" WHERE ";String filters = request.getParameter("filters");//具体的条件System.out.println(filters);//传入数据的格式是类似这样的:"{"groupOp":"AND","rules":[{"field":"id","op":"eq","data":"1"},{"field":"type","op":"ew","data":"2"}]}"JSONObject jsonObject = JSONObject.fromObject(filters);String groupOp = "AND";//每个规则之间的关系(and/or)if (jsonObject.getString("groupOp")!=null&&!"".equals(jsonObject.getString("groupOp"))) {if (jsonObject.getString("groupOp").equals("OR")) {groupOp = "OR";}}JSONArray rulesjson = jsonObject.getJSONArray("rules");//遍历每个条件for (int z=0; z < rulesjson.size(); z++) {Object t = rulesjson.get(z);JSONObject rulejson = JSONObject.fromObject(t);String field = rulejson.getString("field");String op = rulejson.getString("op");String data = rulejson.getString("data");String string = "";//用于存储单个条件sql语句片段//开始转化为sql语句switch (op) {case "eq"://相等string=" = '"+data+"' ";break;case "ne"://不相等string=" <> '"+data+"' ";break;case "li"://小于string=" < '"+data+"' ";break;case"le"://小于等于string=" <= '"+data+"' ";break;case"gt"://大于string=" > '"+data+"' ";break;case "ge"://大于等于string=" >= '"+data+"' ";break;case "bw"://在...之间{if (data.split(",").length==2) {string=" BETWEEN '"+data.split(",")[0]+"' AND '"+data.split(",")[1]+"' ";}else {string=" = '"+data+"' ";//数据错误时处理}} break;case"bn"://不在...之间{if (data.split(",").length==2) {string=" NOT BETWEEN '"+data.split(",")[0]+"' AND '"+data.split(",")[1]+"' ";}else {string=" <> '"+data+"' ";//数据错误时处理}}break;case"ew"://以...结束string=" LIKE '%"+data+"' ";break;case "en"://不以...结束string=" NOT LIKE '%"+data+"' ";break;case "cn"://包含string=" LIKE '%"+data+"%' ";break;case "nc"://不包含string=" NOT LIKE '%"+data+"%' ";break;case "in"://在{string=" IN ( ";String[] datas = data.split(",");for (int i = 0; i < datas.length; i++) {string+= " '"+datas[i]+"' ";if (i!=datas.length-1) {string += ",";}else {string += " ) ";}}}break;case "ni"://不在{string=" NOT IN ( ";String[] datas = data.split(",");for (int i = 0; i < datas.length; i++) {string+= " '"+datas[i]+"' ";if (i!=datas.length-1) {string += ",";}else {string += " ) ";}}}break;default:op=null;System.out.println("OP符号错误");//OP符号错误}if (op!=null) {if (z==rulesjson.size()-1) {keys+=" "+field+" "+string +" ";}else {keys+=" "+field+" "+string +" "+groupOp+" ";}}}}//升降序SQL语句转换if (sidx!=null&&!"".equals(sidx)) {System.out.println(sidx);keys += " ORDER BY " + sidx;System.out.println("sord="+sord);if (!sord.equals("asc")) {keys += " DESC ";}}allList = Factory.getDemoDAOInstance().doSearch(keys);//分页部分int total=0; total=(allList.size()%rows==0)?(allList.size()/rows):((allList.size()/rows)+1);int j = 0;int m = (page-1)*rows;int n = (page-1)*rows+rows;JSONArray jArray = new JSONArray();for (j=m; j<allList.size()&&j<n; j++) { jArray.add(JSONObject.fromObject(allList.get(j))); }JSONObject jjson = new JSONObject(); //检索结果及分页信息封装 返回jjson.accumulate("page", page);jjson.accumulate("total", total);jjson.accumulate("records", allList.size());jjson.accumulate("rows", jArray);System.out.println(jjson.toString());response.getWriter().write(jjson.toString());}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubthis.doGet(request, response);}}—4.3、demochangeServlet.java
package com.xeonmic.action;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.xeonmic.factory.Factory;import com.xeonmic.vo.demo;public class demochangeServlet extends HttpServlet {/*** */private static final long serialVersionUID = 1L;/*** The doGet method of the servlet. <br>** This method is called when a form has its tag value method equals to get.* * @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {boolean flag = false;String oper =request.getParameter("oper");switch (oper) {case "del":{String[] ids = request.getParameter("id").split(",");for (int i = 0; i < ids.length; i++) {int id =Integer.valueOf(ids[i]);flag=Factory.getDemoDAOInstance().doDelete(id);}} break;case "add":{int type = Integer.valueOf(request.getParameter("type"));Double pay = Double.valueOf(request.getParameter("pay"));String name = request.getParameter("name");String text = request.getParameter("text");demo demo = new demo(-1,type,pay,name,text);flag = Factory.getDemoDAOInstance().doCreate(demo); }break;case "edit":{int id = Integer.valueOf(request.getParameter("id"));int type = Integer.valueOf(request.getParameter("type"));Double pay = Double.valueOf(request.getParameter("pay"));String name = request.getParameter("name");String text = request.getParameter("text");demo demo = new demo(id,type,pay,name,text);flag = Factory.getDemoDAOInstance().doChange(demo); }break;default:break;}System.out.println(flag);}/*** The doPost method of the servlet. <br>** This method is called when a form has its tag value method equals to post.* * @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}—4.4、web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://e-file-list></web-app>至此,jqGrid单表功能已全部实现,例子中有哪些设计有问题请告知,下一篇将开始解决 主从表 的设计实现,敬请关注脚本直接网站!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
这是Java网络爬虫系列博文的第二篇,在上一篇Java网络爬虫新手入门详解中,我们简单的学习了一下如何利用Java进行网络爬虫。在这一篇中我们将简单的聊一聊在网
想看前面整理的canvas常用API的同学可以点下面:canvas学习之API整理笔记(一)canvas学习之API整理笔记(二)本系列文章涉及的所有代码都将上
第一次发现《从零开始做运营》是在百度阅读(参加活动的免费兑换码,感谢百度,感谢群主vince)里看到的,看了一眼之后就欲罢不能的把(进阶篇)也给看完了,后来工作
我的学习方法:先入门,后进阶!本系列文章分为:基本篇、层次篇、简单篇、内容篇、可见性篇、属性篇、子元素篇、表单篇、表单对象属性篇共9篇文章。详细介绍页面http
一.基础篇Javascript学习笔记1数据类型Javascript学习笔记2函数Javascript学习笔记3作用域Javascript学习笔记4Eval函数