sqlite应用demo
2016-07-18 23:03
190 查看
MainActivitity 创建后new出数据库处理类。此类在构造方法中就要完成SqlitOpenHelper
增删改查除了用 execSQl(),rawQuery()方式外,还有另外一种方式 调用database insert update delete query方法
特点:增删改有返回值,可以让用户看到结果,查询不够灵活,不能做多表查询
一般增删改用第二种方式,查询用第一种方式。
再补充一下,database 的事务,执行两个操作,要么同时成功,要么同时失败
则需要放在同一事务中
也可复制数据库导到项目中
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private UserInfoDB userInfoDB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.add).setOnClickListener(this); findViewById(R.id.del).setOnClickListener(this); findViewById(R.id.update).setOnClickListener(this); findViewById(R.id.query).setOnClickListener(this); userInfoDB = new UserInfoDB(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.add: UserBean userBean = new UserBean(); userBean.name="张三"; userBean.number="123"; userInfoDB.add(userBean); UserBean userBean2 = new UserBean(); userBean.name="李四"; userBean.number="666"; userInfoDB.add(userBean2); break; case R.id.del: userInfoDB.del("李四"); break; case R.id.update: UserBean userBean3 = new UserBean(); userBean3.name="张三"; userBean3.number="888"; userInfoDB.update(userBean3); case R.id.query: userInfoDB.query("张三",MainActivity.this); break; default: break; } } }
public class UserInfoDB { private final UserInfoSqlitOpenHelper userInfoSqlitOpenHelper; public UserInfoDB(Context context) { userInfoSqlitOpenHelper = new UserInfoSqlitOpenHelper(context); } public void add(UserBean userBean) { SQLiteDatabase db = userInfoSqlitOpenHelper.getReadableDatabase(); //sql:sql语句, bindArgs:sql语句中占位符的参数 db.execSQL("insert into user(name,phone) values(?,?);", new Object[]{userBean.name, userBean.number}); db.close(); } public void del(String name) { SQLiteDatabase db = userInfoSqlitOpenHelper.getReadableDatabase(); db.execSQL("delete from user where name=?;", new Object[]{name}); //关闭数据库 db.close(); } public void update(UserBean userBean3) { SQLiteDatabase db = userInfoSqlitOpenHelper.getReadableDatabase(); db.execSQL("update user set phone=? where name=?;", new Object[]{userBean3.number, userBean3.name}); db.close(); } public void query(String name) { SQLiteDatabase db = userInfoSqlitOpenHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from user where name = ?", new String[]{name}); if (cursor != null && cursor.getCount() > 0) { while (cursor.moveToNext()) {//当前行能否向下移动,如果能说明还有数据 UserBean userBean = new UserBean(); userBean.id = cursor.getInt(0);//通过0索引过去cursor中第一列的数据,id userBean.name = cursor.getString(1); userBean.number = cursor.getString(2); Log.e("mrpeng","id:" + userBean.id + "; name:" + userBean.name + " ; phone :" + userBean.number); } } db.close(); } }
public class UserInfoSqlitOpenHelper extends SQLiteOpenHelper { public UserInfoSqlitOpenHelper(Context context) { /** * context: 上下文 * name: 数据库文件的名称 * factory:是用来创建cursor对象的,默认为null * version:数据库的版本,如果version发生改变onUpgrade方法就会被调用; * version 从1开始;4.0以下可以降级,4.0版本后不能降 */ super(context, "userinfo.db", null, 1); } /** * 数据库第一次创建时被执行,特别适合表结构的初始化 * SQLiteDatabase类是用来执行sql语句 * * @param db */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table user (_id integer primary key autoincrement ,name varchar(20),phone varchar(11))"); } /** * onUpgrade:数据库需要升级时才会被调用,version发生改变时 * 特别适合做表结构的修改 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //修改表结构,加一个字段 // db.execSQL("alter table user add phone varchar(11)"); } }
增删改查除了用 execSQl(),rawQuery()方式外,还有另外一种方式 调用database insert update delete query方法
特点:增删改有返回值,可以让用户看到结果,查询不够灵活,不能做多表查询
一般增删改用第二种方式,查询用第一种方式。
再补充一下,database 的事务,执行两个操作,要么同时成功,要么同时失败
则需要放在同一事务中
SQLiteDatabase db = userInfoSqlitOpenHelper.getReadableDatabase(); //开启一个事务 db.beginTransaction(); try { //转账业务 db.execSQL("update account set number= number-200 where name=?",new String[]{"李四"}); int i = 100/0; db.execSQL("update account set number= number+200 where name=?",new String[]{"张三"}); //标记事务执行成功,如果没有执行,回滚 db.setTransactionSuccessful(); } finally { //事务结束 db.endTransaction(); }
也可复制数据库导到项目中
private String path = "/data/data/com.mrpeng.myproject/databases/"; public void copyDb() { try { InputStream input = context.getAssets().open("mydb.db"); FileUtils.copyFile(input, path, "address.db"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public static void copyFile(InputStream input, String dirPath, String fileName) { File dir = new File(dirPath); if (!dir.exists()) { dir.mkdir(); } File saveFile = new File(dirPath + "/" + fileName); if (!saveFile.exists()) { try { saveFile.createNewFile();// length=0; FileOutputStream output = new FileOutputStream(saveFile); // 获取数据 // InputStream input = context.getAssets().open("mydb.db"); // 创建缓冲区 byte[] buffer = new byte[1024]; int len = 0; while ((len = input.read(buffer)) != -1) { output.write(buffer, 0, len); } // 关闭 output.flush(); output.close(); input.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- 6、plsql编程
- mysql记录 第二天
- Oracle 11g R2 DBA 操作指南(1)
- mysql-sql高级应用
- mysql优化之连接优化(open-files-limit与table_open_cache)
- plsql 安装后database下拉没有东西
- BestCoder 2nd Anniversary Oracle
- 使用Express + Socket.io + MongoDB实现简单的聊天
- oracle 的绑定变量
- 一些经典的T-SQL语句
- plsql 安装后database下拉没有东西
- redis JAVA客户端(Jedis)测试使用
- 数据库基本概念
- ORA-12560: TNS: 协议适配器错误
- java 客户端链接不上redis解决方案 (jedis)
- mysql清空表数据后让自增ID仍从空位开始的方法
- Redis简介,安装和配置,停止,卸载(图解方式)
- Redis--分布式锁
- window下MySQL5.7.zip服务配置
- redis 简单动态字符串