之前在項目中使用數據庫存儲數據比較少,一般用SharedPreferences就夠了,簡單的存儲一些名稱和密碼,個人配置信息,但是在當存儲的信息量大的時候肯定要用到數據庫的,爲了提高我們的開發效率。第一次在項目中看到使用 ORMLite
框架來定義存儲的數據感覺比較簡單,不過要注意一些細節。
下面簡單寫一下使用ORMLite 框架的用法
1、下載 ORMLite Jar
首先去ORMLite官網下載jar包,對於Android爲:ormlite-android-4.48.jar 和 ormlite-core-4.48.jar ;
2、寫類繼承OrmLiteSqliteOpenHelper
需要實現兩個方法:
1、onCreate(SQLiteDatabase database,ConnectionSource connectionSource)
創建表,我們直接使用ormlite提供的TableUtils.createTable(connectionSource, User.class);進行創建~
2、onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion)
更新表,使用ormlite提供的TableUtils.dropTable(connectionSource, User.class, true);進行刪除操作~
刪除完成後,別忘了,創建操作:onCreate(database, connectionSource);
/* 涼菇涼 */
public class ToolDatabase extends OrmLiteSqliteOpenHelper {
private static String databaseName;
private static int databaseVersion;
private static List<Class>table=new ArrayList<Class>();
private static ToolDatabase dbHelper;
/**
* 必須對外提供public構造函數(實例化不用該方法)
* @param context
*/
public ToolDatabase(Context context){
super(context, databaseName, null, databaseVersion);
}
/**
* 實例化對象
* @return
*/
public static ToolDatabase gainInstance(Context context,String dbName,int version){
if(dbHelper==null){
databaseName=dbName;
databaseVersion=version;
dbHelper=OpenHelperManager.getHelper
(context, ToolDatabase.class);
}
return dbHelper;
}
/**
* 釋放數據庫的連接
*/
public void releaseAll(){
if(dbHelper!=null){
OpenHelperManager.releaseHelper();
dbHelper = null;
}
}
/**
* 配置實體
* @param cls
*/
public void addEntity(Class cls){
table.add(cls);
}
/**
* 創建表
* @param entity 實體
*/
public void createTable(Class entity){
try {
TableUtils.createTableIfNotExists(getConnectionSource(), entity);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 刪除表
* @param entity 實體
*/
public void dropTable(Class entity) {
try {
TableUtils.dropTable(getConnectionSource(), entity, true);
} catch (SQLException e) {
Log.e(ToolDatabase.class.getName(), "Unable to drop datbases", e);
}
}
/**
* 創建數據庫
*/
@Override
public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
try {
for(Class entity:table){
TableUtils.createTableIfNotExists(getConnectionSource(), entity);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 更新SQLite數據庫
*/
@Override
public void onUpgrade(SQLiteDatabase sqliteDatabase,
ConnectionSource connectionSource, int oldVer, int newVer) {
try {
for (Class entity : table) {
TableUtils.dropTable(connectionSource, entity, true);
}
onCreate(sqliteDatabase, connectionSource);
} catch (SQLException e) {
Log.e(ToolDatabase.class.getName(),
"Unable to upgrade database from version " + oldVer
+ " to new " + newVer, e);
}
}
}
3、在mainactivity中使用增刪改的操作
public class MainActivity extends Activity implements OnClickListener{
private EditText et_username, et_email, et_u_username, et_u_email;
private Button btn_add, btn_update, btn_first_page, btn_per_page,btn_next_page, btn_end_page;
private ListView lv_userlist;
private ToolDatabase dbHelper;
private User selectItem = null;
private Dao<User,String>userDao;
public static final String DB_NAME="zftlive";
public static final int DB_VERSION=1;
private UserListAdapter userListAdapter;
private ArrayList<User>users;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_username = (EditText) findViewById(R.id.et_username);
et_email = (EditText) findViewById(R.id.et_email);
et_u_username = (EditText) findViewById(R.id.et_u_username);
et_u_email = (EditText) findViewById(R.id.et_u_email);
btn_add = (Button) findViewById(R.id.btn_add);
btn_update = (Button) findViewById(R.id.btn_update);
btn_first_page = (Button) findViewById(R.id.btn_first_page);
btn_per_page = (Button) findViewById(R.id.btn_per_page);
btn_next_page = (Button) findViewById(R.id.btn_next_page);
btn_end_page = (Button) findViewById(R.id.btn_end_page);
//實例化dbhelper
dbHelper=ToolDatabase.gainInstance(MainActivity.this, DB_NAME, DB_VERSION);
dbHelper.createTable(User.class);
try {
userDao=dbHelper.getDao(User.class);
lv_userlist = (ListView) findViewById(R.id.lv_userlist);
users=(ArrayList<User>) userDao.queryForAll();
// Log.i("tag", "請求的用戶"+users.size()+users.get(0).getUsername()+users.get(0).getEmail());
userListAdapter=new UserListAdapter(MainActivity.this, users);
lv_userlist.setAdapter(userListAdapter);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// queryUserList();
//點擊添加按鈕的監聽事件
btn_add.setOnClickListener(this);
//點擊保存的按鈕監聽事件
btn_update.setOnClickListener(this);
//查詢用戶
// queryUserList();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
//添加數據
case R.id.btn_add:
addData();
break;
case R.id.btn_update:
//點擊保存的按鈕
updata();
break;
default:
break;
}
}
/**
* 修改保存後的操作
*/
public void updata(){
AndroidDatabaseConnection conn=null;
String userName=et_u_username.getText().toString();
String email=et_u_email.getText().toString();
if(userName==null || userName.equals("")||email==null || email.equals("") ){
Toast.makeText(MainActivity.this , "請選擇修改的項", Toast.LENGTH_SHORT).show();
return;
}
try {
if(null!=selectItem){
conn=new AndroidDatabaseConnection(dbHelper.getWritableDatabase(), true);
conn.setAutoCommit(false);
selectItem.setUsername(userName);
selectItem.setEmail(email);
userDao.update(selectItem);
conn.commit(null);
Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
//刷新列表
queryUserList();
}else{
Toast.makeText(MainActivity.this, "沒有選擇用戶", Toast.LENGTH_SHORT).show();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(null!=conn){
try {
conn.rollback(null);
conn.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
public static String gainUUID(){
String strUUID = UUID.randomUUID().toString();
strUUID = strUUID.replaceAll("-", "").toLowerCase();
return strUUID;
}
/**
* 添加數據
*/
public void addData(){
AndroidDatabaseConnection conn=null;
String userName=et_username.getText().toString();
String email=et_email.getText().toString();
if(userName==null || userName.equals("")||email==null || email.equals("") ){
Toast.makeText(MainActivity.this , "請輸入郵箱", Toast.LENGTH_SHORT).show();
return;
}
conn=new AndroidDatabaseConnection(dbHelper.getWritableDatabase(),true);
conn.setAutoCommit(false);
User user=new User();
user.setId(gainUUID());
user.setUsername(userName);
user.setEmail(email);
try {
userDao.create(user);
Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();
queryUserList();
conn.commit(null);
//清空添加匡
et_username.setText("");
et_email.setText("");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
if(null!=conn){
conn.rollback(null);
conn.close();
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
/**
* 查詢用戶
*/
private void queryUserList(){
users.clear();
try {
ArrayList<User>newUsers=(ArrayList<User>) userDao.queryForAll();
for(int i=0;i<newUsers.size();i++){
User user=newUsers.get(i);
user.setOrderNo(String.valueOf(i+1));
users.add(user);
}
userListAdapter.notifyDataSetChanged();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(dbHelper!=null){
dbHelper.releaseAll();
}
}
public class UserListAdapter extends BasicAdapter<User>{
TextView tv_order_no;
TextView tv_username;
TextView tv_email;
Button btn_update1;
Button btn_del;
public UserListAdapter(Context context, ArrayList<User> mList) {
super(context, mList);
}
@Override
protected int getViewId() {
return R.layout.list_item;
}
@Override
protected void setDate(View view, final User t,
com.dbdemo.BasicAdapter.ViewHolder viewHolder, final int position) {
tv_order_no = (TextView) viewHolder.findView(view,R.id.tv_order_no);
tv_username = (TextView) viewHolder.findView(view,R.id.tv_username);
tv_email = (TextView) viewHolder.findView(view,R.id.tv_email);
btn_update1 = (Button) viewHolder.findView(view,R.id.btn_update);
btn_del = (Button) viewHolder.findView(view,R.id.btn_del);
tv_order_no.setText(t.getOrderNo());
tv_username.setText(t.getUsername());
tv_email.setText(t.getEmail());
selectItem=t;
//點擊修改按鈕
btn_update1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
selectItem=t;
et_u_username.setText(t.getUsername());
et_u_email.setText(t.getEmail());
}
});
//點擊刪除按鈕
btn_del.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
users.remove(position);
userListAdapter.notifyDataSetChanged();
userDao.delete(selectItem);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_SHORT).show();
}
});
}
}
}