Android之sqlite的使用 (转载)
Android中的SQLite使用
首先创建数据库类
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "mydata.db" ; //数据库名称
private static final int version = 1 ; //数据库版本
public DatabaseHelper(Context context) {
super (context, DB_NAME, null , version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table user(username varchar(20) not null , password varchar(60) not null );" ;
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
|
SQLiteOpenHelper类介绍
SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。
方法名 | 方法描述 |
---|---|
SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) | 构造方法,一般是传递一个要创建的数据库名称那么参数 |
onCreate(SQLiteDatabase db) | 创建数据库时调用 |
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) | 版本更新时调用 |
getReadableDatabase() | 创建或打开一个只读数据库 |
getWritableDatabase() | 创建或打开一个读写数据库 |
下面来介绍调用的方法
创建数据库
这里特别的地方是通过调用了SQLiteOpenHelper类的getReadableDatabase()方法来实现创建一个数据库的
1
2
3
|
DatabaseHelper database = new DatabaseHelper( this ); //这段代码放到Activity类中才用this
SQLiteDatabase db = null ;
db = database.getReadalbeDatabase();
|
SQLiteDatabase类为我们提供了很多种方法,而较常用的方法如下
(返回值)方法名 | 方法描述 |
---|---|
(int) delete(String table,String whereClause,String[] whereArgs) | 删除数据行的便捷方法 |
(long) insert(String table,String nullColumnHack,ContentValues values) | 添加数据行的便捷方法 |
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs) | 更新数据行的便捷方法 |
(void) execSQL(String sql) | 执行一个SQL语句,可以是一个select或其他的sql语句 |
(void) close() | 关闭数据库 |
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) | 查询指定的数据表返回一个带游标的数据集 |
(Cursor) rawQuery(String sql, String[] selectionArgs) | 运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入) |
数据的添删改查分别可以通过2种途径来实现
数据的添加
1.使用insert方法
1
2
3
|
ContentValues cv = new ContentValues(); //实例化一个ContentValues用来装载待插入的数据cv.put("username","Jack Johnson");//添加用户名
cv.put( "password" , "iLovePopMusic" ); //添加密码
db.insert( "user" , null ,cv); //执行插入操作
|
2.使用execSQL方式来实现
1
2
|
String sql = "insert into user(username,password) values ( 'Jack Johnson' , 'iLovePopMuisc' ); //插入操作的SQL语句
db.execSQL(sql); //执行SQL语句
|
数据的删除
同样有2种方式可以实现
1
2
3
|
String whereClause = "username=?" ; //删除的条件
String[] whereArgs = { "Jack Johnson" }; //删除的条件参数
db.delete( "user" ,whereClause,whereArgs); //执行删除
|
使用execSQL方式的实现
1
2
|
String sql = "delete from user where username='Jack Johnson'" ; //删除操作的SQL语句
db.execSQL(sql); //执行删除操作
|
数据修改
同上,仍是2种方式
1
2
3
4
5
|
ContentValues cv = new ContentValues(); //实例化ContentValues
cv.put( "password" , "iHatePopMusic" ); //添加要更改的字段及内容
String whereClause = "username=?" ; //修改条件
String[] whereArgs = { "Jack Johnson" }; //修改条件的参数
db.update( "user" ,cv,whereClause,whereArgs); //执行修改
|
使用execSQL方式的实现
1
2
|
String sql = "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'" ; //修改的SQL语句
db.execSQL(sql); //执行修改
|
数据查询
数据查询相对前面几种方法就复杂一些了,因为查询会带有很多条件
通过query实现查询的
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
各参数说明:
- table:表名称
- colums:列名称数组
- selection:条件子句,相当于where
- selectionArgs:条件语句的参数数组
- groupBy:分组
- having:分组条件
- orderBy:排序类
- limit:分页查询的限制
- Cursor:返回值,相当于结果集ResultSet
针对游标(Cursor)也提供了不少方法
方法名称 | 方法描述 |
---|---|
getCount() | 总记录条数 |
isFirst() | 判断是否第一条记录 |
isLast() | 判断是否最后一条记录 |
moveToFirst() | 移动到第一条记录 |
moveToLast() | 移动到最后一条记录 |
move(int offset) | 移动到指定的记录 |
moveToNext() | 移动到吓一条记录 |
moveToPrevious() | 移动到上一条记录 |
getColumnIndex(String columnName) | 获得指定列索引的int类型值 |
实现代码
1
2
3
4
5
6
7
8
|
Cursor c = db.query( "user" , null , null , null , null , null , null ); //查询并获得游标
if (c.moveToFirst()){ //判断游标是否为空
for ( int i= 0 ;i<c.getCount();i++){
c.move(i); //移动到指定记录
String username = c.getString(c.getColumnIndex( "username" );
String password = c.getString(c.getColumnIndex( "password" ));
}
}
|
通过rawQuery实现的带参数查询
1
2
3
4
|
Cursor c = db.rawQuery( "select * from user where username=?" , new Stirng[]{ "Jack Johnson" });
if (cursor.moveToFirst()) {
String password = c.getString(c.getColumnIndex( "password" ));
}
|
转载于:https://www.cnblogs.com/androidxufeng/p/3682487.html
Android之sqlite的使用 (转载)相关推荐
- Android开源项目分类汇总-转载
太长了,还是转载吧... 今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有 ...
- android-sqlite小实例
学习android-sqlite数据库的一个小实例,只需要有数据库文档,就可以获取里面的数据,而不需要本地链接.此实例,是将数据库文档mydb.db里面某个表里面的信息显示出来,仅供参考,希望共同进步 ...
- android连接sqlite进行简单的增删改查和事务管理
为什么80%的码农都做不了架构师?>>> Android连接数据库sqlite并进行简单的表创建和增删改查功能参考代码,使用Android单元测试进行验证,首先新建项目进行配置 ...
- Android:sqlite问题小结
1. update时候,column为text,则sql应该是:update table_name set column1 = 'xxx'.必须加单引号,否则会Error:no such column ...
- android之SQLite数据库insert操作
原型: long Android.database.sqlite.SQLiteDatabase.insert(String table, String nullColumnHack, ContentV ...
- android连接SQLite数据库-----增加改查+分页
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 ...
- Android 数据库 SQLite
首先关于SQLite的介绍百度上看看就大致了解的差不多了. Android 操作数据库的关键步骤就在于实现API SQLiteOpenHelper,通常这个库辅助类来创建或打开数据库. 废话不多说直接 ...
- Android 连接SQLite
Android的页面显示的数据主要是从数据库中获取数据的,android开发中使用的是SQLite数据库. SQLite的优点: 轻量级 使用 SQLite 只需要带一个动态库,就可以享受它的全部功能 ...
- 《二》Android 数据库 SQlite SQLiteOpenHelper
/**************************************************** 大家都知道写博客会很累的,大热天的. 希望=转载请注明出处:http://blog.csdn ...
- 《一》Android 数据库 SQlite SQLiteOpenHelper
/* 大家都知道写博客会很累的,大热天的. 希望=转载请注明出处:http://blog.csdn.net/ta893115871 请不要可怜你的鼠标,(*^__^*) 嘻嘻-- */ 众所周知,数据 ...
最新文章
- IMF 报告:比特币等加密货币有朝一日可能取代传统支付手段
- chrome插件开发
- OpenCV边缘之间的距离转换功能的实例(附完整代码)
- linux性能测试 瓶颈,性能测试——瓶颈分析方法
- 记录使用websocket时因为Sec-Websocket-Protocol遇到的一个问题
- hadoop深入研究:(五)——Archives
- Hello Blazor:(13)查找HTML元素对应.razor文件
- LeetCode 1835. 所有数对按位与结果的异或和(位运算 (ab)^(ac) = a(b^c) )
- leetcode —— 133. 克隆图
- hdu 4608 I-number(13多校#1 ,1009)
- Python使用numpy计算矩阵特征值、特征向量与逆矩阵
- aspose转pdf不显示中文_word转pdf,迫不得已服务器从linux换成了windows,不完美的完美...
- go实现本地文件搜索引擎
- 再学 GDI+[22]: TGPLinearGradientBrush - 之一: TLinearGradientMode
- 算法学习第一天-搭建能运行算法第四版的代码
- 云原生小课堂 | Envoy请求流程源码解析(一):流量劫持
- python函数查询工具_布同:Python函数帮助查询小工具[v1和v2]
- Objective-C中的instancetype和id区别
- 数商云智慧医疗管理系统解决方案:医药电商系统实现智能化改造
- 语义分割代码实现细节:CE_Loss 和 BCE_loss
热门文章
- opensplice dds v6.3.2_DDS生态社区带你解读|Filecoin创始人胡安:数据存储需求未来会增长3倍...
- 斜挎包长度到哪里合适_斜挎包带子多长合适 看个人身高
- Linux笔记-shell脚本中加载环境变量(适用于crontab)
- 反汇编基础-数组和指针的反汇编代码分析
- C++|Qt最简单的http的get请求
- Qt工作笔记-多线程时间服务应用
- QT| C/C++之win98扫雷外挂增强版
- 禅道报表中关闭bug统计图_想要简单制作数据可视化分析报表?这个工具绝对好用...
- lm723大电流可调电源电路图_高稳定大电流直流可调稳压电路
- mysql optimizer mrr_[转] MySQL 的 MRR 到底是什么?