今天刚刚学习完Sqlite数据库的基础知识,随即把学到的东西记录下来,以便随后查阅,以下是自己对Sqlite数据库的小结:
1.Sqlite简介
       Sqlite是一款轻型的数据库,它包含在一个相对小的C库中,它的设计目标是嵌入式的,由于它占用资源非常少,可能只需要几百K的内存就可以了,并且支持Windows/Linux/Unix等等主流的操作系统,同时可以和很多种程序语言相结合,比如:C#/Java/php等,所以在嵌入式设备中特别受欢迎,这一点也正好符合android的开发要求,所以在Android开发中经常要用到该数据库。
2.Sqlite内部结构
       在内部,Sqlite有以下几个组件组成:SQL编译器、内核、后端以及附件。Sqlite通过利用虚拟机和虚拟数据库引擎,是调试、修改和扩展Sqlite的内核变得更加方便,所有SQL语句被编译成易读的、可以在Sqlite虚拟机中执行的程序集。其结构如下图:
                                                                                                    
                                                                                                                                    Sqlite内部结构图
 3.android中Sqlite的使用方法
        在Android中要想使用Sqlite数据库,首先应该创建一个类继承SQLiteOpenHelper类,我们把这个类命名为DatabaseHelper,它作为一个访问Sqlite的助手类,提供了两方面的功能:
        第一    getReadableDatabase()/getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作;
        第二    提供OnCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作;
实例代码如下:
[java]
public class DatabaseHelper extends SQLiteOpenHelper { 
     
    private static final int VERSION = 1; 
    //在SQLiteOepnHelper的子类当中,必须有该构造函数 
    public DatabaseHelper(Context context, String name, CursorFactory factory, 
            int version) { 
        //必须通过super调用父类当中的构造函数 
        super(context, name, factory, version); 
        // TODO Auto-generated constructor stub 
    } 
    public DatabaseHelper(Context context,String name){ 
        this(context,name,VERSION); 
    } 
    public DatabaseHelper(Context context,String name,int version){ 
        this(context, name,null,version); 
    } 
 
    //该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
        // TODO Auto-generated method stub 
        System.out.println("create a Database"); 
        //execSQL函数用于执行SQL语句 
        db.execSQL("create table user(id int,name varchar(20))"); 
    } 
 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
        // TODO Auto-generated method stub 
        System.out.println("update a Database"); 
    } 

       注:在继承SQLiteOpenHelper类时,必须要有public DatabaseHelper(Context context, String name, CursorFactory factory,int version) 这个构造方法。
       在定义好DatabaseHelper这个助手类后,就可以使用这个类创建Sqlite数据库,并对数据库进行操作了,下面通过一个定义好的Activity进行说明,代码如下:
[java]
public class SQLiteActivity extends Activity { 
    /** Called when the activity is first created. */ 
    private Button createButton; 
    private Button insertButton; 
    private Button updateButton; 
    private Button updateRecordButton; 
    private Button queryButton; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        createButton = (Button)findViewById(R.id.createDatabase); 
        updateButton = (Button)findViewById(R.id.updateDatabase); 
        insertButton = (Button)findViewById(R.id.insert); 
        updateRecordButton = (Button)findViewById(R.id.update); 
        queryButton = (Button)findViewById(R.id.query); 
        createButton.setOnClickListener(new CreateListener()); 
        updateButton.setOnClickListener(new UpdateListener()); 
        insertButton.setOnClickListener(new InsertListener()); 
        updateRecordButton.setOnClickListener(new UpdateRecordListener()); 
        queryButton.setOnClickListener(new QueryListener()); 
    } 
    class CreateListener implements OnClickListener{ 
        @Override 
        public void onClick(View v) { 
            //创建一个DatabaseHelper对象 
            DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db"); 
            //只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库 
            SQLiteDatabase db = dbHelper.getReadableDatabase(); 
        } 
    } 
    class UpdateListener implements OnClickListener{ 
 
        @Override 
        public void onClick(View v) { 
            DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); 
            SQLiteDatabase db = dbHelper.getReadableDatabase(); 
        } 
         
    } 
    class InsertListener implements OnClickListener{ 
 
        @Override 
        public void onClick(View v) { 
            //生成ContentValues对象 
            ContentValues values = new ContentValues(); 
            //想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致 
            values.put("id", 1); 
            values.put("name","zhangsan"); 
            DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); 
            SQLiteDatabase db = dbHelper.getWritableDatabase(); 
            //调用insert方法,就可以将数据插入到数据库当中 
            db.insert("user", null, values); 
        } 
    } 
    //更新操作就相当于执行SQL语句当中的update语句 
    //UPDATE table_name SET XXCOL=XXX WHERE XXCOL=XX... 
    class UpdateRecordListener implements OnClickListener{ 
 
        @Override 
        public void onClick(View arg0) { 
            // TODO Auto-generated method stub 
            //得到一个可写的SQLiteDatabase对象 
            DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db"); 
            SQLiteDatabase db = dbHelper.getWritableDatabase(); 
            ContentValues values = new ContentValues(); 
            values.put("name", "zhangsanfeng"); 
            //第一个参数是要更新的表名 
            //第二个参数是一个ContentValeus对象 
            //第三个参数是where子句 
            db.update("user", values, "id=?", new String[]{"1"}); 
        } 
    } 
    class QueryListener implements OnClickListener{ 
 
        @Override 
        public void onClick(View v) { 
            System.out.println("aaa------------------"); 
            Log.d("myDebug", "myFirstDebugMsg"); 
             
            DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db"); 
            SQLiteDatabase db = dbHelper.getReadableDatabase(); 
            Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null); 
            while(cursor.moveToNext()){ 
                String name = cursor.getString(cursor.getColumnIndex("name")); 
                System.out.println("query--->" + name); 
            } 
        } 
    } 
     

     在上例中可以看出,在创建或者操作数据库前,都要通过DatabaseHelpe类中的getReadbleDatabase()和getWritbleDatabase()两个方法在创建需要的数据库,前者是创建一个只读数据库,后者是创建一个可写数据库。

Android:Sqlitedatabase学习小结的更多相关文章

  1. android逆向学习小结--CrackMe_1

    断断续续的总算的把android开发和逆向的这两本书看完了,虽然没有java,和android开发的基础,但总体感觉起来还是比较能接收的,毕竟都是触类旁通的.当然要深入的话还需要对这门语言的细节特性和 ...

  2. Android学习小结

    自从学习Android以来已经经过三个月了,如今市场对于Android工程师的需求接近饱和,所以学习Android的人也少了很多,很多的培训机构也逐渐将Android课程淘汰,导致学习Android的 ...

  3. 点滴的积累---J2SE学习小结

    点滴的积累---J2SE学习小结 什么是J2SE J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包括那些构成Java语言核心的类.比方:数据库连接.接口定义.输入/输出.网络编程. 学习 ...

  4. Android:日常学习笔记(9)———探究持久化技术

    Android:日常学习笔记(9)———探究持久化技术 引入持久化技术 什么是持久化技术 持久化技术就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失 ...

  5. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  6. Cocos2d-x学习小结 配置篇

    Cocos2d-x学习小结 配置篇 学习工具:Cocos2d-x用户手册,<Cocos2d-x游戏开发之旅> 首先官网下载cocos2d-x源码,安装vs2019.如果没有安装python ...

  7. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  8. flex学习小结

    接触到flex一个多月了,今天做一个学习小结.如果有知识错误或者意见不同的地方.欢迎交流指教. 画外音:先说一下,我是怎么接触到flex布局的.对于正在学习的童鞋们,我建议大家没事可以逛逛网站,看看人 ...

  9. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

随机推荐

  1. The 'microsoft.jet.oledb.4.0' provider is not registered on the local machin

    1,2选取目标站点,然后3的高级设置,4启用32位的应用程序的属性变为true就可以了.当然,网络上还有其他的版本,你也可以尝试下. 原文地址:http://weblogs.asp.net/kenco ...

  2. 「TJOI2013」循环格

    题目链接 戳我 \(Solution\) 我们观察发现循环格要满足每个点的入度都为\(1\) 证明: 我们假设每个点的入读不一定为\(1\),那么必定有一个或多个点的入度为0,那么则不满足循环格的定义 ...

  3. subset子集全排序问题

    思路一 可以用递推的思想,观察S=[], S =[1], S = [1, 2] 时解的变化. 可以发现S=[1, 2] 的解就是 把S = [1]的所有解末尾添上2,然后再并上S = [1]里面的原有 ...

  4. [SinGuLaRiTy] 复习模板-数据结构

    [SinGuLaRiTy-1040] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 二维线段树 2D_Segment_Tree //示例:单 ...

  5. BeanShell Processor_使用Java处理脚本

    版权声明:本文为博主原创文章,未经博主允许不得转载. [try-catch] 建议使用Try----Catch块,这样Java语句出现问题时,日志更清晰: try { //java代码 } catch ...

  6. ClickOnce发布包含某文件

    第一步.在文件上右键选择“属性”,“复制到输出目录”选择“始终复制”: 第二步.“生成操作”选择“选择”: 第三步.通过 项目右键属性-发布-应用程序文件 查看想要包含的文件是否包含进来了. 注:可以 ...

  7. 深度学习之 TensorFlow(五):mnist 的 Alexnet 实现

    尝试用 Alexnet 来构建一个网络模型,并使用 mnist 数据查看训练结果. 我们将代码实现分为三个过程,加载数据.定义网络模型.训练数据和评估模型. 实现代码如下: #-*- coding:u ...

  8. 微服务架构下分布式事务解决方案——阿里云GTS

    https://blog.csdn.net/jiangyu_gts/article/details/79470240 1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这 ...

  9. Python3之shutil模块

    一. 简介 shutil 是高级的文件,文件夹,压缩包处理模块. 二. 使用 shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中 import ...

  10. mysql 导入 导出

    mysql导入导出sql文件   window下 1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u dbuser -p dbname ...