android对象关系映射框架ormlite学习
2015-03-25 18:41
465 查看
总感觉用原始的SQLLiteHelper操作数据库有点麻烦,上网找了些android数据库orm框架,对比了一下,现在使用ormlite的人貌似挺多的,在网上找了ormlite官方文档,根据官方文档,今天写了个demo,主要是用户注册,用户信息查看以及删除,运行效果如图:以前也用过一个同样的orm框架Afinal,但是感觉Afinal没有ormlite之强大。
Ormlite官网:http://ormlite.com/ 开发文档下载(pdf)。 但是是英文文档哦,不要一看到是英文的就害怕了,其实里面单词比较简单,能够看得懂的,多看看英文文档还是挺有帮助的。
一:要使用ormlite很简单,只需要下载相应的两个jar包(目前最新的jar包ormlite-android-4.48.jar,ormlite-core-4.48.jar下载)并导入工程即可。
二:创建实体类
三:创建SQLLiteOpenHelper,在这里有两个比较重要的类OrmLiteSqliteOpenHelper(当你的应用被加载时创建和更新数据库以及为其他的类提供DAO类,必须实现onCreate(SQLiteDatabasesqliteDatabase, ConnectionSource
connectionSource) and onUpgrade(SQLiteDatabasedatabase, ConnectionSource
connectionSource, intoldVersion, int newVersion).这两个类),RuntimeExceptionDao(默认情况下,大多数的dao方法都会抛出SQLException,因为SQLException是大部分jdbc以及其他的sql调用时抛出的默认异常。 但是在androidpíng台上,尤其是,绝大部分的异常继承了RuntimeException,添加了一个RuntimeExceptionDao来封装所有在运行时因调用底层dao方法所抛出的运行时异常。)
四:接下来就是Activity了。
MainActivity:当程序运行便进入该类,主要是显示页面的那几个按钮以及显示查询出来的用户信息。
对应的布局文件:main.xml
RegistActivity:用户注册类
对应的布局文件:activity_main.xml
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调用时抛出的默认异常。 但是在androidpíng台上,尤其是,绝大部分的异常继承了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="注册"/> <p></LinearLayout></p><p> </p><p>转载自:http://www.sjsjw.com/kf_mobile/article/030330ABA026965.asp</p>
相关文章推荐
- android对象关系映射框架ormlite学习之单表操作
- android对象关系映射框架ormlite学习之多对多(ManyToMany)
- android对象关系映射框架ormlite之一对多(OneToMany)
- android对象关系映射框架ormlite之一对多(OneToMany)
- android Sqlite数据库对象模型ORMLite框架学习
- Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包
- Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包
- Android ORMLite 框架初步学习
- Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java
- Android项目快速开发框架探索(Mysql + OrmLite + Hessian + Sqlite)
- Android数据库ORMlite框架02
- Android ormlite 框架介绍
- Android Ormlite 学习笔记1 -- 基础
- Android项目快速开发框架探索(Mysql + OrmLite + Hessian + Sqlite)
- Android数据库ORMlite框架翻译系列(第二章:part 2)
- Android数据库ORMlite框架翻译系列(第二章:part 3)
- Android使用OrmLite数据库框架 之 使用表配置文件
- Android数据库ORMlite框架翻译系列
- Android ormlite 框架介绍
- Android数据库ORMlite框架翻译系列(第二章:part 2)