Ormlite在一般java环境(android)中操作Sqlite

来源:互联网 发布:兴奋剂 知乎 编辑:程序博客网 时间:2024/06/10 00:58

最开始接触ormlite是在android的开发中,ormlite的简单便利让我印象深刻。

这几天在研究顾客购物行为,需要使用到数据库,但是对于数据库的速度什么的要求不大,我首先想到的是Ormlite+Sqlite。

实体类

ormlite的官网http://ormlite.com/,最新版本4.41

因为是在一般java环境中使用,所以不需要那个android包。

ormlite-sqlite

引入包以后建立modal,例如:Commodity.java。因为使用的sqlite,主键自增长,设置为

@DatabaseField(generatedId = true)

完整的代码如下:

package com.cnblogs.htynkn.DataSpider.Modal;
 
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
 
/**
 * @author 夜明的孤行灯
 * @date 2012-6-29
 */
 
@DatabaseTable(tableName = "Commodity")
public class Commodity {
    @DatabaseField(generatedId = true)
    private int id;
    @DatabaseField(columnName = "Name")
    private String name;
    @DatabaseField(columnName = "JdKey")
    private String jdKey;
    @DatabaseField(columnName = "TbKey")
    private String tbKey;
 
    public Commodity() {
 
    }
 
    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 String getJdKey() {
        return jdKey;
    }
 
    public void setJdKey(String jdKey) {
        this.jdKey = jdKey;
    }
 
    public String getTbKey() {
        return tbKey;
    }
 
    public void setTbKey(String tbKey) {
        this.tbKey = tbKey;
    }
}

获取Dao

ormlite在android中的使用比较方便,有兴趣的朋友可以参考http://www.cnblogs.com/htynkn/archive/2011/10/30/android_ormlite_1.html

在上面的那篇文章中我们的DataHelper继承了OrmLiteSqliteOpenHelper。这是类是ormlite-android特有的。在一般的java环境中使用还不能这么简单。

Ormlite的官网有提到从jdbc入手,使用DaoManager创建Dao。比如:

String connectionString = "jdbc:sqlite:data.db";

意思是使用当前目录的data.db文件。ormlite没有包含sqlite的jdbc包,我们需要自己去下载一个。

这个地方一定要注意,sqlite的jdbc包有很多,我们必须要支持主键自增长那种。比如Xerial driver,我最开始使用的是Zentus driver,怎么弄都弄不起。

使用

DaoManager.createDao(GetConnectionSource(),Commodity.class);

获取Dao<Commodity, Integer>。如果需要创建表,可以使用TableUtils。

完整代码如下:

package com.cnblogs.htynkn.DataSpider.Data;
 
import java.sql.SQLException;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
import com.cnblogs.htynkn.DataSpider.Modal.Commodity;
import com.cnblogs.htynkn.DataSpider.Modal.TransactionRecord;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager;
import com.j256.ormlite.jdbc.JdbcConnectionSource;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;
 
/**
 * @author 夜明的孤行灯
 * @date 2012-6-29
 */
 
public class SqliteOpenHelper {
    private static Log log = LogFactory.getLog(SqliteOpenHelper.class);
    private static Dao
    private static Dao commodityDao;
 
    public static Dao GetCommodityDao() throws SQLException {
        if (commodityDao == null) {
            commodityDao = DaoManager.createDao(GetConnectionSource(),
                    Commodity.class);
        }
        return commodityDao;
    }
 
    public static void init() {
        try {
            TableUtils.createTable(GetConnectionSource(), Commodity.class);
        }catch (Exception exception) {
            log.warn("创建Commodity表失败 : " + exception.getMessage());
        }
    }
 
    public static ConnectionSource GetConnectionSource() throws SQLException {
        String connectionString = "jdbc:sqlite:data.db";
        return new JdbcConnectionSource(connectionString);
    }
}

 

高级查询

ormlite的Dao支持简单的添加、删除、修改还有按照Id查询,当然也可以使用原生的SQL。如果需要条件查询就需要使用QueryBuilder了。

QueryBuilder qb = dao.queryBuilder();

举个例子,我们需要查询一个时间段的数据

qb.where().between("TransactionTime", start, end);
return qb.query();

这里会返回一个List,然后在继续处理就行了。

如果确实需要使用原生的SQL语句就可以用

dao.queryRaw(query, arguments)
原创粉丝点击