android对象关系映射框架ormlite学习

总感觉用原始的SQLLiteHelper操作数据库有点麻烦,上网找了些android数据库orm框架,对比了一下,现在使用ormlite的人貌似挺多的,在网上找了ormlite官方文档,根据官方文档,今天写了个demo,主要是用户注册,用户信息查看以及删除,运行效果如图:以前也用过一个同样的orm框架Afinal,但是感觉Afinal没有ormlite之强大。

android对象关系映射框架ormlite学习

Ormlite官网:http://ormlite.com/     开发文档下载(pdf)。 但是是英文文档哦,不要一看到是英文的就害怕了,其实里面单词比较简单,能够看得懂的,多看看英文文档还是挺有帮助的。

一:要使用ormlite很简单,只需要下载相应的两个jar包(目前最新的jar包ormlite-android-4.48.jar,ormlite-core-4.48.jar下载)并导入工程即可。

二:创建实体类

@DatabaseTable(tableName = "tb_user")
//如果没有特别指出tableName = "tb_user",那么默认情况将类名作为表名
//这里也可以使用注解@Entity,因为ORMLite既支持它自己的注解(@DatabaseTable和 @DatabaseField)也支持很多来自javax.persistence包中标准的注解。
//你可以使用来自javax.persistence包的更多的标准JPA注解。
public class User {
	//用户编号
	/**
	 * id:这个字段是否为主键,默认为false
	 * generatedId:字段是否自动增加。默认为false。
	 * 注意:id和generatedId只能指明一个,否则会报错的
	 */
	//可以用javax.persistence注解: @Id,@Column
	@DatabaseField(generatedId=true)
	private int userId;
	//用户名
	@DatabaseField
	private String userName;
	//密码
	@DatabaseField
	private String password;
	
	public User() {
		//必须提供无参构造函数,这样查询的时候可以返回查询出来的对象
	}
	public User( int userId,String userName, String password) {
		this.userId = userId;
		this.userName = userName;
		this.password = password;
	}
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

三:创建SQLLiteOpenHelper,在这里有两个比较重要的类OrmLiteSqliteOpenHelper(当你的应用被加载时创建和更新数据库以及为其他的类提供DAO类,必须实现onCreate(SQLiteDatabasesqliteDatabase, ConnectionSource

connectionSource) and onUpgrade(SQLiteDatabasedatabase, ConnectionSource

connectionSource, intoldVersion, int newVersion).这两个类),RuntimeExceptionDao(默认情况下,大多数的dao方法都会抛出SQLException,因为SQLException是大部分jdbc以及其他的sql调用时抛出的默认异常。 但是在android平台上,尤其是,绝大部分的异常继承了RuntimeException,添加了一个RuntimeExceptionDao来封装所有在运行时因调用底层dao方法所抛出的运行时异常。)

public class DatabaseHelper extends OrmLiteSqliteOpenHelper{
    // 数据库名称  
	private static final String DATABASE_NAME = "helloAndroid.db"; 
    // 数据库version  
	private static final int DATABASE_VERSION = 1;
	
	/**
	 * 包含两个泛型:
	 * 第一个泛型表DAO操作的类
	 * 第二个表示操作类的主键类型
	 */
	private Dao<User, Integer> userDao = null;
	
	private RuntimeExceptionDao<User, Integer> simpleRuntimeDao = null;
    
	public DatabaseHelper(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}
	
	@Override
	public void onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource) {
		try {
			Log.i(DatabaseHelper.class.getName(), "onCreate");
			TableUtils.createTable(connectionSource, User.class);
		} catch (SQLException e) {
			Log.e(DatabaseHelper.class.getName(), "Can‘t create database", e);
			throw new RuntimeException(e);
		}
		
	}
	/**
	 * 插入一条数据
	 */
	public void insert(User user){
		RuntimeExceptionDao<User, Integer> dao = getSimpleDataDao();
		//通过实体对象创建在数据库中创建一条数据,成功返回1,说明插入了一条数据
		Log.i("test", "dao = " + dao+"  user= "+user);
		int returnValue = dao.create(user);
		Log.i("test", "插入数据后返回值:"+returnValue);
	}
	/**
	 * 查询所有的用户信息
	 * @return
	 */
	public List<User> findAllUser(){
		RuntimeExceptionDao<User, Integer> dao = getSimpleDataDao();
		return dao.queryForAll();
	}
	/**
	 * 删除第一条用户信息
	 */
	public void deleteById(){
		RuntimeExceptionDao<User, Integer> dao = getSimpleDataDao();
		List<User> list = dao.queryForAll();
		//删除成功返回1(删除了一条数据)
		if(list.size()>0){
			int returnValue = dao.deleteById(list.get(0).getUserId());
			Log.i("test", "删除一条数据后返回值:"+returnValue);
		}
		
	}
	/**
	 * 批量删除用户信息
	 */
	public void deleteByIds(){
		RuntimeExceptionDao<User, Integer> dao = getSimpleDataDao();
		List<User> list = dao.queryForAll();
		List<Integer> ids = new ArrayList<Integer>();
		if(list.size()>0){
			for(User u:list){
				ids.add(u.getUserId());
			}
			//返回删除的记录数
			int returnValue = dao.deleteIds(ids);
			Log.i("test", "批量删除后返回值:"+returnValue);
		}
		
	}
	
	public RuntimeExceptionDao<User, Integer> getSimpleDataDao() {
		if (simpleRuntimeDao == null) {
			simpleRuntimeDao = getRuntimeExceptionDao(User.class);
		}
		Log.i("test", "simpleRuntimeDao ======= "+simpleRuntimeDao);
		return simpleRuntimeDao;
	}

	/**
	 * 这个方法在你的应用升级以及它有一个更高的版本号时调用。所以需要你调整各种数据来适应新的版本
	 */
	@Override
	public void onUpgrade(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource, int oldVersion,
			int newVersion) {
		Log.i("test", "更新....");
		try {
			Log.i(DatabaseHelper.class.getName(), "onUpgrade");
			//删掉旧版本的数据
			TableUtils.dropTable(connectionSource, User.class, true);
			//创建一个新的版本
			onCreate(sqliteDatabase, connectionSource);
		} catch (SQLException e) {
			Log.e(DatabaseHelper.class.getName(), "Can‘t drop databases", e);
			throw new RuntimeException(e);
		}
	}
	
	public Dao<User, Integer> getDao() throws SQLException {
		if (userDao == null) {
			userDao = getDao(User.class);
		}
		return userDao;
	}
}

四:接下来就是Activity了。

MainActivity:当程序运行便进入该类,主要是显示页面的那几个按钮以及显示查询出来的用户信息。

public class MainActivity extends Activity {

	Button button1;//注册按钮
	Button button2;//显示按钮
	Button button3;//删除按钮
	Button button4;//批量删除按钮
	TextView textView;//用来显示查询到的用户信息
	DatabaseHelper helper = new DatabaseHelper(this);
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		button1 = (Button)this.findViewById(R.id.main_btn_regist);
		button2 = (Button)this.findViewById(R.id.main_btn_show);
		button3 = (Button)this.findViewById(R.id.main_btn_delete);
		button4 = (Button)this.findViewById(R.id.main_btn_deleteAll);
		textView = (TextView)this.findViewById(R.id.main_show_user);
		//点击注册按钮跳转到注册页面
		button1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(MainActivity.this, RegistActivity.class);
				startActivity(intent);
			}
		});
		//点击“显示”按钮跳转到用户信息显示页面并将注册用户信息显示出来
		button2.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				List<User> userList = helper.findAllUser();
				String str = "";
				if(userList.size()>0){
					//将查询到的用户信息显示出来
					for(User user:userList){
						str+="用户"+user.getUserId()+":"+user.getUserName()+"    密码:"+user.getPassword();
					}
					textView.setText(str);
				}else{
					textView.setText("亲!还没注册吧!");
				}
			}
		});
		//删除一条记录
		button3.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				helper.deleteById();
			}
		});
		//批量删除
		button4.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				helper.deleteByIds();
			}
		});
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

对应的布局文件:main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity" >

    <Button 
        android:id="@+id/main_btn_regist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="注册"/>
    
    <Button 
        android:id="@+id/main_btn_show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="显示"/>
    
    <Button 
        android:id="@+id/main_btn_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除"/>
    
    <Button 
        android:id="@+id/main_btn_deleteAll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="批量删除"/>
    
    <TextView 
        android:id="@+id/main_show_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

RegistActivity:用户注册类

/**
 * 用户注册
 * @author leox
 *
 */
public class RegistActivity  extends Activity {
	EditText userNameEdit;//用户名编辑框
	EditText passwordEdit;//密码编辑框
	Button reButton;//注册按钮
	
	DatabaseHelper helper = new DatabaseHelper(this);
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		userNameEdit = (EditText)this.findViewById(R.id.et_username);
		passwordEdit = (EditText)this.findViewById(R.id.et_password);
		reButton = (Button)this.findViewById(R.id.btn_regist);
		reButton.setOnClickListener(new myClickListener());
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	class myClickListener implements OnClickListener{
		@Override
		public void onClick(View v) {
			//用户名
			String userName = userNameEdit.getText().toString();
			//密码
			String password = passwordEdit.getText().toString();
			
			User user = new User();
			user.setUserName(userName);
			user.setPassword(password);
			//插入注册用户信息
			helper.insert(user);
			Intent intent = new Intent();
			intent.setClass(RegistActivity.this, MainActivity.class);
			startActivity(intent);
		}
		
	}
}

对应的布局文件:activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".RegistActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:text="用户注册" />
    
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="用户名:"/>
        <EditText
            android:id="@+id/et_username"
            android:layout_width="200px"
            android:layout_height="wrap_content" />
    </LinearLayout>
    
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密码:"/>
        <EditText
            android:id="@+id/et_password"
            android:layout_width="200px"
            android:layout_height="wrap_content"
            android:password="true"/>
    </LinearLayout>
    
    <Button 
        android:id="@+id/btn_regist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="注册"/>

</LinearLayout>








android对象关系映射框架ormlite学习,布布扣,bubuko.com

android对象关系映射框架ormlite学习

上一篇:Android 4.4 Kitkat Phone工作流程浅析(三)__MO(去电)流程分析


下一篇:Android布局属性详解