SQLite在Android基本使用
来源:互联网 发布:一键生成淘宝客二维码 编辑:程序博客网 时间:2024/05/20 03:43
insert / select / update / delete
一,通过直接执行sql语句执行
通过openHelper得到SQLiteDatabase,然后直接调用方法。
注意每个方法,只有当使用时才获得database,只有在失去时才调用close()方法,符合随手关闭资源的原则。
public void insert(View v) { database=helper.getReadableDatabase(); String sql="insert into student(name) values('xm')"; database.execSQL(sql); database.close(); } public void select(View v) { database=helper.getReadableDatabase(); String sql="select * from student;"; Cursor cursor=database.rawQuery(sql, null); while(cursor.moveToNext()) { Log.e("MainActivity", "name:"+cursor.getString(cursor.getColumnIndex("name"))); }database.close(); }database.rawQuery(sql , strings[] ); 类似于preparedStatement , 前面的sql语句有问号,则从其值从后面字符串中得到。
二,通过调用接口来实现
public void insert(View v){ database=helper.getReadableDatabase(); String nullColumnHack=null; ContentValues values=new ContentValues(); values.put("name", "zs"); database.insert("student", nullColumnHack, values); database.close(); } public void delete(View v){ database=helper.getReadableDatabase(); String[] whereArgs=new String[1]; whereArgs[0]="xm";int del=database.delete("student", "name=?", whereArgs);Toast.makeText(this, "已经删除了"+del, Toast.LENGTH_SHORT).show();database.close(); }注意 Toast.makeText 方法第二个参数可以是int类型,不过这里指的是R.string.XXX表示通过这个 int 来定位对应的字符串,否则报错。
SQLiteDataBase.insert 第一个参数表示表名,第二个参数表示避免插入的列为null而报错,所以设置一个列名,当插入列为空时,用第二个参数取代,插入null避免报错,
第三个参数,用来放入插入的列名与带插入的值,类似于一个map。返回值表示已经添加到第多少条数据,若为-1,表示添加失败。
delete方法第二个参数是where从句,但不用去写where,要把参数用“?”替代,参数放在后面的字符串数组中,若是要全部删除,写“1”,其返回值是删除的数据条数。
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit); 第一个参数表名,第二个选中列名的String集合,第三个参数where条件(不用写where),第四个参数为where条件中参数的值,可以为null,第五个参数分组的语句,若不分组则为null,第六个参数排序,形式为order by, 却不必写(order by),默认为null,第六个参数与limit语句类似,可以为空。即可以在sql中的query语句中不写的参数,都可以为空。
返回的是Cursor 。
两种方法进行比较:
然而我觉得操作大量数据的效率是一样的,execSQL和rawQuery两个方法,或者是自己拼接字符串(前者),或者是把参数传给数组由api帮你生成sql(后者)。
而封装好的api,也是通过字符串帮你生成sql语句。故两者效率应大致近似。
记得,务必在执行execsql 和 rawquery之前先把对应的sql语句放于SQLite工具里试一下,毕竟SQLite与SQL语句并不完全相同,他们之间有很多差别。
要操作 sqlite 数据库 可以在控制台进行,先cd将当前路径移到数据库所在文件,然后 sqlite3 数据库文件名,就可以操作相应数据库了。
可以调用select * 等方法。
显示全部数据库 ".databases" 显示全部表 ".tables" 。
若是想把数据库操作当作事务处理,把这些想成为一个事务的事件放在try catch中:
database.beginTransaction(); try{ database.execSQL("update money set money=money-100 where name='zhangsan';"); // int i=1/100; database.execSQL("update money set money=money+100 where name='lisi';"); Toast.makeText(this, "转账成功", Toast.LENGTH_SHORT).show(); database.setTransactionSuccessful(); }catch(Exception e){ e.printStackTrace(); Toast.makeText(this, "转账失败", Toast.LENGTH_SHORT).show(); }finally{ database.endTransaction(); database.close(); }
若是没有调用setTransactionSuccessful,则事件回滚,调用了则表明事件正常处理。
注意一点:
一定要调用endTransaction(); 不然过去的修改无法生效,而且事务还未结束,一直报lock异常。
表示事务结束,首先检查是否设置事务成功的标记,若有则提交所有修改,若无则事务回滚到初始状态。
0 0
- SQLite在Android基本使用
- Android SQLite基本使用
- SQLite在Android上的基本用法
- Sqlite在android中的使用
- android数据库sqlite的基本使用
- Android SQLite数据库的基本使用
- 在 Android 中使用 SQLite, ContentProvider
- cocos2d-x在Android真机上使用Sqlite
- Android在SQLite中使用事务
- 在Android中如何使用SQLite
- 在Android SQLite中使用事务
- SQLite在Android中使用注意事项
- 在Android使用adb管理sqlite数据库
- cocos2d-x在Android真机上使用Sqlite
- Android在SQLite中使用事务
- (Android)在SQLite中使用事务
- SQLITE 在 ANDROID 中的详细使用
- 在android中使用SQLite数据库
- bzoj1007 [HNOI2008]水平可见直线
- docker
- tp框架的初始了解-------(一)
- POJ2485 Highways(高速公路)
- MFC中使用PreTranslateMessage执行两次的处理
- SQLite在Android基本使用
- ny14---会场安排问题
- 创业者必看:合伙人股权的进入机制与退出机制
- 使用Maven构建项目环境,利用Jsoup实现数据抓取(下)
- List接口
- Struts2了解
- 阿里巴巴 Java 开发手册
- 意图识别与槽填充
- OpenCV笔记(二)——基本图形的绘制