首页 > 代码库 > android开发--ormlite

android开发--ormlite

   ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具。
  官方网站:http://ormlite.com/ 
  如果需要开发android,只需要下载core和android两个jar包:

    技术分享

  

  ORMlite的使用

  1,建立映射关系
 

 

  Ormlite与数据库的映射关系式通过注释来说明的。
  注释分为对于表的和对于单个列的:@DatabaseTable ,注释表的, @DatabaseField 注释单个列的。

·   首先注释:table,@

  DatabaseTable 如果默认为类名的话,后面不需要添加类名注释。

·   然后:确定需要的字段,在字段上面添加注释:@DatabaseField 如果对字段有特别的要求,那么添加以下相关的注释,例如id。

    

@DatabaseTable(tableName="t_message")
public class Message {
    
    @DatabaseField(generatedId=true)
    private int id;
    
    @DatabaseField(columnName="tou1")
    private String tou1;
    
    @DatabaseField(columnName="userName")
    private String userName;
    
    @DatabaseField(columnName="lastMessage")
    private String lastMessage;
    
    @DatabaseField(columnName="datetime")
    private String datetime;
    
    public String getTou1() {
        return tou1;
    }
    public void setTou1(String tou1) {
        this.tou1 = tou1;
    }

    2,建立数据库和基本的工具

   在Android的开发中,google原版封装了一个SqliteOpenHelper,供开发者调用,在OrmLite中,对原版的工具进行了加强,提供一个继承自SqliteOpenHelper的OrmLiteSqliteOpenHelper工具。 

  像android一样,我们继承这个工具类。 

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

    private static final String DB_NAME = "mydata.db"; // 数据库名称
    private static final int version = 2; // 数据库版本
    //定义每一张表的成员变量,其中一个功能:关闭helper,所有DAO对象清理
    private Dao<Message, Integer> messageDao;
    
    public Dao<Message, Integer> getMessageDao() {
        if (messageDao==null){
            try {
                messageDao = getDao(Message.class);                
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return messageDao;
    }

    public DatabaseHelper(Context context) {
        super(context, DB_NAME, null, version);
    }

    /*
     * 1.此方法,不会自定执行,因为它不是回调函数
     * 2.最好也不要自己调用,因为只应该执行1次
     */
    @Override
    public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
        // TODO Auto-generated method stub
        
    }

    /*
     * 此方法,不会自定执行,因为它不是回调函数
     */
    @Override
    public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2,
            int arg3) {
        // TODO Auto-generated method stub        
    }

  MyDatabaseOpenHelper类

  

public class MyDatabaseOpenHelper extends SQLiteOpenHelper {

    private static final String DB_NAME = "mydata.db"; // 数据库名称
    private static final int version = 2; // 数据库版本

    public MyDatabaseOpenHelper(Context context) {
        super(context, DB_NAME, null, version);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        // 编写【从0开始到最新状态】建表语句
        Log.i("hi", "没有数据库,创建数据库,创建v2.0成功");
        String sql_message = "create table t_message (id int primary key,tou1  varchar(50),userName varchar(50),lastMessage varchar(50),datetime  varchar(50))";
        String sql_init_1 = "insert into t_message values (1,‘abc‘,‘abc1‘,‘abcd1‘,‘hi1‘)";
        String sql_init_2 = "insert into t_message values (2,‘abc‘,‘abc2‘,‘abcd2‘,‘hi1‘)";
        String sql_init_3 = "insert into t_message values (3,‘abc‘,‘abc2‘,‘abcd2‘,‘hi1‘)";
        db.execSQL(sql_message);
        db.execSQL(sql_init_1);
        db.execSQL(sql_init_2);
        db.execSQL(sql_init_3);
    }

    MainActivity类,listview显示数据

public class MainActivity extends Activity {

    private SimpleAdapter sa;
    private ListView lv;
    private List<Message> messageList = new ArrayList<Message>();
    private List<Map<String,Object> > messageList2 = new ArrayList<Map<String,Object> >();
    private List<Message> messageList3;//用于ORMLite 的演示
    
    private DatabaseHelper db_helper;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.weixin);

        //此3行代码用于创建表结构,以及初始化数据
        MyDatabaseOpenHelper helper = new MyDatabaseOpenHelper(MainActivity.this);
        SQLiteDatabase db = helper.getWritableDatabase();
        db.close();
            
        lv = (ListView)findViewById(R.id.listView1);
        sa = new SimpleAdapter(this,
                messageList2,//data 不仅仅是数据,而是一个与界面耦合的数据混合体
                R.layout.listview_item_layout,
                new String[] {"tou","userName","lastMessage","datetime"},//from 从来来
                new int[] {R.id.imageView1,R.id.tv_userName,R.id.tv_lastMessage,R.id.tv_datetime}//to 到那里去
                );
        lv.setAdapter(sa);
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Map<String,Object> item = messageList2.get(position);
                item.put("userName", "赵本山"+position);
                sa.notifyDataSetChanged();
                //Toast.makeText(MainActivity.this, (String)item.get("userName"), Toast.LENGTH_SHORT).show();
                
                                        
            }         
        });
         //UI呈现在眼前
    @Override
    protected void onResume(){
        Log.i("ok", "onResume,界面出现了");
        
         //使用ORMLite
        db_helper = new DatabaseHelper(this);
        Dao<Message, Integer> message_dao = db_helper.getMessageDao();
        try {
            messageList3 = message_dao.queryForAll();
            //Log.i("ormlite", "记录条数:"+messageList3.size());
            String t = "记录条数:"+messageList3.size();
            Toast.makeText(this, t, Toast.LENGTH_LONG).show();
            
        } catch (SQLException e) {
            String t = "记出错:"+e.getMessage();
            Toast.makeText(this, t, Toast.LENGTH_LONG).show();
        }    
        
        for (int i = 0; i < messageList3.size(); i++) {
                    
            //定义一个界面与数据的混合体,一个item代表一行记录
            Map<String,Object> item  = new HashMap<String,Object>();
            //一行记录,包含多个控件
            item.put("tou", R.drawable.tou1);
            item.put("userName", messageList3.get(i).getUserName()+i);
            item.put("lastMessage", messageList3.get(i).getLastMessage());
            item.put("datetime",messageList3.get(i).getDatetime());
            messageList2.add(item);
        }
        super.onResume();
    }

    效果图

    技术分享

    注:ORMLite还提供了一些基类ORMLiteBaseActivity,ORMLiteBaseService之类的,便于数据库操作的,

android开发--ormlite