`
tsinglongwu
  • 浏览: 229371 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ZK数据库CURD

    博客分类:
  • ZK
阅读更多
1.建立mysql数据库和表:
create database zktodo  character set=utf8;

create table event(

   id varchar(55),

  name varchar(55),

  priority int,

  date date

);


2.新建Dynamic web project,添加ZK supports,建立完成之后添加mysql jdbc jar包到项目build path

3.建立entity和dao

package com.zktodo.dao;

import java.util.Date;

public class MyEvent {
	private String id;
	private String name;
	private int priority;
	private Date date;
	
	public MyEvent(){}
	
	public MyEvent(String id,String name,int priority,Date date){
		this.id = id;
		this.name = name;
		this.priority = priority;
		this.date = date;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	public int getPriority() {
		return priority;
	}
	public void setPriority(int priority) {
		this.priority = priority;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

package com.zktodo.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class EventDAO {
	private String url = "jdbc:mysql://localhost:3306/zktodo";

	private String user = "root";

	private String pwd = "root";

	public EventDAO() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public List findAll(){
		Statement stmt = null;
		Connection conn = null;
		List allEvents = new ArrayList();
		try {
			// get connection
			conn = DriverManager.getConnection(url, user, pwd);
			stmt = conn.createStatement();
			ResultSet rs = stmt.executeQuery("select * from event");

			// fetch all events from database
			MyEvent evt;
			while (rs.next()) {
				evt = new MyEvent();
				evt.setId(rs.getString(1));
		        evt.setName(rs.getString(2));
				evt.setPriority(rs.getInt(3));
				evt.setDate(rs.getDate(4));

				allEvents.add(evt);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}		
		return allEvents;
	}
	
	public boolean delete(MyEvent evt){
		Connection conn = null;
		Statement stmt = null;
		boolean result = false;
		try {
			// get connection
			conn = DriverManager.getConnection(url, user, pwd);
			stmt = conn.createStatement();
			if (stmt.executeUpdate("delete from event where id = '" + evt.getId() + "'") > 0);
			result = true;
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		return result;
	}
	
	public boolean insert(MyEvent evt){
		Connection conn = null;
		Statement stmt = null;
		boolean result = false;
		try {
			// get connection
			conn = DriverManager.getConnection(url, user, pwd);
			stmt = conn.createStatement();
			if (stmt.executeUpdate("insert into event(id,name,priority,date) " +
					"values ('" + UUID.randomUUID().toString() + "','" + evt.getName() +
					"'," + evt.getPriority() + ",'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

                                        .format(evt.getDate()) + "')") > 0);
			result = true;
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		return result;
	}
	
	public boolean update(MyEvent evt){
		Connection conn = null;
		Statement stmt = null;
		boolean result = false;
		try {
			// get connection
			conn = DriverManager.getConnection(url, user, pwd);
		    stmt = conn.createStatement();				
			if (stmt.executeUpdate("update event set name = '" + evt.getName() + 
					"', priority = " + evt.getPriority() + ", date = '" + 
					new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(evt.getDate())+ 
					"' where id = '" + evt.getId() + "'") > 0);
			result = true;
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		return result;
	}

}


4.新建index.zul文档

<?page title="zk todo index" contentType="text/html;charset=UTF-8"?>
<zk>
<window title="To do list" width="640px" border="normal">

<zscript>

    import com.zktodo.dao.EventDAO; 
    import java.util.ArrayList; 
    import java.text.SimpleDateFormat; 
    import java.util.UUID;
    import com.zktodo.dao.MyEvent;
    
    EventDAO evtdao = new EventDAO(); 
    List allEvents = evtdao.findAll();  
    
    void add(){ 
		//insert into database 
		MyEvent newEvt = new MyEvent(UUID.randomUUID().toString(),
		  name.value,priority.value.intValue(),date.value);
		evtdao.insert(newEvt);

		//synchronized data with database 
		allEvents = evtdao.findAll();

		//insert a listEvent into the listbox 
		Listitem li = new Listitem(); 
		li.setValue(newEvt); 
		li.appendChild(new Listcell(name.value)); 
		li.appendChild(new Listcell(priority.value.toString())); 
		li.appendChild(new Listcell(new SimpleDateFormat("yyyy-MM-dd").format(date.value)));
		box.appendChild(li);
		}
		
		void update(){
		//update database
		MyEvent editEvt = (MyEvent)box.selectedItem.value;
		editEvt.setName(name.value);
		editEvt.setPriority(priority.value);
		editEvt.setDate(date.value);
		  evtdao.update(editEvt);
		
		//update listbox
		List children = box.selectedItem.children;
		((Listcell)children.get(0)).label = name.value;
		((Listcell)children.get(1)).label = priority.value.toString();
		((Listcell)children.get(2)).label = new SimpleDateFormat("yyyy-MM-dd").format(date.value);
		} 
		
		void delete(){
		evtdao.delete((MyEvent)box.selectedItem.value);
		box.removeItemAt(box.getSelectedIndex());
		cleargb();

		}
		void move(){
		name.value = ((MyEvent)box.selectedItem.value).getName();
		priority.value = ((MyEvent)box.selectedItem.value).getPriority();
		date.value = ((MyEvent)box.selectedItem.value).getDate();
		}
		
		void cleargb(){
		name.value = null;
		priority.value = null;
		date.value = null;
		}
  </zscript>  

<listbox id="box" multiple="true"  rows="4" onSelect="move()">
  <listhead>
   <listheader label="Item" />
   <listheader label="Priority" width="50px" />
   <listheader label="Opened" width="90px" />
  </listhead>
  <listitem forEach="${allEvents }" value="${ each }">
   <listcell label="${each.name }"/>
   <listcell label="${each.priority }"/>
   <listcell label="${each.date }"/>
  </listitem>
 </listbox>
    <groupbox>
              <caption label="Event" />
       Item: <textbox id="name" cols="50" />
       Priority: <intbox id="priority" cols="1" />
       Date: <datebox id="date" cols="8"/>
       <button label="Add" width="36px" height="24px" onClick="add()" />
       <button label="Update" width="46px" height="24px" onClick="update()"/>
       <button label="Delete" width="46px" height="24px" onClick="delete()"/>
    </groupbox>
</window>

</zk>


5.运行结果:



初步还行,缺点如下:

1.没有分页,数目多了,只有下拉条

2.缺乏输入合法性判断(包括输入空值)

3.没有唯一性判断

4.缺乏选中多个删除和全部删除


优点:

1).界面好看

2).一个文件搞定CURD

3).中文化很顺利


6.要点

(1)zscript代码

<zscript>
    
    import com.zktodo.dao.EventDAO; 
    import java.util.ArrayList; 
    import java.text.SimpleDateFormat; 
    import java.util.UUID;
    import com.zktodo.dao.MyEvent;
    
    EventDAO evtdao = new EventDAO(); 
    List allEvents = evtdao.findAll();  
    
    void add(){ 
		//insert into database 
		MyEvent newEvt = new MyEvent(UUID.randomUUID().toString(),
		  name.value,priority.value.intValue(),date.value);
		evtdao.insert(newEvt);

		//synchronized data with database 
		allEvents = evtdao.findAll();

		//insert a listEvent into the listbox 
		Listitem li = new Listitem(); 
		li.setValue(newEvt); 
		li.appendChild(new Listcell(name.value)); 
		li.appendChild(new Listcell(priority.value.toString())); 
		li.appendChild(new Listcell(new SimpleDateFormat("yyyy-MM-dd").format(date.value)));
		box.appendChild(li);
		}
		
		void update(){
		//update database
		MyEvent editEvt = (MyEvent)box.selectedItem.value;
		editEvt.setName(name.value);
		editEvt.setPriority(priority.value);
		editEvt.setDate(date.value);
		  evtdao.update(editEvt);
		
		//update listbox
		List children = box.selectedItem.children;
		((Listcell)children.get(0)).label = name.value;
		((Listcell)children.get(1)).label = priority.value.toString();
		((Listcell)children.get(2)).label = new SimpleDateFormat("yyyy-MM-dd").format(date.value);
		} 
		
		void delete(){
		evtdao.delete((MyEvent)box.selectedItem.value);
		box.removeItemAt(box.getSelectedIndex());
		cleargb();

		}
		void move(){
		name.value = ((MyEvent)box.selectedItem.value).getName();
		priority.value = ((MyEvent)box.selectedItem.value).getPriority();
		date.value = ((MyEvent)box.selectedItem.value).getDate();
		}
		
		void cleargb(){
		name.value = null;
		priority.value = null;
		date.value = null;
		}
  </zscript>
 

(2)forEach循环显示

 
<listitem forEach="${allEvents }" value="${ each }">
   <listcell label="${each.name }"/>
   <listcell label="${each.priority }"/>
   <listcell label="${each.date }"/>
  </listitem>


(3)注册事件:

<listbox id="box" multiple="true"  rows="4" onSelect="move()">
.....
       <button label="Add" width="36px" height="24px" onClick="add()" />
       <button label="Update" width="46px" height="24px" onClick="update()"/>
       <button label="Delete" width="46px" height="24px" onClick="delete()"/>


http://www.cnblogs.com/cxccbv/archive/2009/02/08/1386466.html

分享到:
评论

相关推荐

    Android开发BLE 串口调试工具,用来和底层进行一些握手协议的调试

    【Android】开发BLE 串口调试工具,用来和底层进行一些握手协议的调试。

    机械设计自动锁垫片机(sw18可编辑+工程图+BOM)非常好的设计图纸100%好用.zip

    机械设计自动锁垫片机(sw18可编辑+工程图+BOM)非常好的设计图纸100%好用.zip

    基于Mediapipe的手势识别前端应用可执行程序+说明.zip

    基于Mediapipe的手势识别前端应用可执行程序+说明.zip # 项目简介 * 基于AutoHotkey制作的摄像头手势识别软件。能让你的电脑摄像头在识别手势后,执行自定义的电脑操作命令。同时也集成了语音识别功能,可调用Windows自带API实现简单的语音助手功能。 * 手势识别调用了高性能的Mediapipe动态链接库来免部署实现。而电脑自动化操作使用AutoHotkey脚本语言来实现,它能更方便的对电脑进行深度调用和流程自动化处理。 # 使用介绍 * 测试环境:Win10 64位(专业版完整镜像) * **第一次运行 Visual_Gesture_Recognition.exe**时,会提示下载手势识别的**依赖包**。点击**确定**后,跟着提示**点击自动下载**

    node-v4.8.0.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    python烟花代码.zip

    python烟花代码python烟花代码.zip python烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zip

    如何提高APP商业变现能力.docx

    如何提高APP商业变现能力.docx

    node-v12.19.1-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    数据分析:揭示数据背后的智慧与力量

    在数字化时代,数据已成为一种宝贵的资源,而数据分析则是解锁这一资源的关键。数据分析是指运用适当的统计分析和数据挖掘方法,对收集来的大量数据进行详细的研究和概括总结,以最大化地开发数据的功能,发挥数据的作用。 数据分析的过程涉及数据的收集、整理、转化、建模和解释等多个环节。通过对比分析法、分组分析法、结构分析法等多种方法,我们能够深入挖掘数据中的隐藏信息和内在规律,为企业决策、市场研究、科学研究等领域提供有力的支持。 数据分析在现代社会中的应用越来越广泛。例如,在市场调研中,通过对消费者需求、竞争品牌分布等数据的分析,企业可以了解市场潜力、竞争优势和定位策略,从而制定有效的市场推广策略。在社交媒体数据分析中,企业可以通过分析用户的关注人群、点赞、转发等行为,揭示用户的兴趣爱好、消费倾向和口碑传播效果,从而制定有针对性的营销策略。 数据分析工具和技术的发展也极大地推动了数据分析的普及和应用。如R语言和Python语言等编程工具,以及SAS等商业化的数据分析软件,都为数据分析提供了强大的支持。这些工具不仅具有丰富的统计函数和图表绘制能力,还具有高度的灵活性和可扩展性,可以满足各种要求

    水和废水处理化学品的选择和使用指南

    水和废水处理化学品的选择和使用指南

    python输出虚拟棋盘代码示例

    在Python中,可以使用多种方法来创建一个虚拟棋盘。下面是一个简单的示例,使用字符串和循环来创建一个8x8的国际象棋棋盘。 这段代码定义了一个函数print_chessboard,它首先定义了棋盘的一半,然后通过循环来构建整个棋盘。棋盘的每个格子用空格分隔,并且棋盘的行号用数字表示。棋盘的黑白格子使用字符串white和black来表示,其中white表示白格子,而black表示黑格子。 运行这段代码,你会在控制台看到一个8x8的棋盘,其中棋盘的行号从1到8,列号从A到H,棋盘的黑白格子交替出现。 请注意,这个棋盘是虚拟的,仅用于展示布局,并没有实现任何棋盘游戏的逻辑。如果你需要实现一个可以进行游戏的棋盘,你需要添加更多的代码来处理棋子的移动和游戏规则。

    基于modbus协议的大屏数据监控,使用modbus slave模拟数据,串口服务器获取温湿度

    系统使用了Modbus协议完成数据的获取工作,通过Mqtt协议与后端进行连接,获取了数据,完成了数据采集工作。后端通过对数据的处理,进行了数据存储,和接口api的处理。通过WebSocket协议来推送数据。前端展示请求的后端数据。通过此流程完成了工业暖通空调系统的开发。

    机械设计大倾角波状挡边带式输送机sw17可编辑非常好的设计图纸100%好用.zip

    机械设计大倾角波状挡边带式输送机sw17可编辑非常好的设计图纸100%好用.zip

    常见移动变现术语(mobile monetization).docx

    常见移动变现术语(mobile monetization).docx

    R语言绘制SCI科研小提琴图源代码.zip

    把input里面的数据替换成自己的数据,打开R,点Run,可以直接出图!文件适合有R语言基础的同学。

    福克斯初级和猎犬初级电线追踪工具包使用说明书

    福克斯初级和猎犬初级电线追踪工具包使用说明书

    数据库实验报告 SJK完整性语言

    数据库实验报告 SJK完整性语言

    PDU8000 ATS配电箱-T 快速指南

    PDU8000 ATS配电箱-T 快速指南

    串口通过 YMODEM 协议进行文件传输

    串口协议 串口通过 YMODEM 协议进行文件传输 开发环境 框架:Qt 5.7.1 编译器:MSVC2015_64bit IDE:Qt Creator 4.2.0 社区版 操作系统:Windows 10 专业版

    springboot(题库管理系统)

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg

    SITOP 电源电源电源电源 20 6EP1 536-2AA00 操作手册

    SITOP 电源电源电源电源 20 6EP1 536-2AA00 操作手册

Global site tag (gtag.js) - Google Analytics