android SQLite数据库

来源:互联网 发布:学尤克里里下什么软件 编辑:程序博客网 时间:2024/04/19 00:27

SQLiteOpenHelper 的子类,至少需要实现三个方法:

 构造函数,调用父类SQLiteOpenHelper 的构造函数。这个方法需要四个 参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的 游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整 数。

onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需 要对这个对象填充表和初始化数据。

onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个 旧的版本号和一个新的版本号, 这样你就可以清楚如何把一个数据库从旧 的模型转变到新的模型。

package cn.csdn.service;

 

import android.content.Context;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.database.sqlite.SQLiteDatabase.CursorFactory;

importandroid.database.sqlite.SQLiteOpenHelper;

importandroid.util.Log;

 

public classDatabaseHelper extends SQLiteOpenHelper {

    static String dbname = "mydb.db";

    static int dbversion = 1;

       public DatabaseHelper(Context context){//上下文   数据库名  游标工厂 版本号

              super(context, dbname, null,dbversion);

             

       }

    //只在初次使用数据库的时候会被自动调用

       public void onCreate(SQLiteDatabase arg0){

              Log.i("TAG", " 被调用了");

              String sql = "create tableperson(personid integer primary key autoincrement,"+"name varchar(20),ageinteger)";

              arg0.execSQL(sql);

       }

 

       public void onUpgrade(SQLiteDatabasearg0, int arg1, int arg2) {

              Log.i("TAG", " 被调用了");

          String sql="alter table person add phone char(20) null";

          arg0.execSQL(sql);

       }

 

}

接下来讨论具体如何创建表、插入数据、删除表等等

                        publicPersonService(Context context){

                            dbHelper= new DatabaseHelper(context);

                        }

                       

                        publicvoid add(Person person){

                            SQLiteDatabasedb = dbHelper.getReadableDatabase();

                            Stringsql = "insert into person(name, age, phone) values(?,?,?)";

                            db.execSQL(sql,newObject[]{person.getName(), person.getAge(), person.getPhone()});

                        }

                       

                        publicvoid delete(int id){

                            SQLiteDatabasedb = dbHelper.getReadableDatabase();

                            Stringsql = "delete from person where personid=?";

                            db.execSQL(sql,newObject[]{id});

                        }

                       

                        publicvoid update(Person person, int id){

                            SQLiteDatabasedb = dbHelper.getReadableDatabase();

                            Stringsql = "update person set name=?, age=?, phone=? where personid=?";

                            db.execSQL(sql,newObject[]{person.getName(),person.getAge(),person.getPhone(), id});

                        }

                       

                        publicPerson find(int id){

                            SQLiteDatabasedb = dbHelper.getReadableDatabase();

                            Stringsql = "select * from person where personid=?";

                            Cursorcursor = db.rawQuery(sql, new String[]{String.valueOf(id) });

                           

                            if(cursor.moveToNext()){

                                   Personperson = new Person();

                                  

                                   person.setPersionid(cursor.getInt(0));

                                   person.setName(cursor.getString(cursor.getColumnIndex("name")));

                                   person.setAge(cursor.getInt(2));

                                   person.setPhone(cursor.getString(3));

                                  

                                   returnperson;

                            }

                           

                            returnnull;

                        }

 

 

SQLite 中重要的方法 Cursor

 

在你理解和使用Android Cursor 的时候你必须先知道关于 Cursor 的几件事情:

 

    Cursor 是每行的集合。

    使用 moveToFirst() 定位第一行。

    你必须知道每一列的名称。

    你必须知道每一列的数据类型。

    Cursor 是一个随机的数据源。

    所有的数据都是通过下标取得。

 

关于 Cursor 的重要方法:

 

    close()

    关闭游标,释放资源

    copyStringToBuffer(intcolumnIndex, CharArrayBuffer buffer)

    在缓冲区中检索请求的列的文本,将将其存储

    getColumnCount()

    返回所有列的总数

    getColumnIndex(StringcolumnName)

    返回指定列的名称,如果不存在返回-1

    getColumnIndexOrThrow(StringcolumnName)

    从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。

    getColumnName(intcolumnIndex)

    从给定的索引返回列名

    getColumnNames()

    返回一个字符串数组的列名

    getCount()

    返回Cursor 中的行数

    moveToFirst()

    移动光标到第一行

    moveToLast()

    移动光标到最后一行

    moveToNext()

    移动光标到下一行

    moveToPosition(int position)

    移动光标到一个绝对的位置

    moveToPrevious()

    移动光标到上一行

 


原创粉丝点击