zoukankan      html  css  js  c++  java
  • 关于SQLite的创建以及使用相关说明

    关于SQLite的创建以及使用相关说明

    没有给出具体的程序,但看完这后可能对你有所帮助。

    数据库操作基本知识:

    execSQL(String sql):

    执行一个数据库语句

    insert(table,nullColumbHack,contentValues initialValues):

    在表(table)中插入一行初始值(initialValues),nullColumnHack需要传入一个列名。

    1:对于SQLite数据库的创建以及使用的第一种方法:

    ****************************************************

    第一步(单独创建一个java类):

    ****************************************************

    在Android开发中,提供了一个类:SQLiteOpenHelper,先对此类进行说明(翻译自官方文档):

    1==========================================================

    概览----SQLiteOpenHelper

    1:SQLiteOpenHelper是一个可以很方便创建和管理数据库的抽象类。

    2:在具体创建以及管理数据库时我们可以新建一个继承该抽象类的子类。

    在该子类中,我们需要实现三个方法【onOpen()可选】:

    onCreate() onUpgrade() onOpen()

    3:这个子类在打开数据库的同时也顾及到了以下几点:

    (1)如果打开数据库时不存在指定打开的数据库,则创建数据库

    (2)如果有必要,则更新数据库

    4:事务被用于确保数据库总是处于敏感状态

    5:为了避免应用程序启动时,由于启动伴随着长时间的数据库升级而阻塞,该类的使用可以使ContentProvider更容易实现推迟打开或者升级数据库,直到第一次使用该数据库。

    ==========================================================1

    2==========================================================

    *构造方法详解----SQLiteOpenHelper

    *public SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version)

    *创建一个帮助对象用于创建,打开或者管理一个数据库,这个方法执行总是非常迅速的。

    *当且仅当getWritableDatabase()或者getReadableDatabase()中之一被调用时,数据库才会被真正的创建,也就是说,如果这两个方法未调用,数据库未创建。

    *参数含义:

    *Context:上下文环境---用于指定在哪里打开或者创建一个数据库

    *name :名称-------数据库文件的名称,如果是内存中的数据库,可以填写为null

    *factory:工厂-------用于创建一个指针对象,或者默认为null

    *version:版本-------数据库版本号(开始为1)如果数据库是旧的,可以使用onUpgrade()来更新数据库,如果数据库是新的可以使用downgrade()降级

    =========================================================2

    显然SQLiteOpenHelper类是一个抽象类,必须要用一个类(我们在这儿以subClass为例)来继承它,然后才能进行相关操作。在subClass类中需要创建subClass类的构造方法,然后在构造方法中引用其父类的构造方法,这便由一个抽象类到了一个实例类的转换。

    在subClass类中需要至少需要覆写两个方法:

    onCreate() onUpgrade()

    其中onCreate(SQLitebase db)中需要传入的参数是SQLitebase类型的,【关于SQLitebase类,这个类拥有的方法可以创建,删除,执行SQL命令或者执行其他管理数据库的任务】所以这里应该传入一个SQLitebase类型的对象。比如我们在这里传入sld,那么意味着我们将可以创建一个sld数据库,实现方法就是在onCreate()方法体中加入这么一句:

    sld.execSQL(“create table IF NOT EXISTS”);

    当然你可以用一个常量来定义,比如你可以新建一个Constans.java类,在里面定义一个常量:

    public static final String DATABASE_CREATE="create table IF NOT EXISTS "

    然后你就可以使用了,上面的语句可以转换为:

    sld.execSQL(Constants.DATABASE_CREAT);

    这样你就完成了创建一个数据库任务。当然到此还远远没有结束工作……

    接下来还要覆写一个方法:

    onUpgrade(SQLitebase db,int oldVersion,int newVersion)

    这里的参数显而易见,第一个是传入你需要更新的数据库名字,第二个是当前版本,最后一个是最新的数据库版本。更新数据库时可以丢弃原数据库创建一个新的数据库,所以在该方法体中可以用execSQL方法执行一个SQL语句,丢弃原来的表,然后利用上面提到过的onCreate()方法重新建立一个数据库。

    第一步到此暂且打住,第一步的目的是实现一个数据库的创建。我们已经大致完成,接下来进入第二步。

    ****************************************************

    第二步(单独创建一个java类)

    ****************************************************

    第二步的目的是:实现对数据库的常见操作。

    首先在这个类中我们需要先建立该类的构造方法,构造方法体中需要创建一个SQLiteOpenHelper类的对象,我们需要在这个类中用该对象实现一些常见方法的构建,该对象由第一步中的类来新建,我们在这儿假设为:soh。

    常见操作中最重要的大概是关闭打开数据库了。所以在这个类中我们首先实现打开与关闭的功能。在打开的方法构建中需要注意的时,每一次打开数据库之前必须要执行:

    db = soh.getWritableDatabase();

    以得到一个数据库,其中的db是一个SQLiteDatabase对象,你当然可以随便起个名字,这是封装在这个java类中的,起到传递参数的作用,并非你所要创建的数据库名字。

    然后就是关闭数据库了,仍然是使用soh类来实现,方法体为:

    soh.close();

    实际上对于数据库的打开与关闭,均要用到继承了SQLiteOpenHelper类的子类subClass中的getWritableDatabase()与close()方法。

    对于其他的方法我在这儿只简要的提一下:

    主要有:insert() delete() query() update()

    对应的定义:

    insert()

    public long insert (String table, String nullColumnHack, ContentValues values)

    delete()

    public int delete (String table, String whereClause, String[] whereArgs)

    query():

    public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)

    update():

    public int update (String table, ContentValues values, String whereClause, String[] whereArgs)

    只要涉及到插入,删除,查询,更新的方法,上面四个必然会用到,它们均是SQLiteDatabase所包括的方法,所以可以使用SQLiteDatabase的对象来进行方法的执行。

    ****************************************************

    第三步(单独创建一个java类)

    ****************************************************

    在上面两个步骤中我们完成了对于SQLite数据库的创建以及实现了常用方法的创建。这一步我们新建的类就开始使用上两步中的成果。

    引入各种布局文件,为各种按钮设置监听操作,在这里就不多提了。

    2:对于SQLite数据库的创建以及使用的第二种方法:

    这一种方法相对来说要容易一些。

    我们在一个java类中实现对数据库的创建,打开,关闭以及其他的常用操作。

    首先我们先要介绍一些基本知识:

    ========================================================

    先来看一下SQLiteDatabase的openDatabase方法的定义:

    public static openDatabase (String path, SQLiteDatabase.CursorFactory factory, int flags)

    根据标志:OPEN_READWRITE(读写模式) OPEN_READONLY (只读模式)CREATE_IF_NECESSARY (如果需要的话,创建数据库)NO_LOCALIZED_COLLATORS(不根据本地化语言对数据进行排序)

    打开数据库。

    如果你希望做一些其他的事情的话,如设置数据库的位置到当前系统位置,你可以调用函数setLocale(Locale)。

    参数释义:

    Path:要创建或者打开的数据库文件的路径

    Factory:当查询被调用的时候,这个可选的factory类可以被调用来实例化一个指针,当然你也可以默认其为null

    Flags:控制数据库的读取模式

    其他:

    1:返回一个新的打开的数据库。:

    2:如果数据库不能够读取,则抛出一个SQLiteException异常。

    ========================================================

    所以我们可以使用此方法来创建或者打开一个数据库。除此之外我们还要知道android数据库的默认路径为:

    data/data/your package /database name

    其中“data/data/”是固定的,“your package”是指你的java类所在的包名,“database name”是指你的数据库名字,如果该数据库不存在将会依据你的指示进行创建与否。

    比如方法体中你可以这么写(我们以创建sld数据库为例):

    sld=SQLiteDatabase.openDatabase

    (

    "data/data/china.myth.sqlitestudy01/SQLite",

    null,

    SQLiteDatabase.OPEN_READWRITE|SQLiteDatabase.CREATE_IF_NECESSARY

    );

    setText("打开数据库");

    String sql = "create table if not exists people (sname char(5),sphone varchar(20),sdress varchar(20));";

    sld.execSQL(sql);

    setText("创建数据库");

    关闭数据库时,你可以在数据库中直接写为:

    sld.close();

    对于其他的方法,你完全可以将一个sql语句写为字符串,然后使用execSQL()方法进行执行即可实现插入,更新,查询,删除等等。


    作者:KillerLegend
    出处:http://www.cnblogs.com/KillerLegend/
    分享最新的资源,分享个人所得,欢迎关注我的新浪微博
    新浪微博主页:ikey4u
    我的个人博客:www.ikey4u.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
  • 相关阅读:
    组装query,query汇总,query字段
    POJ 1276, Cash Machine
    POJ 1129, Channel Allocation
    POJ 2531, Network Saboteur
    POJ 1837, Balance
    POJ 3278, Catch That Cow
    POJ 2676, Sudoku
    POJ 3126, Prime Path
    POJ 3414, Pots
    POJ 1426, Find The Multiple
  • 原文地址:https://www.cnblogs.com/killerlegend/p/3277979.html
Copyright © 2011-2022 走看看