SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite;

  Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,往里面添加数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:

  • 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
  • onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
  • onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

详细介绍可以参考:

http://www.cnblogs.com/Excellent/archive/2011/11/19/2254888.html

http://blog.csdn.net/liuhe688/article/details/6715983

下面以一个增删改查的简单例子来说明一下:具体如图:

点击添加数据,然后点击查询数据:

然后点击修改,然后再查询:

然后删除,再查询:

实现代码如下:

MainActivity.java

package com.xiaozhang.sqltest1;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {

    private DatabaseHelper databaseHelper;
    private SQLiteDatabase sqlite;
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.listView);

        databaseHelper = new DatabaseHelper(this);
        sqlite = databaseHelper.getWritableDatabase();
    }

    // 添加Student信息
    public void add(View view) {
        ArrayList<Student> student = new ArrayList<Student>();
        Student student1 = new Student("张三", 23, "河南省");
        Student student2 = new Student("李四", 25, "山东省");
        Student student3 = new Student("王五", 21, "陕西省");
        Student student4 = new Student("赵六", 22, "福建省");

        student.add(student1);
        student.add(student2);
        student.add(student3);
        student.add(student4);

        // 设置事务
        sqlite.beginTransaction(); // 开始事务
        try {
            for (Student stu : student) {
                sqlite.execSQL("INSERT INTO student VALUES(null, ?, ?, ?)",
                        new Object[] { stu.name, stu.age, stu.address });
            }
            sqlite.setTransactionSuccessful(); // 设置事务成功完成
        } finally {
            sqlite.endTransaction(); // 结束事务
        }
    }

    // 将姓名为  "张三" 的地址修改为 "北京市";
    public void update(View view) {
        ContentValues cv = new ContentValues();
        Student student = new Student();
        student.address = "北京市";
        student.name = "张三";
        cv.put("address", student.address);
        sqlite.update("student", cv, "name = ?", new String[] { student.name });
    }

    // 删除年龄为22岁的人
    public void delete(View view) {
        Student student = new Student();
        student = new Student();
        student.age = 22;
        sqlite.delete("student", "age = ?",
                new String[] { String.valueOf(student.age) });
    }

    //查询全部信息
    public void query(View view) {
        Student student = new Student();
        Cursor c = sqlite.rawQuery("SELECT * FROM student", null);

        ArrayList<Student> list = new ArrayList<Student>();
        while (c.moveToNext()) {
            student = new Student();
            student._id = c.getInt(c.getColumnIndex("_id"));
            student.name = c.getString(c.getColumnIndex("name"));
            student.address = c.getString(c.getColumnIndex("address"));
            student.age = c.getInt(c.getColumnIndex("age"));

            list.add(student);
        }

        ArrayList<Map<String, String>> list2 = new ArrayList<Map<String, String>>();

        for (Student stu : list) {
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("name", stu.name);
            map.put("address", "-----"+stu.address + "-----" + stu.age + " years old");
            list2.add(map);
        }
        c.close();

        SimpleAdapter adapter = new SimpleAdapter(this, list2,
                android.R.layout.simple_list_item_2, new String[] { "name",
                        "address" }, new int[] { android.R.id.text1,
                        android.R.id.text2 });
        listView.setAdapter(adapter);
    }
}

DatabaseHelper.java

package com.xiaozhang.sqltest1;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "study";
    private static final int DATABASE_VERSION = 1;

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS student"
                + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age INTEGER, address TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("ALTER TABLE student ADD COLUMN other STRING");
    }

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="add"
        android:text="添加数据" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="update"
        android:text="更新数据" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="delete"
        android:text="删除数据" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="query"
        android:text="查询数据" />

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

还有一点,就是查看SQLite数据库,因为在硬盘上无法直接查看,可以借助adb命令或通过Eclipse的DDMS视图来查看;

(1)在命令行中进入到Android的platform-tools目录,然后在命令行窗口输入adb shell回车,就进入了Linux命令行,现在就可以使用Linux的命令了;

(2)cd data/data,然后ls,进入到项目中,我的是:cd com.xiaozhang.sqltest1,然后cd databases,再ls就看到数据库了,我建的数据库就是study;

(3)再sqlite3 study,进入到数据库中;

(4)再.schema,查看建表语句,然后即可看到新建的表,就可以用SQL语句来进行操作了,如:

(5)就可以看到数据了,乱码的话,修改下编码就可以了;

在CMD窗口下输下,输入 chcp 65001,修改为UTF-8编码;然后在命令行标题栏上点击右键,选择【属性】 -【字体】,将字体修改为Consolas 确定;

如有需要,可以下载代码:http://download.csdn.net/detail/u012724379/8239741

Android SQLite简介的更多相关文章

  1. [JIT_APP]Android SQLite简介

    SQLite介绍 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目(Mozilla, PHP, Pyt ...

  2. Android——SQLite/数据库 相关知识总结贴

    android SQLite简介 http://www.apkbus.com/android-1780-1-1.html Android SQLite基础 http://www.apkbus.com/ ...

  3. Android SQLite数据库使用

    在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的.一. ...

  4. "浅谈Android"第一篇:Android系统简介

    近来,看了一本书,名字叫做<第一行代码>,是CSDN一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的 ...

  5. Android SQLite (二) 基本用法

    在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的. 一 ...

  6. Android系统简介(中):系统架构

    Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries  & Android Runtime.Linux  ...

  7. 数据库-SQLite简介

    SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库(轻型数据库). 由于资源占用少.性能良好和零管理成本,嵌入式数据库有了它的用武之地,像Android.iPhone都有内置的S ...

  8. Android SQLite基本用法

    SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLit ...

  9. Android SQLite学习指南

    一.SQLite简介 在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对 ...

随机推荐

  1. Java[3] Java多线程相关资料

    Java多线程: http://www.uml.org.cn/j2ee/201509093.asp

  2. jquery 滚动条 scroll 和 animate出现的问题总结

    这两天刚刚学习了jquery就想把平时做看到的一些相关效果用新的知识写写看.知识平时看着都懂,实际操作中问题才会层出不穷. <!DOCTYPE html> <html> < ...

  3. fetch策略

    @OneToMany(mappedBy="image",cascade=CascadeType.ALL,fetch=FetchType.EAGER) @Fetch(value=Fe ...

  4. oracle 性能优化--索引总结

    索引是建立在表的一列或多个列上的辅助对象,目的是加快訪问表中的数据: Oracle存储索引的数据结构是B*树.位图索引也是如此,仅仅只是是叶子节点不同B*数索引: 索引由根节点.分支节点和叶子节点组成 ...

  5. openstack单元測试用组件一览

    声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! 组件一览 hacking 一 ...

  6. uva 10626 - Buying Coke(记忆化搜索)

    题目链接:10626 - Buying Coke 题目大意:给出要买可乐的数量, 以及1元,5元和10元硬币的数量, 每瓶可乐8元,每次照钱会按照最少硬币的方式找回, 问如何投币可使得投入的硬币数最少 ...

  7. Flex中的折线图

    1.问题背景 在Flex中,制作一个折线图.而且给折线图的横轴和纵轴进行样式设置,详细实现过程例如以下: 2.实现实例 (1)设置横轴样式和数据绑定 <mx:horizontalAxis> ...

  8. vs开发常用快捷键

    Ctrl+K+D:快速对齐代码///按D的时候K快速弹起 如果出现语法错误则无法对齐Ctrl+Z:撤销Ctrl+S:保存Ctrl+J:快速弹出智能提示Shift+End.Shift+Home//快速选 ...

  9. 用Ant实现Java项目的自动构建和部署(转)

    Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作. 一.            ...

  10. 前端bug记录---不定时更新

    在项目的开发中难免遇到各种各样的bug,我觉得还是有必要记录一下的,方便日后查询. safari window resize  为满足日常轮播需求,做一个符合当前业务的轮播插件,其中需要考虑windo ...