MySQL 在 Windows 平台下的安装、使用(图解)

2013-08-19 MySQL Windows

一、 首先电脑要具备.Net Framework 4 以上环境 二、 MySQL下载、安装、执行 1. 下载http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.13-win32.zip 2. 安装 点击“install MySQL products” 选中“I accept the licence terms”,点击next

选中“Skip the check for updates” ,Next

选中“custom”,Next

Next

Execute

Next

Execute

Next

Next

Next

设置root密码“root”,Next

Next

Next

Next

Finish 3. 使用 这个是主页面

Databases->Query Database

连接本地实例“Local instance MySQL 56”,OK

填密码,选中保存,OK

输入查询语句,CREATE DATABASE waylau DEFAULT CHARACTER SET ‘utf8’; use waylau; create table users (user_no char(5) not null, user_name char(50) ); 执行

刷新左侧树形栏,出现刚刚执行的库和表,则说明使用成功!!


2013-8-11惠州——三洲田、大梅沙骑行,作业贴,骑行攻略

2013-08-12 Outdoor

这次骑行找不到队友啊,只能独骑闯大梅沙了~
七点出发,经过仲恺、 镇隆镇 、 新圩镇 、 坪地镇基本上九点多到深圳龙岗界内。进行了第一次休整 。
发觉市区的环境确实很恶劣,特别是骑行道,很多障碍。提不起速度。
建议走汽车道。尾气很重,差点熏死我~
在市区内就要开启导航了。因为要转拐的路段较多。
干,竟然走到了绝路,晕。。
经过三洲田大桥就要注意了,因为很快三洲田的入口就要出现了。
有个十字路口,但是 没有提示,左拐过去看了牌子才发现有“东部华侨城”“xx酒店”字样的,就是入
口了。
预示着一段艰辛的爬坡路段开始了......
盘上公路直插云霄啊,喜欢爬坡的车友鸡冻了,有木有......
居然有女汉子。。。猛!
吓尿了吧。。。。。
高架桥攀爬完毕,给小so留个念。
高兴太早了,后面的路段更曲折。
顾不上拍照了,直喘气。神马房车酒店、主题公园、欧式风情、小火车都是一瞟而过。攀顶。攀顶。
见“江山如此多娇”,恭喜,攀顶成功!俯瞰群山和大海吧~
稍作修息,准备下山了。最好先检查刹车,要速降了 。妖~
半山腰,寻一水潭,比较隐蔽,纯天然矿泉水,喝上五瓶先~
正直当午,果断宽衣解带,泡潭咯~ 太凉了,鸡皮疙瘩都起来了。爽!!
爽完就要下山了。速降了,一路刹~车很多,要注意安全。~
下到山脚,左拐 ,沿着海边骑行道走就可以了,可以经过大、小梅沙海滩。
人忒多了,实现没有下海的冲动了。~
很多免费的海滩也很不错哦,好清新
回程了,肚子果断叫唤了,才发觉没有吃午饭,我汗。。。秀色可餐啊~
貌似也过了吃饭的店,饭店没啥吃的了。到葵涌镇补充干粮
其他返程的就不多说了,一路飙回惠州吧》~
另外,回程路上遇上一个骑友,说是要上北京 。吓到,
但看他没有专业的山地车,没有防护装备,坐垫还是棉被裹的,我汗。估计有点悬
他是深圳出发的,要经过惠州,一路看地图找不到路。于是,我他带到惠州。
离别了嘱咐他多跟家人保持联系。长路漫漫多珍重~
总结:龙岗市区环境很恶劣,做好防护准备
从三洲田速降大梅沙的时候,刹车一定要检查好
全程往返170公里左右
花费:
纯天然矿泉水 450 ml * 5 0元
XX糕点 5只装 4元
雪碧2L 8元
康师傅矿泉水550ml 2元
共计: 14元
用最少的钱走最远的路

 


纯AS3项目利用 Adobe AMF3 协议与 Java 交互,示例

2013-08-03 ActionScript3 Java

package 
{ 
    import flash.net.NetConnection; 
    import flash.net.ObjectEncoding; 
    import flash.net.Responder; 

    public class Amf3ServiceInvoker  
    {              

       private var nc : NetConnection = new NetConnection();    
       private var responder : Responder = null; 
       private const amf3URL : String = “http://gcc.waylau.com:8080/messagebroker/amf”; 

       public function Amf3ServiceInvoker(result : Function, error : Function) 
       {                     
           responder = new Responder(result, error);  
           super(); 
       } 

       public function getWeather2(city: String) : void{ 
           nc.objectEncoding = ObjectEncoding.AMF3;  
           nc.connect(amf3URL);      
           nc.call(“amf3ServiceInvoker.getWeather2″, responder, city); 
       } 

    } 
}

2013-7-28惠州——东莞大岭山松山湖骑,作业贴,骑行攻略

2013-07-29 Outdoor

一行三人,出门还有丝丝细雨。于是放弃了防晒装备(后面因此付出代价) 骑行的线路大致是酱紫滴 惠州学院对面,华康医院附近出发, 沿演达大道,向北 下演达立交,进入三环南路,经过师大立交,进入仲恺大道 下面的路段,基本上是闭着眼睛也不会走错啦~

补过,过仲恺的时候确实应该发下牢骚, 这路确实是太狗血了~啦~见图~

并且在这途中,还遗失了一位队友, 顶。~

后来 还是 找回来啦~ 咔咔

托了高铁的福,我一直叫他沿着高铁柱子走。~

继续出发

仲恺五路、仲恺六路、仲恺八路,过沥林镇,谢岗镇,樟木头镇,黄江镇一路都是笔直的 樟木头和黄江有一大坡相隔,需要冲坡!!

只要沿着大道走,就不会走X 。 出黄江镇再走一段,就要准备左转了。~ 地图导航显示的位置大概是 金朗南路的杨涌村,往西南方向走, 擦~ 全是 村间小道 ,感觉地图导航坑了我~ 不过经过新马莲村,却意外看到了一池子 好荷花! 正是好景六月中,风光不与四时同也~

一直吧,跨过那漫漫的田野, 擦~ 人迹开始罕见~ 晴空开始骄阳 除了几个工业区。 最后竟然还走到了路的尽头~

。。。汗。没路了后,只好右拐穿过莞佛高速~ 到达东莞水平商贸城,

看地图离目的地址不远,遂先填饱肚子 一碗木桶饭顶住先~

饭饱后继续前行,沿着美景西路(X241) 到达西牛陂广场 ,就要往小路往西走了~

直到 环湖路 环湖路 环的就是松山湖啊 ,亲,差不多到了~

再往西走一段路程,就能看到大门,进了门,就 尽情的绕湖吧~~~~~~~~

景区内还有马术场,不错,威远

回程路线:

绕完湖,沿着大学路朝大朗方向走,

无需约定,路程中,总能相会~

沿美景中路、美景东路,到达大朗镇,

至此与队友分别,

这些哥们实在是顶不住了。 独自再沿金朗中路、黄江方向 直线 飚回惠州, 期间口渴的不行, 买了瓶2L美年达,呼呼一口气干了二分之一,爽啊!!!!!

行吧,最后一张金华火腿

总结: 去程约77公里,全程往返154公里左右(数据来源百度地图) 花费: 康师傅矿泉水550ml 2元 木桶饭 8元 美年达 汽水2L 7元 共计17元


AsWing 应用之JTable的例子

2013-07-26 ActionScript3 AsWing

package
{
	import flash.display.Sprite;
	import org.aswing.ASColor;
	import org.aswing.JScrollPane;
	import org.aswing.JTable;
	import org.aswing.VectorListModel;
	import org.aswing.event.SelectionEvent;
	import org.aswing.table.PropertyTableModel;
	import org.aswing.table.sorter.TableSorter;
	/**
	 * 一个AsWing JTable的例子
	 [email protected] waylau.com
	 [email protected] 2013-7-26
	 */
	public class JTableExample extends Sprite
	{
		private var data:Array = [];  //表格数据源
		private var columns:Array = [];  //列项
		private var table:JTable;
		/**
		 * PropertyTableModel是JTable的表格模型之一,常常用于把一个对象列表中的对象数据,以对象为行,
		 * 以对象属性为列来显示,它提供默认方式把属性值以直接字符串化显示,也提供转换器(PropertyTranslator 或Function)
		 * 把值转换成期望的字符串格式来显示
		 */
		private var tableModel:PropertyTableModel; 
		/**
		* VectorListModel是AsWing自带的ListModel 实现,它的行为类似一个Vector, 
		* 可以随意在任何位置插入/删除数据,并且在数据改变时,会自动触发对应的事件,使得JList 自动更新界面显示。
		*/
		private var modeList:VectorListModel; 
		/**
		 * TableSorter表格排序器。它是TableModel 接口的一个实现,通过包装一个现有的 TableModel 来实现排序。
		 * 实现原理为:以选择排序方式为基准,变换原始TableModel 类的行的值,以达到变换行顺序的目的。
		 * 排序所采用的值比较函数,可以通过给指定列设定列类型,然后给指定列类型设定比较函数来达到。
		 * 默认情况下,所有列的类型都是Object 类型,TableSorter 自带String 和Number 类型的比较函数,
		 * 对于没有指定比较函数的列,默认将采用String 类型的比较函数
		 */
		private var sorter:TableSorter;

		public function JTableExample()
		{
			super();
			init();
		}

		private function init():void
		{		
			this.stage.frameRate = 25;
			data = [{name:"iiley", sex:1, age:26, score:99},
				{name:"Comeny", sex:0, age:24, score:100},
				{name:"Tom", sex:1, age:30, score:98},
				{name:"Lita", sex:0, age:16, score:36}]
			;
			modeList = new VectorListModel(data);
			columns = ["Name", "Sex", "age", "Score"] ;
			tableModel = new PropertyTableModel(modeList,columns,["name","sex","age","score"],[null,sexTranslator,null,null,]);
			sorter = new TableSorter(tableModel);

			this.table = new JTable(sorter);
			this.table.setRowHeight(22);
			//水平间隔线
			table.setShowHorizontalLines(false);
			//竖直间隔线
			table.setShowVerticalLines(false);
			//设置字体颜色,前景色
			 table.setForeground(new ASColor(0xffffff));
			//设置选中行的时候的字体颜色
			table.setSelectionForeground(new ASColor(0x123456));
			//拉伸的模式,随意拉伸
			this.table.setAutoResizeMode ( JTable.AUTO_RESIZE_OFF );
			//只能选择一行
	 		this.table.setSelectionMode ( JTable.SINGLE_SELECTION );
			//设置表格底色
			this.table.setBackground(new ASColor(0x000000));
			//设置监听row选中
			this.table.addEventListener(SelectionEvent.ROW_SELECTION_CHANGED,__rowSelectHandler);

			var panel:JScrollPane = new JScrollPane();
			panel.setSizeWH(200, 100);
			panel.append(this.table);
			this.addChild(panel);
		 	panel.validate();
		}
		/**
		 * row选择执行事件
		 */
		private function __rowSelectHandler(e:SelectionEvent):void
		{
			var rowCount : int = this.table.getSelectedRow();

			if(rowCount>0)
			{
				var row:Object = modeList.getElementAt(sorter.modelIndex(rowCount));
			}
			if(row!=null)
			{
				trace("Human"+" Name:"+row.name+",Sex:"+row.sex+",Age:"+row.age+",Score:"+row.score);
			}
		}
		/**
		 * 性别转换器
		 */
		private function sexTranslator(info:*, key:String):String
		{
			if(info[key]=="1")
			{
				return "男";
			}
			else
			{
				return "女";
			}
		}
	}
}  参考:

http://www.aswing.org/?tag=jtable

http://wiki.9ria.com/index.php/Aswing

http://www.ebibi.com/i/study/2010/0913/1262.html


纯AS3项目导入fl包的方法以及fl.controls.DataGrid的详细应用

2013-07-05 ActionScript3

在Flash CS4中打开“D:\Program Files\Adobe\Adobe Flash CS4\Common\Configuration\Components\”目录下的“User Interface.fla”文件 进入文件—发布设置—Flash—勾选“导出SWC” 点“导出影片”,输入文件名,确定之后就出现了swc文件 进入Flash builder,在ActionScript项目属性中引用刚刚导出的swc文件 这时就可以在源代码中 import fl.controls.* 并使用Flash CS4中的UI组件了

另外fl.controls.DataGrid的详细应用

参见:http://edutechwiki.unige.ch/en/Flash_datagrid_component_tutorial

http://crazyrabbit.blogbus.com/logs/38711416.html


AS3使用thrift的与JHava servlet服务器端通信

2013-06-22 ActionScript3 Java

##一、基本概念

Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 等等编程语言间无缝结合的、高效的服务。

Thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器。thrift允许你定义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。

官网地址:http://thrift.apache.org

###1.数据类型

基本类型: bool:布尔值,true 或 false,对应 Java 的 boolean byte:8 位有符号整数,对应 Java 的 byte i16:16 位有符号整数,对应 Java 的 short i32:32 位有符号整数,对应 Java 的 int i64:64 位有符号整数,对应 Java 的 long double:64 位浮点数,对应 Java 的 double string:utf-8编码的字符串,对应 Java 的 String 结构体类型: struct:定义公共的对象,类似于 C 语言中的结构体定义,在 Java 中是一个 JavaBean 容器类型: list:对应 Java 的 ArrayList set:对应 Java 的 HashSet map:对应 Java 的 HashMap 异常类型: exception:对应 Java 的 Exception 服务类型: service:对应服务的类

###2.服务端编码基本步骤:

实现服务处理接口impl 创建TProcessor 创建TServerTransport 创建TProtocol 创建TServer 启动Server 3.客户端编码基本步骤:

创建Transport 创建TProtocol 基于TTransport和TProtocol创建 Client 调用Client的相应方法 4.数据传输协议

TBinaryProtocol : 二进制格式. TCompactProtocol : 压缩格式 TJSONProtocol : JSON格式 TSimpleJSONProtocol : 提供JSON只写协议, 生成的文件很容易通过脚本语言解析 tips:客户端和服务端的协议要一致

##二、as3与java通信示例

test.thrift namespace java com.xzw.thrift namespace as3 com.xzw.thrift struct User{ 1:i32 userId, 2:string loginName, 3:string password, 4:string name }

exception UserNotFound{ 
    1:string msg  //as3中由于message是关键字,所以避免使用message关键字。 
} 

service UserService{ 
    User getUser(1:string loginName) throws (1:UserNotFound unf), 
    list<User> getUsers() 
}  通过命令生成java代码

thrift –gen java test.thrift

以上命令会生成gen-java的目录拷贝里面的代码到你的项目中。如图com.xzw.thrift就是

工具生成java类。

其中我们需要去实现UserService类中的IFace接口。代码如下: /* * To change this template, choose Tools Templates * and open the template in the editor. */ package com.xzw.service;
import com.xzw.thrift.User; 
import com.xzw.thrift.UserNotFound; 
import com.xzw.thrift.UserService; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.logging.Logger; 
import org.apache.thrift.TException; 

/** 
 * 
 * @author xzw 
 */ 
public class UserServiceHandler implements UserService.Iface{ 

    public User getUser(String loginName) throws UserNotFound, TException { 
        if(!"xuzhiwei".equals(loginName)){ 
            UserNotFound e = new UserNotFound("用户无法找到!"); 
            throw e; 
        }  
        User user = new User(); 
        user.setUserId(100); 
        user.setLoginName("xuzhiwei"); 
        user.setPassword("123456"); 
        user.setName("user1"); 
        Logger.getLogger("user=>"+user.toString()); 
        return user;  
    } 

    public List<User> getUsers() throws TException { 
       List<User> list = new ArrayList<User>();   
        User user = new User();   
        user.setUserId(100);   
       user.setLoginName("xuzhiwei"); 
        user.setPassword("123456"); 
        user.setName("user1");   
        list.add(user);   
        User user2 = new User();   
        user2.setUserId(200);   
        user2.setLoginName("login2");   
        user2.setPassword("pwd2");   
        user2.setName("user2");   
        list.add(user2);   

         Logger.getLogger("user list=>"+list.toString()); 
        return list;   
    } 

}
编写servlet,servlet需要继承thrift提供的类包TServlet即可,不需要去重写doGet,doPost方法。 /* * To change this template, choose Tools Templates * and open the template in the editor. */ package com.xzw.service;
import com.xzw.thrift.UserService; 
import org.apache.thrift.protocol.TBinaryProtocol; 
import org.apache.thrift.server.TServlet; 

/** 
 * 
 * @author xzw 
 */ 
public class UserServlet extends TServlet{   

     public UserServlet(){   
         super(new UserService.Processor(new UserServiceHandler()),new TBinaryProtocol.Factory(true, true)); 
     }        
}

以上就完成服务器端的编写了。

可以使用junit测试一下: /* * To change this template, choose Tools Templates * and open the template in the editor. */
import com.xzw.thrift.User; 
import com.xzw.thrift.UserService; 
import java.util.List; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import org.apache.thrift.TException; 
import org.apache.thrift.protocol.TBinaryProtocol; 
import org.apache.thrift.protocol.TProtocol; 
import org.apache.thrift.transport.THttpClient; 
import org.junit.*; 

/** 
 * 
 * @author xzw 
 */ 
public class TestServlet { 

     @Test 
    public void test(){ 
        String serveltUrl = "http://localhost:8080/test_thrift/userServlet"; 
        try { 
            THttpClient thc = new THttpClient(serveltUrl); 
            TProtocol lopFactory = new TBinaryProtocol(thc); 
           UserService.Client client = new UserService.Client(lopFactory); 

           List users = client.getUsers(); 
           System.out.println("-->>"+users.toString()); 
        } catch (TException ex) { 
            Logger.getLogger(TestServlet.class.getName()).log(Level.SEVERE, null, ex); 
        } 
   } 

    @Test 
    public void test2(){ 
        String serveltUrl = "http://localhost:8080/test_thrift/userServlet"; 
        try { 
            THttpClient thc = new THttpClient(serveltUrl); 
            TProtocol lopFactory = new TBinaryProtocol(thc); 
           UserService.Client client = new UserService.Client(lopFactory); 

           User user = client.getUser("xuzhiwei"); 
           System.out.println("-->"+user.toString()); 
        } catch (TException ex) { 
            Logger.getLogger(TestServlet.class.getName()).log(Level.SEVERE, null, ex); 
        } 
   } 
}

接下来生成as3代码

thrift –gen as3 test.thrift www.it165.net

以上代码会生成gen-as3的目录,拷贝目录下的代码到你的工程中。

编写as3客户端类:

package { 
import com.xzw.thrift.User; 
import com.xzw.thrift.UserNotFound; 
import com.xzw.thrift.UserService; 
import com.xzw.thrift.UserServiceImpl;

    import flash.display.Sprite; 
    import flash.net.URLRequest; 
    import flash.text.TextField; 

    import org.apache.thrift.protocol.TBinaryProtocol; 
    import org.apache.thrift.protocol.TProtocol; 
    import org.apache.thrift.transport.THttpClient; 

    public class testthrift extends Sprite 
    {  
        private const SERVER_URL:String = "http://localhost:8080/test_thrift/userServlet";  
        private var textField:TextField; 

        public function testthrift() 
        {  
            init(); 
            connServer();  
        } 

        private function init():void 
        { 
            textField = new TextField();  
            textField.width = 300; 
            textField.height = 500;  
            textField.autoSize = "left"; 
            addChild(textField); 
        } 

        private function connServer():void 
        {   //实例化URLRequest 
            var urlRequest:URLRequest = new URLRequest(SERVER_URL); 
            //实例化THttpClient 
            var thc:THttpClient = new THttpClient(urlRequest); 
            var protocol:TProtocol = new TBinaryProtocol(thc); 

            var usImpl:UserService = new UserServiceImpl(protocol); 
            usImpl.getUser("xuzhiwei",onError,onUserSuccess); 
            //usImpl.getUsers(onError,onSuccess); 
        } 

        private function onError(e:UserNotFound):void{ 
            trace(e); 
        } 

        private function onUserSuccess(user:User):void{ 
            trace("success:"); 
            trace(user); 
            textField.text = user.toString(); 
        } 

        private function onSuccess(user:Array):void{ 

            trace(user); 
            textField.text = user.toString(); 
        } 

    } 
}

写完了,测试结果

参考:http://xuzhiwei.blog.51cto.com/978424/1184540

http://jnb.ociweb.com/jnb/jnbJun2009.html


由“Jasperreports 4.1.2升级到5.1.2对flex项目的解析”到AS3 带命名空间的XML的操作

2013-06-21 Jasperreports

项目中,对Jasperreports-4.1.2核心包进行了升级,发现,前端flex无法对Jasperreports的格式进行解析了~

iReport 4.1 设计的模版可以解析,而iReport 4.6 设计的模版就不行了~

断点后,对比了从后台传过来的Jasperreports 的xml数据,发现存在差异

4.1.2包生成的xml数据jasperPrint标签为:

<jasperPrint name="report13" pageWidth="842" pageHeight="842" topMargin="0" leftMargin="0" bottomMargin="0" rightMargin="0" locale="zh_CN" timezone="Asia/Shanghai"> 5.1.2包生成的xml数据jasperPrint标签为:

<jasperPrint xmlns="http://jasperreports.sourceforge.net/jasperreports/print"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/print
http://jasperreports.sourceforge.net/xsd/jasperprint.xsd" name="report13"
pageWidth="842" pageHeight="842" topMargin="0" leftMargin="0" bottomMargin="0"
rightMargin="0" locale="zh_CN" timezone="Asia/Shanghai">

后期版本的Jasperreports核心包多生成了命名空间

而之前官方提供Jasperreports 的flex解析包net.sf.jasperreports.flex (来自Jasperreports的项目示例jasperreports-flash-4.0.0-project.zip)任然停留在2010年的版本未更新(估计Jasperreports放弃了对flash的支持),导致无法对新版本的xml数据进行解析

AS3对于带命名空间的XML的解析操作上有很大的差异,例如以下来自Jasperreports的ReportFactory.as

var props:XMLList = xml.property;
		for each (var prop:XML in props)
		{
			if (prop.@name == "net.sf.jasperreports.export.xml.start.page.index")
			{
				report.startPageIndex = int(prop.@value);
			}
			if (prop.@name == "net.sf.jasperreports.export.xml.end.page.index")
			{
				report.endPageIndex = int(prop.@value);
			}
			if (prop.@name == "net.sf.jasperreports.export.xml.page.count")
			{
				report.pageCount = int(prop.@value);
			}
		}

由于新版本多了命名空间,所以 直接xml.property 是无法获取到property的。要带上命名空间

var ns:Namespace = new Namespace("http://jasperreports.sourceforge.net/jasperreports/print");
trace(xml.ns::property);    //输出带名字空间的XML

由于 涉及到多个 命名空间,这种方式在该项目中不合适,且要修改后续的其他操作。

最简单的方式,就是 干掉命名空间,这样后续操作不变。

这个就涉及到XML的操作了。查XML api发现了removeNamespace(ns:Namespace):XML方法,以为轻松搞定,实验后 ,发现 不行。默认的命名空间(如 xmlns=”http://jasperreports.sourceforge.net/jasperreports/print”)无法删除。

用xml.children()方法取他孩子,发现,每个孩子也带上了命名空间。

最后用上了正则表达式。限定类型的命名表达式可以删除了。而且用了两次。汗。。

       var str:String = oldxml.toString();

       var str2:String = str.replace(/xmlns(.*?)="(.*?)"/gm, "").replace(/xsi(.*?)="(.*?)"/gm, "");

        xml = new XML(str2);