android MVP模式下对数据库进行简单操作
来源:互联网 发布:瞪眼睛变大 知乎 编辑:程序博客网 时间:2024/04/30 06:12
Main主页逻辑代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_create,btn_add,btn_delete,btn_update,btn_query,btn_renew; private HandlerDao hd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //绑定控件和添加点击事件 findView(); } private void findView() { btn_create= (Button) findViewById(R.id.button); btn_add= (Button) findViewById(R.id.button2); btn_update= (Button) findViewById(R.id.button3); btn_query= (Button) findViewById(R.id.button4); btn_delete= (Button) findViewById(R.id.button5); btn_renew= (Button) findViewById(R.id.button6); btn_create.setOnClickListener(this); btn_add.setOnClickListener(this); btn_update.setOnClickListener(this); btn_query.setOnClickListener(this); btn_delete.setOnClickListener(this); btn_renew.setOnClickListener(this); //调用MVP中的P也就是逻辑层代码 hd=new HandlerDaoImpl(); } @Override public void onClick(View v) { String sql=""; Object [] obj=null; switch (v.getId()){ case R.id.button: //查看user数据库表是否存在判断是否创建成功! sql="SELECT COUNT(*) FROM sqlite_master where type='table' and name='user'"; break; case R.id.button2: //插入一条测试数据 sql="insert into user(name,age) values(?,?)"; //插入的值 obj=new Object[]{"张三",20}; break; case R.id.button3: //根据id修改插入的数据 sql="update user set name=? where _id=?"; obj=new Object[]{"李四",1}; break; case R.id.button4: //查询数据库数据 sql="select * from user"; obj=null; break; case R.id.button5: //根据名称删除某条数据 sql="delete from user where name=?"; obj=new Object[]{"李四"}; break; case R.id.button6: //更新数据库版本 sql=""; obj=null; break; } //调用实现类完成具体的逻辑操作 hd.handler(v.getId(),this,sql,obj); }}
HandDao层代码主要是一个接口
public interface HandlerDao { public void handler(int num, Context context, String sql, Object[] obj);}
主要的代码逻辑通过Main主页传递过来的sql语句执行相应操作
public class HandlerDaoImpl implements HandlerDao {
// private Context context; //数据库表
private UserDB userDB; @Override public void handler(int num, Context context, String sql,Object[] obj) { this.context = context; if (userDB == null) { userDB = new UserDB(context, "user.db", null, 1); } switch (num) { case R.id.button: if (isCreate(sql)) { showMake("创建成功!"); } else { showMake("创建失败!"); } break; case R.id.button2: if (isNotQuery(sql,obj)) { showMake("新增成功!"); } else { showMake("新增失败!"); } break; case R.id.button3: if (isNotQuery(sql,obj)) { showMake("修改成功!"); } else { showMake("修改失败!"); } break; case R.id.button4: int count = findAll(sql); if (count > 0) { showMake("总共查询出" + count + "条数据!"); } else if (count == 0) { showMake("为查找到数据!"); } else { showMake("有一个未知错误!"); } break; case R.id.button5: if (isNotQuery(sql,obj)) { showMake("删除成功!"); } else { showMake("删除失败!"); } break; case R.id.button6: try { UserDB ud = new UserDB(context, "user.db", null, 2); SQLiteDatabase sd = userDB.getWritableDatabase(); showMake("更新成功!"); } catch (Exception e) { Log.d("###", e.getMessage()); showMake("更新失败!"); e.printStackTrace(); } break; } } private void showMake(String message) { Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } //创建数据库 private boolean isCreate(String sql) { boolean isCreate = false; try{ SQLiteDatabase sqLiteDatabase = userDB.getWritableDatabase(); Cursor cursor = sqLiteDatabase.rawQuery(sql, null); while (cursor.moveToNext()) { int count = cursor.getInt(0); if (count > 0) { isCreate = true; } } //关闭访问 sqLiteDatabase.close(); }catch (Exception e){ Log.d("###",e.getMessage()); e.printStackTrace(); } return isCreate; } //新增,修改,删除数据库 private boolean isNotQuery(String sql,Object[] obj) { SQLiteDatabase sqLiteDatabase = null; try { sqLiteDatabase = userDB.getWritableDatabase(); sqLiteDatabase.execSQL(sql,obj); return true; } catch (Exception e) { Log.d("###", e.getMessage()); return false; } finally { //关闭数据库链接 sqLiteDatabase.close(); } } private int findAll(String sql) { List<UserInfo> list = new ArrayList<UserInfo>(); SQLiteDatabase sqLiteDatabase=null; try { sqLiteDatabase = userDB.getWritableDatabase(); Cursor cursor = sqLiteDatabase.rawQuery(sql, null); while (cursor.moveToNext()) { UserInfo user = new UserInfo(); //根据数据库表中字段的顺序获取值 user.setId(cursor.getInt(0)); //根据数据库表中字段的名称获取值 user.setName(cursor.getColumnName(cursor.getColumnIndex("name"))); user.setAge(cursor.getInt(2)); list.add(user); } } catch (Exception e) { list.clear(); Log.d("###", e.getMessage()); } sqLiteDatabase.close(); return list.size(); }}
数据库的相应代码
public class UserDB extends SQLiteOpenHelper{ public UserDB(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } public UserDB(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) { super(context, name, factory, version, errorHandler); } @Override public void onCreate(SQLiteDatabase db) { //创建数据库表sql语句 String sql="create table user(_id integer parmary key,name varchar(10) not null,age integer not null)"; //执行创建数据库表sql db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if(newVersion==2){ //开启一个事务 如果数据库表更新操作失败可以通过事务回滚 db.beginTransaction(); try{ //1:修改之前的数据库表的表名 db.execSQL("alter table user rename to user_test"); //2:创建一张新的数据库表 db.execSQL("create table user(_id integer primary key,,name varchar(20) not null,,age integer not null,see varchar(10) not null)"); //3:拷贝之前的数据库表数据到新表里面并给新添加的字段赋值 db.execSQL("insert into user select _id,name,age,'' from user_test"); //4:删除原版本数据库表 db.execSQL("drop table user_test"); //5:设置事务处理成功,如果不设置会自动回滚不会提交 db.setTransactionSuccessful(); //6:从beginTransaction开始的操作都会提交 db.endTransaction(); }catch (Exception e){ //数据库表更新操作出错因设置了事务会自动回滚 e.printStackTrace(); } } }}
简单的实体Beanpublic class UserInfo implements Serializable{ private int id; private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } 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; }}
1 0
- android MVP模式下对数据库进行简单操作
- Android中对数据库进行CRUD操作
- 用Java对数据库进行简单操作的准备操作
- Android MVP模式 简单使用方法
- 对数据库DML操作进行封装成简单的工具
- (1).Mybatis简单入门:对数据库进行CRUD操作
- 利用JDBC对数据库进行简单的操作
- 利用JDBC对数据库进行简单的操作
- Android 开发模式MVP模式简单运用
- MVP设计模式进行Android应用开发
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- Android SQLite使用SQLiteOpenHelper类对数据库进行操作
- JSTL 注意点
- Fiddler的实践心得(三): 重新认识Decode
- JAVA程序员一定知道的优秀第三方库(2016版)
- Java高级开发工程师面试考纲
- 以字符形式读写文件
- android MVP模式下对数据库进行简单操作
- 机器人程序设计——之如何正确入门ROS | 硬创公开课(附视频/PPT) 文章摘要
- Oracle 12c创建pdb
- C++的 动态内存分配、命名空间、强制类型转换
- Python3 基础:some knowledge
- 微信小程序图片等比例缩放 动态的获取图片的高度和宽度 动态的设置图片的高度和宽度
- dom4j解析xml文件基本操作
- Java静态代理模式理解和实现
- 吐槽java时间那点事儿 Joda Time