Lecturas relacionadas:
Organización de notas de estudio JQGRID en Java - Capítulo avanzado (I)
Este artículo comienza oficialmente a interactuar con los antecedentes (lenguaje Java), y la plataforma utilizada es
JDK: Java 1.8.0_71
Myeclisp 2015 Stable 2.0
Apache Tomcat-8.0.30
Mysql 5.7
Navicat para MySQL 11.2.5 (herramienta de administración de bases de datos MySQL)
1. Parte de la base de datos
1. Cree una base de datos
Cree una base de datos usando Navicat para MySQL (no se introdujo con otras herramientas o usando la línea de comando directamente)
2.
2. Crea una mesa
Haga doble clic para abrir el paso anterior para crear una base de datos - Tablas de clic derecho - Seleccione Tabla nueva
Cuando cree los siguientes campos, solicitará ingresar el nombre de la tabla.
2. Parte del procedimiento
1. Crea un nuevo proyecto
Crear nuevo con MyEClipse - Proyecto web
Ingrese el nombre del proyecto para seleccionar Java y Tomcat ejecutando el proyecto. Haga clic en Siguiente hasta que la página siguiente haga clic en la casilla de verificación a continuación para generar automáticamente el archivo Web.xml.
Cree la siguiente estructura del paquete y cree una nueva clase VO (las propiedades corresponden a los campos de la base de datos uno por uno)
demo.java
paquete com.xeonmic.vo; public class Demo {private int id; private string name; private int type; private doble pay; private string text; public demosM () {// tODO Auto Generated Constructor Stub} public Demo (int id, int type, doble pay, name de cadena, texto de cadena) {this.id = id; este.name = name; this.type = type; type; 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 () {type de retorno pay;} public void setPay (doble 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 +", pay = "" "]";}}2. Importe el paquete JAR de conexión de base de datos y archivo JSON
El paquete JAR de conexión de base de datos se puede encontrar en el siguiente directorio del directorio de instalación de MySQL
Además, el paquete JAR requerido para JSON se ha subido a Baidu Cloud (http://pan.baidu.com/s/1detgjrv) y copiado y pegado en el directorio Webroot/Web-Inf/Lib.
Luego seleccione todo el derecho haga clic derecho para agregar a la ruta de compilación
3. Implementación básica en capas del modelo de diseño DAO
Consulte "Java Web Development Classic Basics" aquí, no describiremos el código fuente y luego escribiremos un artículo separado para hablar específicamente sobre esta parte del conocimiento básico.
―3.1. Databaseconnection.java
paquete com.xeonmic.dbc; import java.sql.connection; import java.sql.drivermanager; import java.sql.sqlexception; public class DataBASEConnection {String final estático privado DBDRIVER = "Org.gjt.mm.mysql.Driver"; String final privado Final String Static Final 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 = drivenger. Dbuser, dbpassword);} catch (classNotFoundException e) {// tODO generado automáticamente Bloque E.PrintStackTrace ();} Catch (Sqlexception e) {// tODO Generado automáticamente Bloque de captura E.PrintStackTrace ();} // System.Println ("connection Sucesive");} Conexión pública GetConnection () {) this.conn;} public void Close () {if (this.conn! = null) {try {this.conn.close ();} capt (sqlexception e) {// toDO generado automáticamente el bloque E.PrintStackTRace ();}}}}―3.2. Demodao.java
paquete com.xeonmic.dao; import java.util.list; import com.xeonmic.vo.demo; interfaz pública demodao {// agregue el método público boolean doCreate (demo demo); // Método de consulta Public List <Mo> DoSearch (claves de cadena); // Método de Delete Public Boolean Dodelete (int id) // Método de Modify public Public List <Mo> DoSearch (claves de cadena); // Delete Method Public Boolean Dodelete (int id);/Método de consulta public Public List <Mo> DoSearch (claves de cadena); // Delete Method Public Boolean Dodelete (int id) ;/ demostración);}―3.3. Demodaoimpl.java
paquete 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.xic.Daao. com.xeonmic.vo.demo; public class DemodaoMpl implementa Demodao {private Connection conn = null; private preparado en preparación pstmt = null; public demodaoMpl (conexión conn) {this.conn = conn;}@overridePublic boolean doCreate (deloMo) {boolean flager = false; String sql = " 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.exCuteUpDate ()> 0) {flag = verdadero verdadero;} this.pstmt.Closa flag;}@overridePublic List <MoTO> DOSECHB (String Keys) {// TODO Método Generado automático stubif (Keys == Null) {Keys = "" ";} String sql =" select id, nombre, type, pay, text from t_demo "+keys; list <mo> all = new arraylist <mo> (); system.out.printl (sqln); {this.pstmt = this.conn.prepareStatement (sql); resultset rs = this.pstmt.executeQuery (); demo demo = null; while (rs.next ()) {nuevo = nuevo demo (rs.getInt ("id"), rs.getInt ("type"), rs.getDouble ("pay"), rs.getString ("name"), rs.getString ("texto")); all.add (demo);} this.pstmt.close (); } catch (sqlexception e) {// tODO generado automáticamente Bloque E.PrintStackTrace ();} return all;}@overridePublic boolean dodelete (int id) {boolean flag = false; String sql = "Eliminar de t_demo donde id =?"; Try {this.pstmt = this.conn.prepareStatement (sql); this.pstmt.setint (1, id); if (this.pstmt.ExecuteUpdate ()> 0) {flag = true;} this.pstmt.close ();} capt (sqlexception e) {// toDo generado automáticamente Catch E.PRINTSTACHUTRACE ();} boolean doChange (demo demo) {boolean flag = false; string sql = "update t_demo set type =?, pay =?, name =?, text =? Demo.getType ()); this.pstmt.setDouble (2, delo.getPay ()); this.pstmt.setString (3, demo.getName ()); this.pstmt.setString (4, demo.gettext ()); if (this.pstmt.executeupdate ()> 0) {flag = flag = flag = true;} this.pstmt.close ();} capt (sqlexception e) {// toDo generado automáticamente BLOCK E.PRINTSTACKTRACE―3.5. Fábrica.java
paquete 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 (realizar una prueba simple del método anterior)
paquete 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) {demosco 11 = new demo (); demo1.setName ("nombre"); demo1.setPay (0.98); delo1.settype (1); demo1.setText ("text"); docreate (demo1); dosearch (null); if (dosearch (null)! = Null &&! Dosecher (null) .isempty ()) dosearch (""). get (0); Demo1.SetText ("cambiar de texto"); doChange (demo1); dosearch ("donde id ="+demo1.getId ()); dodeLete (demo1.getId ()); dosearch (null);}} public static list <mo> dosearch (string keys) LinkedList <MoMo> (); AllDimos = factory.getDemodaoInstance (). Dosearch (teclas); para (demostración de demostración: Alldmos) {System.out.println (demo.ToString ());} return allldemos;} public static void doCreate (demo Demo) {if (factory.getDemodaoInstance (). DoCreate (Demo)) {System.out.println ("add exitoso");} {System.out.println ("Agregar fallido");}} public static void dochange (demo demo) {if (factory.getDemodaoInstance (). Dochange (demo)) {system.out.println ("modificación fue exitosa");} else {system.printlnn ("modificación fallida");}}}}} static statiS " {if (factory.getDemodaoInstance (). dodeLete (id)) {System.out.println ("Eliminar correctamente");} else {System.out.println ("Eliminar fallido");}}}/** El resultado de la salida se agregó con éxito ID, nombre, tipo, paga, texto de T_Demo [id = 1, nombre = nombre, type, se agregue con éxito, se agregue el nombre de Select Id, Nombre, Tipo, PAY, Texto de T_DEMO [id = 1, Nombre = 1, TIEME, TIEME, TIEMA SELECT SELECT SELEC Pay = 0.98, Text = Text] Seleccionar id, nombre, tipo, tipo, pago, texto de t_demo demo [id = 1, name = name, type = 1, pay = 0.98, text = text] seleccione ID, nombre, tipo, pago, texto de t_demo Demo [id = 1, name = name, type = 1, pay = 0.98, text = text] SELECCION nombre = nombre, tipo, type = 1, pay = 0.98, text = text] seterect modification ID, nombre, tipo, pago, texto de t_demo donde id = 1Demo [id = 1, nombre = nombre, type = 1, pay = 0.98, text = Cambiar texto] Eliminar exitosamente seleccionar id, nombre, tipo, pago, texto de t_demo * *// */4. Página JSP y sección Servlet (importante)
―4.1. index.jsp (reemplace el contenido de etiquetas HTML en index.html en etiquetas HTML y modifique el contenido de HTML en index.jsp y realice las siguientes modificaciones a JS)
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "utf-8"%> <%string path = request.getContextPath (); String basepath = request.getScheme ()+": //"+request.getServerNeN ()+":"+request.getServerPort ()+pATH+"/";%; "-// w3c // dtd html 4.01 Transitional // en"> <html> <fead> <title> demo </title> <link rel = "stylesheet" type = "text/css" href = "css/jQuery-ui.min.css"/> <Link rel = "stylesheet" type = "/"/css "" 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> <divid = "main"> <!-donde se encuentra jqgrid-> <table id = "grid-table"> </table> <!-Barra de navegación de Browse Jqgrid-> <Div id = "Grid-Pager"> </iv> </iv> <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"> // Cuando el tipo de datos es "local", necesita rellenar var grid_selector = "#grid-table"; var pagger_selector = "#grid-phager"; {$ ("#grid-table"). jqgrid ({// servlet urllurl utilizado para la recuperación: "<%= basepath%>"+"Demoservlet", // servlet urlleditUrl utilizado para agregar, modificar y eliminar: "<%= basepath%>"+"DemechangoServlet", // data: grid_data, // cuando datatype es local ", es decir", lo necesita local ", lo necesita local, lo necesita. Complete el tipo de datos: "JSON", // Fuente de datos, datos locales (Local, JSON, JSONP, XML, etc.) Altura: 150, // Altura, altura de la tabla. Puede ser un valor, porcentaje o 'auto'MType: "get", // Método de envío Colnames: [' Número de orden de salida ',' Tipo de salida ',' Cantidad total ',' Solicitante (Unidad) ',' Nota '], ColModel: [{nombre:' id ', Índice:' id ', // índice. El parámetro de su interacción con el fondo es SidXKey: True, // Cuando no hay ID en los datos devueltos desde el lado del servidor, use esto como el único ROWID y use solo una columna para hacer esta configuración. Si se establece más de uno, solo se selecciona el primero, y los otros se ignoran el ancho: 100, Editable: False, EditOptions: {size: "20", maxLength: "30"}}, {name: 'type', index: 'type', width: 200, // width editable: true, // es editable editype: "seleccione", // tipos que pueden ser editados. Valores opcionales: texto, textura, selección, casilla de verificación, contraseña, botón, imagen y archivo. {size: "20", maxLength: "30"}}, {name: 'text', index: 'text', width: 250, sortable: false, editable: true, edittype: "textARea", editOptions: {filas: "2", cols: "10"}},], viewCords: verdadero, // si muestra el número total de registros en los registros de browsing de barras de Browsing. 10, // Muestra el número de registros por página Rowlist: [10, 20, 30], // matriz de elementos utilizados para cambiar el número de filas para mostrar el cuadro de lista desplegable. Pager: Pager_selector, // La barra de navegación de navegación donde se encuentran la página y los botones son altrows: true, // establecer como tabla de fila alterna, predeterminado es falso // toppager: true, // si la barra de navegación de navegación se muestra en él multiselect: true, // si la barra de navegación de navegación es multiseque: si la barra de navegación de la navegación es true. La barra de navegación es multiselect: true, // si la barra de navegación de navegación está multiselicada por Ctrl Keys Multiboxonly: true, // Si la casilla de verificación está multiselectada por subgridas: verdadero, // sortName: 'id', // método de clasificación predeterminado (orden ascendente asc, orden de descendencia descendente) Triturte: "Comprar la lista de pedidos de retorno", // nombre de tabla autowidth: verdadero orden de clasificación (ascending ascending, descendente de descendente) Triturte: "Comprar la lista de pedidos de retorno", // Nombre de la tabla Autowidth: verdadero Método // Auto-width}); // navegar la barra de navegación para agregar el código de pie {}, // editar opciones {}, // Agregar opciones {}, // Eliminar opciones {múltiplesearch: true} // Opciones de búsqueda - Definir múltiples búsqueda);}); </script> </body> </html>―4.2. Demoservlet.java
paquete 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;/*** Class de implementación de Servlet DemosServlet*/Public Class Demoservlet DemosServlets DMOSVETLET {Private STTPSETTS {Private Statats STATAT SerialVersionUid = 1l;/*** @see httpservlet#doget (httpservletRequest solicitud, respuesta httpServletResponse)*/proteged void doget (httpservletRequest solicitud, httpservletreponse respuesta) lanza servletException, ioexception {request.setcharacterEncoding (""); // Si la codificación no se establece aquí, habrá respuesta confusa. Respuesta.setheader ("Cache-Control", "No-Cache"); int file = integer.valueOf (request.getParameter ("filas")); // El número de registros que se muestran en cada página int página = integer.valueOf (request.getParameter ("página")); // La cadena de número de página actual sord = request.getParameter ("sord"); // Método de clasificación Cadena sidx = request.getParameter ("sidx"); // Nombre de columna de clasificación boolean Boolean Search = (request.getParameter ("_ search"). Equals ("true")? Verdadero: falso; // Se utiliza a la lista de solicitudes de solicitud <Mo> AllList = Newlist <NewList. set String keys = "" "; // Cadena de condición de consulta if (search) {keys =" where "; string filters = request.getParameter (" filtros "); // condiciones específicas system.out.println (filtros); // El formato de los datos entrantes es similar a esto: "{" groupop ":" y "," reglas ": [{" campo ":" id "," op ":" eq "," data ":" 1 "}, {" campo ":" tipo "," op ":" ew "," data ":" 2 "}}" jsonObject jSonObject = jsonObject.fromObject (filtros); string group = "y" RELORES/RELACION (y/o) if (jsonObject.getString ("groupop")! = null &&! "". Equals (jsonObject.getString ("groupop"))) {if (jsonObject.getString ("groupop"). Equals ("o")) {groupop = "o";}} jsonarray reglasjson = jsonObject.getJsonArray ("reglas"); // Tranquilidad cada condición para (int z = 0; Z <Rulesjson.size (); z ++) {objeto t = rulesjson.get (z); JsonObject regidoJson = jsonObject.FromObject (t); string field = regLJson.getString ("Field"); String OP = RegLeJson.getString ("OP"); String data = regLJson.getString ("Data"); String String = ""; // Se usa para almacenar una sola declaración SQL de SQL // Comienza para convertir a SQL Declare (CASE (CASE (CASE): OP). String = "= '"+data+"'"; ruptura; case "ne": // uneuval string = "<> '"+data+"'"; ruptura; case "li": // menos que string = "<'"+data+""; break; case "le": // menos o igual a string = "<="+data+""; break; case "gt"://mayor "; break; case" ge ": // mayor o igual a string ="> = '"+data+" ";"; case "bw": // entre ... {if (data.split (","). longitud == 2) {string = "entre'"+data.split (",") [0]+"y" "+data.split (") '"+data+"' "; // manejar cuando los errores de datos}} ruptura; case" bn ": // no entre ... {if (data.split (", "). longitud == 2) {string =" no entre '"+data.split (", ") [0]+" y "" data.split (",") [1]+"";} más "; // manejar cuando los errores de datos}} ruptura; case" ew ": // end con ... string =" me gusta '%"+data+"' "; ruptura; case" en ": // no termine con ... string =" no me gusta '%"+data+" "; ruptura; case" cn ": // contiene string =" como'%"+data+"%"; '%"+data+"%' "; break; case" in ": // in {string =" in ("; string [] dataS = data.split (", "); para (int i = 0; i <dataS.length; i ++) {string+= "'"+dataS [i]+"'"; if (i! = dataS.length-1) {String+= ",";} else {String+= ")";}} rompiendo; case "ni": // no en {string = "no en ("; string [] dataS = data.split (","); for (int i ++) {string+= "'"+dataS [i]+"'"; if (i! = dataS.length-1) {string+= ",";} else {string+= ")";}}} rompiendo; default: op = null; system.out.println ("Op Symbol Error"); // Op Symball Error} if (OP! = Null) {NULL) { (z == rulesjson.size ()-1) {Keys+= ""+campo+""+String+"";} else {Keys+= ""+campo+""+String+"" Groupop+"";}}}} // Conversión de instrucción ascendente y descendente si (sidx! = null &&! ".". Equals (sidx)))))))))) {System.out.println (sidx); keys += "orden por" +sidx; system.out.println ("sord =" +sord); if (! Sord.equals ("asc")) {keys += "desc";}} allList = factory.getDeModaoinstance (). Total = (allList.Size ()%filas == 0)? (AllList.Size ()/Rows): ((AllList.Size ()/Rows): ((AllList.Size ()/Rows) +1); int j = 0; int M = (Page-1)*ROWS; int n = (Page-1)*Rows+Rows; JSonArray JSArray = New JsonArray (); J <AllList.Size () && J <n; Total); jjson.accumulate ("registros", allList.Size ()); jjson.accumulate ("Rows", jarray); system.out.println (jjson.tostring ()); respuesta.getwriter (). Write (jjson.tostring ());}/*** @see httpservlet#doPost Respuesta httpservletResponse)*/Proteged void dopost (httpservletRequest, respuesta httpservletResponse) lanza ServletException, ioexception {// método generado automático stubthis.doget (solicitud, respuesta);}}}―4.3. desgochangeservlet.java
paquete 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.httpservletRespSEdse; import com.xeonmic.factory.factory; import com.xeonmic.vo.demo; public class DemochangeServlet extiende httpservlet {/****/private static final long serialversionUid = 1l;/*** El método de doblado del servidor. <br> ** Este método se llama cuando un formulario tiene su método de valor de etiqueta es igual a.** @param solicitar la solicitud enviando por el cliente al servidor* @param respuesta la respuesta envía por el servidor al cliente* @throws servletException Si ocurrió un error* @throws ioexception si ocurrió un error*/public void doget (htttpServletRequest Solicitud, httpSeSceptions -storSceptions, Solipe de ServettExceptions, Solipe de ServettExceptions, ServeTes. {boolean flag = false; string opera = request.getParameter ("oper"); switch (oper) {case "del": {string [] ids = request.getParameter ("id"). Split (","); for (int i = 0; i <id.length; i ++) {int iD ID = Integer.ValueOf (ids [i]); flag = factory.getDemodaoInstance (). DodElete (id);}} break; case "add": {int type = integer.valueOf (request.getParameter ("type"); doble pay = double.ValueOf (request.getParameter ("pay"); text = request.getParameter ("text"); demo demo = new demo (-1, type, pay, nombre, texto); factory.getDemodaoInstance (). DoCreate (demo); } break; case "editar": {int id = Integer.ValueOf (request.getParameter ("id")); int type = integer.valueOf (request.getParameter ("type")); doble pay = double.valueOf (request.getparameter ("pay")); string name = request = nueva demostración (id, tipo, pago, nombre, texto); flagy.getDemodaoinStance (). doChange (demo); } break; predeterminado: break;} system.out.println (flag);}/*** El método Dopost del servlet. <br> ** Este método se llama cuando un formulario tiene su método de valor de etiqueta es igual a publicar.** @param solicita la solicitud enviada por el cliente al servidor* @param respuesta la respuesta envía por el servidor al cliente* @throws servletException Si un error ocurrió* @throws ioexception si ocurrió un error*/public void dopost (httpserveTretRequest Solicitud, httTpSeScelesspersing si se produce un error*/public void doPost (httpServletRequest Solicitud, httTpSeScelesspert. IoException {this.doget (solicitud, respuesta);}}―4.4.web.xml
<? xml versión = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://xmlns.jcp.org/xml/ns/Javaee" xsi: schemalocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3" id = "WebApp_id" Version = "3.1"> <Spantname-Name> JQGrid </sipplave-name> <Servlet> <Servlet-name> Demoservlet </servlet-name> <ervlet-class> com.xeonmic.action.demoservlet </servlet-class> </servlet> <servlet> <ervlet-name> Demochangeserver Sea </servlet-name> <ervlet-class> com.xeonmic.action.demochangeServlet </servlet-class> </servlet> <ervlet-mapping> <ervlet-name> Demoservlet </servlet-name> <url-pattern>/demostrlet </url-pattern> </servlet-mapping G> <Servlet-mapping> <Servlet-name> DEMOCHANGESERVLET </servlet-name> <url-pattern>/DeSmochangeServlet </url-Pattern> </servlet-mapping> <beeding-file-list> <welcome-file> index.html </bienvenido> <bevene-file> índice. htm </Welcome-File> <Welcome-File> index.jsp </leadde-file> <levete-file> default.html </welcome-file> <called-file> default.htm </le bienvenido> <calle-file> default.jsp </welcome-file> </welcome-file-list> </web-app>
En este punto, la función de tabla única JQGRID se ha implementado completamente. Avíseme si hay algún problema de diseño en el ejemplo. El próximo artículo comenzará a resolver la implementación de diseño de la mesa maestra y esclava. ¡Presta atención al sitio web directo de script!