sqliteAndroid项目飞速支付框架探索(Mysql + OrmLite + Hessian + Sqlite)

 

前言

结缘从前所用的ormlite和hessian,再加上SAE已经协助JAVA,把服务端切换来JAVA,也就有了本文。使用hessian来做多少传输,ormlite来落成客户端与服务端的数额存储,极大的缩小了CRUD工作。本文为探索贴,未正式用于大型项目,欢迎我们谈谈使用!

 

声明
  欢迎转发,但请保留文章原来出处:)
    博客园:http://www.cnblogs.com
    农民三伯:
http://www.cnblogs.com/over140/ 

 

正文

一、简介

1.1 ormlite

Ormlite[Object Relational Mapping Lite (ORM Lite)]

对象关联映射精简版(精简版的ORM)提供了一些不难易行的,轻量级持久化Java对象到SQL数据库,同时也幸免了复杂和越来越多的规范的ORM包的花费的出力。

支撑数据库的jdbc调用,当然,最重点的早晚是它支持android原生的数据库api调用sqlite。

——转载自这里。 

1.2 hessian 

采用方法参照本博两篇作品:

[hessdroid]Android下行使Hessian与Java服务端通信 

[hessdroid]Android下使用Hessian与Java服务端通信的传值测试 

 

1.3
Android很快支付框架表达

设想如下多少个性状:

a).
客户端(Android)和服务端均使用Java语言 

b).
客户端(Android)和服务端均协助Hessian和ormlite框架

c).
完整的扶助面向对象开发:存储和互动传输 

 

二、准备

2.1 开发条件

为了有利于同时开发Android和Java Web,那里下载的是Eclipse IDE for
Java EE Developers版本,然后安装新型的ADT插件和TOMCAT插件。

2.2 服务端

应用服务器使用Tomcat,选拔Java(JSP/Servlet)来促成服务端的作业逻辑,数据库使用Mysql。飞快框架搭建推荐大家利用XAMPP(集成Apache、MySQL、PHP等,帮辛苦色安装)。

2.3 客户端

普通的Android环境

2.4 通讯与储存表明

服务端与客户端通过Hessian举行数据沟通,通过Ormlite保存数据库(通过JDBC保存到服务端的MYSQL数据库,也得以直接保存到客户端的sqlite数据库);

 

三、代码

3.1
项目工程截图(服务端)

sqlite 1

 HOLib共用来客户端和服务端,保障接口和数码对象一致性。

 

3.2 重点代码分析

3.2.1 服务端

web.xml

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<web-app xmlns=”http://java.sun.com/xml/ns/j2ee” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd”
    version=”2.4″>

    <servlet>
        <servlet-name>user</servlet-name>
        <servlet-class>com.nmbb.ho.server.servlet.UserServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>user</servlet-name>
        <url-pattern>/user.do</url-pattern>
    </servlet-mapping>
    
    <listener>
        <listener-class>com.nmbb.ho.server.StartupInit</listener-class>
    </listener>

</web-app>

 

StartupInit.java

public class StartupInit implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        try {
            TableUtils.dropTable(OrmliteHelper.getConnection(), POUser.class,
                    true);
            //创立数据库
            TableUtils.createTable(OrmliteHelper.getConnection(), POUser.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {

    }

}

  
代码表明:

StartupInit可用来创建数量库表结构,那里用于测试,真实环境注意数据丢失难点。

POUser.java

@DatabaseTable(tableName = “nmbb_users”)
public class POUser implements Serializable {

    /** 用户号码,6位数字 */
    @DatabaseField(generatedId = true)
    public int suid;

    /** 用户名 */
    @DatabaseField(width = 30)
    public String username;

    /** 密码 */
    @DatabaseField(width = 30)
    public String password;

    /** 昵称 */
    @DatabaseField(width = 60)
    public String nickname;

    /** 200 正常 201 数据校验错误 202用户已经存在 */
    public int status = 200;

    /** 用于放错误新闻 */
    public String msg;

    public POUser() {

    }
}

 
代码表明:

小心必要一个空的构造函数,其余请参见ormlite资料。 

 

UserServlet.java 

/**
 * 用户Servlet
 * 
 * @author 农民岳丈
 * @see http://www.cnblogs.com/over140/archive/2013/02/19/2917231.html
 *
 */
public class UserServlet extends HessianServlet implements IUserService {

    @Override
    public POUser register(String username, String password) {
        POUser result = new POUser();

        System.out.println(“[UserServlet.register]…”);

        // 检测数据是或不是合法
        if (isEmpty(username) || isEmpty(password)) {
            result.status = 201;
            result.msg = “用户名或密码不可以为空”;
        } else {
            // 检测用户是或不是存在
            OrmliteHelper<POUser> db = new OrmliteHelper<POUser>();
            if (db.exist(POUser.class, “username”, username)) {
                result.status = 202;
                result.msg = “用户名已经存在”;
            } else {
                result.username = username;
                result.password = password;
                db.create(result);// 入库
                result.msg = “注册成功”;
                System.out.println(“create user suid:” + result.suid);
            }
        }
        return result;
    }

    @Override
    public List<POUser> query(int suid, int startIndex, int pageSize) {
        return new OrmliteHelper<POUser>().query(POUser.class, “suid”, suid, startIndex, pageSize) ;
    }

    /**
     * 判断字符串是或不是为空
     * 
     * @param str
     * @return
     */
    public static boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }
}

 

3.2.2
客户端(Android)  

public class UserActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void OnClickRegiger(View view) {
        new AsyncTask<Void, Void, POUser>() {

            @Override
            protected POUser doInBackground(Void… params) {
                String url = “http://192.168.68.23:8081/HOServer/user.do“;
                HessianProxyFactory factory = new HessianProxyFactory();
                try {
                    factory.setDebug(true);
                    factory.setReadTimeout(5000);
                    //不安装会报 expected hessian reply at 0x48 
                    factory.setHessian2Reply(false);
                    IUserService basic = (IUserService) factory.create(IUserService.class, url, getClassLoader());
                    return basic.register(“admin”, “123456”);

                } catch (MalformedURLException e) {
                    Log.e(“UserActivity”, “OnClickRegiger”, e);
                } catch (Exception e) {
                    Log.e(“UserActivity”, “OnClickRegiger”, e);
                }
                return null;
            }

            @Override
            protected void onPostExecute(POUser result) {
                if (result != null) {
                    if (result.status == 200) {
                        //保存入库
                        new DbHelper<POUser>().create(result);
                    }
                    Toast.makeText(UserActivity.this, “” + result.msg, Toast.LENGTH_LONG).show();
                }
            };

        }.execute();

    }
}

 

代码表达:

1、DbHelper在源码里给出。 

2、倘使项目无法编译通过,请留心设置项目标字符编码、JDK版本、Android的本子。 

 

三、总结

5.1 优点

a). 完周密向对象开发

b).
下跌项目标复杂度,裁减引入其余框架所拉动的纷纷 

c).
分外适合一个费用服务端和客户端

足够的运用的框架的特色,提交支付效用,适合中小型项目火速支付。 

5.2 缺点

a).
注意服务端与客户端共用id的题材

5.3 其他

a).
ormlite援救标准的JPA助记符,这里。那样服务端采取Hibernate应该也是足以的,有时光可以做一个结合例子看看。

b).
测试发现任何框架也适用于SAE,如若一个人承担客户端和服务端,那就太甜蜜了!

 

四、下载

 AndroidFramework2013-03-05.zip
 

 

结束

探讨永无止境!

 

网站地图xml地图