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)的更多相关文章

  1. android开发之路04(初级android工程师必会,你懂得!)

    Android初级Android工程师重点掌握内容如下: 1.Android开发基础: ①UI界面设计: ②SQLite数据库: ③android四大组件: ④android网络编程: ⑤androi ...

  2. android开发之路02(浅谈BroadcastReceiver)

    一.BroadcastReceiver (广播接收者)的作用是用来接收来自系统和应用中的广播.应用如下: 1.开机完成后系统会产生一条广播----->接收到这条广播就能实现开机启动服务的功能: ...

  3. android开发之路06(浅谈单例设计模式)

    设计模式之单例模式: 一.单例模式实现特点:①单例类在整个应用程序中只能有一个实例(通过私有无参构造器实现):②单例类必须自己创建这个实例并且可供其他对象访问(通过静态公开的访问权限修饰的getIns ...

  4. Toast显示图文界面——Android开发之路1

    Toast的多种使用方法 Toast其实是一个功能特别强大的组件,不仅仅可以吐司一个文本内容,还可以吐司图片以及图文混排的界面.具体用法如下: 第一种:简单的纯文本内容的吐司: Toast.makeT ...

  5. 菜单(Menu)的三中创建方式——Android开发之路2

    菜单的三种创建方式 一.OptionsMenu---选项菜单 Android应用中的菜单默认是隐藏的,只有当用户点击手机上的MENU键,系统才会显示菜单.这种菜单叫做选项菜单(Options Menu ...

  6. Android中隐藏顶部状态栏的那些坑——Android开发之路3

    Android中隐藏顶部状态栏的那些坑 先看看常规的隐藏状态栏的方法: 方法一: @Override protected void onCreate(Bundle savedInstanceState ...

  7. Android中点击隐藏软键盘最佳方法——Android开发之路4

    Android中点击隐藏软键盘最佳方法 实现功能:点击EditText,软键盘出现并且不会隐藏,点击或者触摸EditText以外的其他任何区域,软键盘被隐藏: 1.重写dispatchTouchEve ...

  8. Intent的七大组件——Android开发之路5

    ------Intent------ Android中三个核心组件——Activity.Services.BroadCastProvider都是通过Intent传递参数. startActivity( ...

  9. Unity3D 开发之shader教程(浅谈光照之漫反射diffuse)

    在游戏开发过程中,光照应该是必不可少部分,当然,这是指大多数的稍微大型一些的3D游戏会需要,给模型或者山山水水加上光照,会看上去更加的真实,获得更好的体验.一个本身不发光物体显示什么颜色,在于本身反射 ...

随机推荐

  1. 用原生javascript模拟经典FC游戏公路争霸

    #用原生javascript模拟经典FC游戏公路争霸 前几天看了园子里面的随笔 [原生javascript开发仿微信打飞机小游戏](http://www.cnblogs.com/Mr-Nobody/p ...

  2. 超简单fedora20(linux)下JDK1.8的安装

    (博客园-番茄酱原创) 去官网下载linux版本的jdk,如果你的fedora是64位,就选择64位的jdk,jdk-8u20-linux-x64.tar.gz. 将下载好的jdk解压到当前目录下,解 ...

  3. 【Spark学习】Apache Spark配置

    Spark版本:1.1.1 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4137969.html Spar ...

  4. 使用Cygwin通过ssh命令行来访问Windows8

    安装Cygwin可以参考<如何在Windows中通过Cygwin来使用Linux命令>. 在Win8下貌似有个bug,需要将cygwin\bin\mintty 修改为cygwin\bin\ ...

  5. linux下安装apache详解

    下载httpd-2.2.6.tar.bz2  把httpd-2.2.6.tar.bz2放到/soft 下[root@localhost ~]#cd /soft[root@localhost soft] ...

  6. Map 排序

    /** * 通过map 的 value 排序,并返回排序后的第一个条目 * * @param m 待排序集合 * @param desc true:降序排序,false:升序排序 * @return ...

  7. Tomcat7中配置Oracle 11g数据库DBCP连接池

    将       ojdbc6.jar       tomcat-jdbc-7.0.37.jar            拷贝到工程的WEB-INF\lib  下面 一.在Tomcat的配置文件Tomca ...

  8. Educational Codeforces Round 2 C. Make Palindrome 贪心

    C. Make Palindrome Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/600/pr ...

  9. Java和C#在面向对象上语法的区别

    做了几年了开发一直没有总结什么,回到了家乡的小城做了一名培训班的教员,教授软件开发的知识.细小的知识从头细细嚼来,别有一番滋味.或是以前遗漏的太多,或是确实没有系统的学习过,教学生的过程中自己也对教材 ...

  10. Linux下进程的同步相互排斥实例——生产者消费者

    linux下的同步和相互排斥 Linux sync_mutex 看的更舒服点的版本号= = https://github.com/Svtter/MyBlog/blob/master/Linux/pth ...