SQLite 是一款非常流行的嵌入式数据库,它支持 SQL 查询,并且只用很少的内存。Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。数据库存储在 data/< 项目文件夹 >/databases/ 下。
SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。
除了在文件系统中创建数据库,还可以在内存中创建数据库,在对操作速率要求较高的地方就能发挥作用了。
示例:
首先使用继承自SQLiteOpenHelper的数据库辅助类来帮助我们创建和打开数据库
public class MyHelper extends SQLiteOpenHelper {     public static final String TB_NAME = "countrycode";    public static final String ID = "_id";    public static final String COUNTRY = "country";    public static final String CODE = "code";    public MyHelper(Context context, String name,             CursorFactory factory,int version) {        super(context, name, factory, version);    }    @Override    public void onCreate(SQLiteDatabase db) {               // 创建表countrycode        db.execSQL("CREATE TABLE IF NOT EXISTS "                 + TB_NAME + " ("         + ID + " INTEGER PRIMARY KEY,"             + COUNTRY + " VARCHAR,"            + CODE + " INTEGER)");    }    @Override    public void onUpgrade(SQLiteDatabase db,             int oldVersion, int newVersion) {                //删除以前的旧表,创建一张新的空表,极端  可以使用alert table来修改表        db.execSQL("DROP TABLE IF EXISTS "+TB_NAME);        onCreate(db);    }}

在Activity中使用该数据库,进行数据的插入,删除,查询,更改,同时也可以使用execSQL完成
public class SQLite2 extends Activity {    public static final String DB_NAME = "code.db";    public static final int VERSION = 1;    MyHelper helper;    SQLiteDatabase db;    Cursor c;    TextView display;    Spinner s;     @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);               //初始化数据库辅助对象        helper = new MyHelper(this, DB_NAME, null, VERSION);                //获得可读写的SQLiteDatabase对象        db = helper.getWritableDatabase();               //用insert方法像数据库中插入"中国  86"        ContentValues values = new ContentValues();        values.put(MyHelper.COUNTRY, "中国");        values.put(MyHelper.CODE, 86);        db.insert(MyHelper.TB_NAME,MyHelper.ID, values);        //在SQLite数据库中将所有声明为INTEGER PRIMARY KEY的列自动识别为自增列        db.insert(MyHelper.TB_NAME,MyHelper.ID,null);        values.clear();        values.put(MyHelper.COUNTRY, "意大利");        values.put(MyHelper.CODE, 39);        db.update(MyHelper.TB_NAME, values,MyHelper.ID + " = 2",null);               //使用execSQL方法插入数据"洪都拉斯 504"        db.execSQL("INSERT INTO "                + MyHelper.TB_NAME + "("                + MyHelper.COUNTRY + ","                + MyHelper.CODE + ") VALUES "                + "('洪都拉斯',504)");        //=====================================            c = db.query(MyHelper.TB_NAME,null,null,null,null,null,                MyHelper.CODE+" DESC");        final int countryIndex = c.getColumnIndexOrThrow(MyHelper.COUNTRY);        final int codeIndex = c.getColumnIndexOrThrow(MyHelper.CODE);        /*for (c.moveToFirst();!(c.isAfterLast());c.moveToNext()) {            String country = c.getString(countryIndex);            int code = c.getInt(codeIndex);            Toast.makeText(this, country+code,                     Toast.LENGTH_LONG).show();        }*/                //======================================              s = (Spinner)findViewById(R.id.spinner);        display = (TextView)findViewById(R.id.display);               SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,                android.R.layout.simple_spinner_item,                 c,                new String[] {MyHelper.COUNTRY},                 new int[] {android.R.id.text1});        //设置子控件的布局方式               adapter.setDropDownViewResource(                android.R.layout.simple_spinner_dropdown_item);        s.setAdapter(adapter);        s.setOnItemSelectedListener(new OnItemSelectedListener(){                public void onItemSelected(AdapterView<?> adapter,View v,                    int pos, long id) {                c.moveToPosition(pos);                display.setText(c.getString(codeIndex));            }                   public void onNothingSelected(AdapterView<?> arg0) {            }        });    }       @Override    public void onDestroy() {        //程序退出时删除所有行。        db.delete(MyHelper.TB_NAME,null,null);        super.onDestroy();    }}

Cursor 是每行的集合。使用 moveToFirst() 定位第一行。你必须知道每一列的名称。你必须知道每一列的数据类型。Cursor 是一个随机的数据源。所有的数据都是通过下标取得。
数据库query的结果是返回一个cursor对象,cursor是位于结果集之上的一个游标,可以对结果集进行向前,向后,或随机的访问,而cursor本身是一个接口,提供了对结果集访问的一些方法。根据功能的不同在其子类有着不同的实现。要控制查询时返回的Cursor类型,可以自定义一个继承自CursorFactory类通过实现其newCursor()方法来返回需要的Cursor子类对象,但在CursorFactory传入null的默认情况下,查询操作会返回一个指向第一行数据之前的SQLiteCursor的对象。
在实际的应用编写过程中,更多是通过适配器(Adapter)来将Cursor与适配器控件联系起来。Android为Cursor提供了一个抽象类CursorAdapter,可以方便实现Cursor与适配器的连接。只需要创建一个继承自CursorAdapter的类,实现其bindView()和newView()两个抽象方法,或根据需要重新实现其他方法就可以用此类来构造一个可适配Cursor的适配器
An Adapter object acts as a bridge between an AdapterView and the underlying data for that view. The Adapter provides access to the data items. The Adapter is also responsible for making a View for each item in the data set.

更多相关文章

  1. Afinal框架(简介)
  2. Xamarin.Android使用教程之创建第一个Android应用程序
  3. Android(安卓)M新控件之FloatingActionButton,TextInputLayout,Sna
  4. 关于android:layout_weight属性使用注意事项
  5. 关于android:layout_weight属性使用注意事项
  6. Android(安卓)使用ORMLite打造万能泛型Dao简化数据持久化层
  7. 关于android:layout_weight属性使用注意事项
  8. 基于CentOS 6.4 使用Jenkins 进行Android集成打包
  9. Android自定义属性时TypedArray的使用方法

随机推荐

  1. 51单片机最小系统电路-设计教程
  2. 在苹果Mac上的“邮件”中如何使用列布局?
  3. 做支付需要了解哪些行业知识?
  4. 升级API网关Kong
  5. Google Guice之AOP
  6. 为什么有些BI工具做数据可视化项目频频失
  7. 干货 | 超声波及其传感器工作原理
  8. Kibana 之 安装部署
  9. Kafka性能篇:为什么Kafka这么快?
  10. Visual Paradigm如何在图表上阻止选择形