zoukankan      html  css  js  c++  java
  • Android:Sqlitedatabase学习小结

    今天刚刚学习完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()两个方法在创建需要的数据库,前者是创建一个只读数据库,后者是创建一个可写数据库。

  • 相关阅读:
    希腊字母
    word写文章时公式编号~~以后不要再浪费时间在这些事情上
    网络中的一些基本概念~~但很重要
    导师教给我们的~~
    ONE工具配置
    java环境变量设置
    【转载】UnicodeEncodeError: 'gbk' codec can't encode character 'xa0' in position XXX
    python中yield的用法详解——最简单,最清晰的解释【转载】
    python-乌龟和鱼游戏(面向对象实例)
    centOS7 使用yum命令报错:Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
  • 原文地址:https://www.cnblogs.com/AceIsSunshineRain/p/5094305.html
Copyright © 2011-2022 走看看