android开发之路09(浅谈SQLite数据库01)
1.SQLite数据库:
SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使
用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保
SQLite的二进制文件存在即可开始创建、连接和使用数据库。
对于SDK来讲,已经内置了SQLite的程序,因此我们不需要在SQLite官网上下载。一般数据库采用的都是静态的数据类
型,而我们的SQLite数据库采用的是动态数据库,会根据存入值自动判断。SQLite 数据库相对于其他数据库最大的特点是我们
可以把各种类型的数据保存到任何字段中,而不用关心字段声明的类型是什么。有一种特殊的情况是,定义为INTEGER PRIMARY
KEY 的字段只能存储64位整数。SQLite具有以下五种类型:
1.NULL:空值;
2.INTEGER:带符号的整形,具体取决于存入数字的范围大小;
3.REAL:浮点数字;
4.TEXT:字符串文本;
5.BLOB:二进制对象;
2.相关操作
①创建数据库:sqlite3 test.db;
②创建表:create table userInfo(userId integer primary key autoincrement,name varchar(20));
SQLite数据库可以解析大部分标准SQL语句:
①查询语句:select * from 表名 where 条件子句 group by 分组子句 having...order by 排序子句
例如:select * from userInfo order by id desc;
select * from userInfo group by name having count(*)>1
②插入语句:insert into 表名(字段列表) values(值列表)
例如:insert into userInfo(name,age) values('张三',20)
③更新语句:update 表名 set 字段名=值 where 条件子句
例如:update person set name = '张三' where id = 10
④删除语句:delete from 表名 where 条件子句
例如:delete from userInfo where id = 10
实例代码:
1.创建一个JavaBean
public class Student {
private int sid;
private String name;
private short age;
public Student() {
super();
}
public Student(int sid, String name, short age) {
super();
this.sid = sid;
this.name = name;
this.age = age;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public short getAge() {
return age;
}
public void setAge(short age) {
this.age = age;
}
@Override
public String toString() {
return "Student [sid=" + sid + ", name=" + name + ", age=" + age + "]";
}
}
2.创建一个用于创建SQLite数据库的类DBOpenHelper .java
public class DBOpenHelper extends SQLiteOpenHelper{
private static final String DBNAME="data.db";
private static CursorFactory factory=null;
private static final int VERSION=1;
public DBOpenHelper(Context context) {
super(context, DBNAME, factory, VERSION);
}
//当数据库第一次被创建的时候,执行该方法
@Override
public void onCreate(SQLiteDatabase db) {
//sql语句中的字段名与Student.java的成员变量对应
String sql="create table t_student (sid integer primary key,"
+ "name varchar(20),age integer)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
3.创建一个操作数据库的类StudentDAO .java
public class StudentDAO {
private DBOpenHelper helper;
private SQLiteDatabase db;
public StudentDAO(Context context) {
// 创建DBOpenHelper的实例
helper = new DBOpenHelper(context);
}
public void add(Student student) {
/**
* Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。
* (getReadableDatabase()方法中会调用getWritableDatabase()方法)
* 1.getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写.
* 2.getReadableDatabase()方法则是先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打
* 开失败后会继续尝试以只读方式打开数据库。如果该问题成功解决,则只读数据库对象就会关闭,然后返回一个可读写的数据库对象。
*/
db = helper.getWritableDatabase();
String sql = "insert into t_student (sid,name,age) values (?,?,?)";
db.execSQL(sql, new Object[] { student.getSid(), student.getName(),
student.getAge() });
}
public void update(Student student) {
db = helper.getWritableDatabase();
String sql = "update t_student set name = ?,age = ? where sid = ?";
db.execSQL(sql, new Object[] { student.getName(), student.getAge(),
student.getSid() });
}
public Student query(int sid) {
db = helper.getWritableDatabase();
String sql = "select sid,name,age from t_student where sid=?";
// Cursor实际上就是一种存储数据的集合
Cursor cursor = db.rawQuery(sql, new String[] { String.valueOf(sid) });
// 在cursor查找到的结果集合中将光标移动到到下一行,也就是将光标指向查找到的下一个结果
if (cursor.moveToNext()) {
// 通过getColumnIndex()方法可以得到指定列的名称,如果不存在返回-1
return new Student(cursor.getInt(cursor.getColumnIndex("sid")),
cursor.getString(cursor.getColumnIndex("name")),
cursor.getShort(cursor.getColumnIndex("age")));
}
return null;
}
// 这里使用可变参数,来满足参数个数不固定的情况
public void delete(Integer... sids) {
if (sids.length > 0) {
// StringBuffer线程安全的,多用于多线程中,用来对字符串进行复杂的操作
StringBuffer sb = new StringBuffer();
for (int i = 0; i < sids.length; i++) {
sb.append('?').append(',');
}
sb.deleteCharAt(sb.length() - 1);
SQLiteDatabase database = helper.getWritableDatabase();
String sql = "delete from t_student where sid in (" + sb + ")";
database.execSQL(sql, (Object[]) sids);
}
}
public List<Student> getScrollData(int start, int count) {
List<Student> students = new ArrayList<Student>();
db = helper.getWritableDatabase();
String sql = "select * from t_student limit ?,?";
Cursor cursor = db.rawQuery(sql, new String[] { String.valueOf(start),
String.valueOf(count) });
while (cursor.moveToNext()) {
students.add(new Student(
cursor.getInt(cursor.getColumnIndex("sid")),
cursor.getString(cursor.getColumnIndex("name")),
cursor.getShort(cursor.getColumnIndex("age"))));
}
return students;
}
public long getCount(){
db=helper.getWritableDatabase();
String sql="select count(sid) from t_student";
Cursor cursor=db.rawQuery(sql,null);
if(cursor.moveToNext()){
return cursor.getLong(0);
}
return 0;
}
}
android开发之路09(浅谈SQLite数据库01)的更多相关文章
- android开发之路04(初级android工程师必会,你懂得!)
Android初级Android工程师重点掌握内容如下: 1.Android开发基础: ①UI界面设计: ②SQLite数据库: ③android四大组件: ④android网络编程: ⑤androi ...
- android开发之路02(浅谈BroadcastReceiver)
一.BroadcastReceiver (广播接收者)的作用是用来接收来自系统和应用中的广播.应用如下: 1.开机完成后系统会产生一条广播----->接收到这条广播就能实现开机启动服务的功能: ...
- android开发之路06(浅谈单例设计模式)
设计模式之单例模式: 一.单例模式实现特点:①单例类在整个应用程序中只能有一个实例(通过私有无参构造器实现):②单例类必须自己创建这个实例并且可供其他对象访问(通过静态公开的访问权限修饰的getIns ...
- Toast显示图文界面——Android开发之路1
Toast的多种使用方法 Toast其实是一个功能特别强大的组件,不仅仅可以吐司一个文本内容,还可以吐司图片以及图文混排的界面.具体用法如下: 第一种:简单的纯文本内容的吐司: Toast.makeT ...
- 菜单(Menu)的三中创建方式——Android开发之路2
菜单的三种创建方式 一.OptionsMenu---选项菜单 Android应用中的菜单默认是隐藏的,只有当用户点击手机上的MENU键,系统才会显示菜单.这种菜单叫做选项菜单(Options Menu ...
- Android中隐藏顶部状态栏的那些坑——Android开发之路3
Android中隐藏顶部状态栏的那些坑 先看看常规的隐藏状态栏的方法: 方法一: @Override protected void onCreate(Bundle savedInstanceState ...
- Android中点击隐藏软键盘最佳方法——Android开发之路4
Android中点击隐藏软键盘最佳方法 实现功能:点击EditText,软键盘出现并且不会隐藏,点击或者触摸EditText以外的其他任何区域,软键盘被隐藏: 1.重写dispatchTouchEve ...
- Intent的七大组件——Android开发之路5
------Intent------ Android中三个核心组件——Activity.Services.BroadCastProvider都是通过Intent传递参数. startActivity( ...
- Unity3D 开发之shader教程(浅谈光照之漫反射diffuse)
在游戏开发过程中,光照应该是必不可少部分,当然,这是指大多数的稍微大型一些的3D游戏会需要,给模型或者山山水水加上光照,会看上去更加的真实,获得更好的体验.一个本身不发光物体显示什么颜色,在于本身反射 ...
随机推荐
- Classes and Objects :类和对象(1)
类的定义:修饰符,class,类名,extends,逗号分隔的implements,类体{}规范的类名:首字母要大写,以后每个单词首字母都大写字段的定义:修饰符,类型,字段名按照封装的思想,字段通常定 ...
- asp.net mvc 实体类成员变量标识示例
检查不能为空 [Required] public string ID { get; set; } 检查最大长度 [StringLength(36, ErrorMessage = "长度不可超 ...
- 第二百三十七天 how can I 坚持
最近好像迷上看小说了,<灵域>,而且也感觉会看小说了. 话说,今天好冷啊,真怕在路上冻着就冻萌了,寒风赤骨啊. 好想买个帽子.好想让送个帽子. 睡觉.
- ElasticSearch+Springboot实际应用:索引同步建设,搜索过程
1.介绍 springboot框架,众多自动化的部署和约定配置,造成了springboot的着手麻烦,熟练后可以快速快捷进行开发,常用作快捷开发的java底层框架.各位看官都是大神,自行体会. ...
- sql的存储过程调用
USE [ChangHong_612]GO/****** Object: StoredProcedure [dbo].[st_MES_GetCodeRule] Script Date: 09/10/2 ...
- OpenNebula 创建虚拟机失败(未解决)
Tue Jul :: [ReM][D]: Req: UID: AclInfo invoked Tue Jul :: [ReM][D]: Req: UID: AclInfo result SUCCESS ...
- http请求中乱码------编码的转换
在http请求中如果包含了汉字,那么就会出现乱码,引文默认的编码是ISO的,为了正常的显示,需要将编码转化为UTF或者gbk,下面提供一个辅助类. import java.io.Unsupported ...
- Volley使用指南第四回(来自developer.android)
Volley网络请求的第四篇,废话不多说,开始. 这一篇文章将会教你怎样在Volley支持的范围内定制一个请求. 第一步:写一个通用请求: 大多数请求都有已经写好的接口供你调用,如果你的请求是Stri ...
- PostgreSQL的 initdb 源代码分析之十八
继续分析: setup_conversion(); 展开: 其实质是: 运行命令:"/home/pgsql/project/bin/postgres" --single -F -O ...
- PostgreSQL中,database,schema,table之间关系
从逻辑上看,schema,table,都是位于database之下. 首先,在postgres数据库下建立表(相当于建立在public schema下): [pgsql@localhost bin]$ ...