zoukankan      html  css  js  c++  java
  • SQLite入门

    一、什么是SQLite

    SQLite是一款开源的、轻量级的、嵌入式的、关系型数据库。它在2000年由D. Richard Hipp发布,可以支援Java、Net、PHP、Ruby、Python、Perl、C等几乎所有的现代编程语言,支持Windows、Linux、Unix、Mac OS、Android、IOS等几乎所有的主流操作系统平台。

    SQLite被广泛应用的在苹果、Adobe、Google的各项产品。如果非要举一个你身边应用SQLite的例子的话,如果你的机器中装的有迅雷,请打开迅雷安装目录,搜索一下sqlite3.dll,是不是找到了它的身影? 如果你装的有金山词霸,那么打开他的安装目录也会看到sqlite.dll的存在。是的,SQLite早就广泛的应用在我们接触的各种产品中了,当然我们今天学习它,是因为在Android开发中,Android推荐的数据库,也是内置了完整支持的数据库就是SQlite。

    SQLite的特性:

    1. ACID事务

    2. 零配置 – 无需安装和管理配置

    3. 储存在单一磁盘文件中的一个完整的数据库

    4. 数据库文件可以在不同字节顺序的机器间自由的共享

    5. 支持数据库大小至2TB

    6. 足够小, 大致3万行C代码, 250K

    7. 比一些流行的数据库在大部分普通数据库操作要快

    8. 简单, 轻松的API

    9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定

    10. 良好注释的源代码, 并且有着90%以上的测试覆盖率

    11. 独立: 没有额外依赖

    12. Source完全的Open, 你可以用于任何用途, 包括出售它

    13. 支持多种开发语言,C, PHP, Perl, Java, ASP.NET,Python

    二、SQLiteDatabase类和SQLiteOpenHelper类

    (1)SQLiteDatabase类:提供了一系列管理SQLite数据库的方法。而且要对数据库操作的话,必须得到SQLiteDatabase对象。

    (2)SQLiteOpenHelper类:作为一个助手类,用来获得SQLiteDatabase对象。它提供两个方面的功能:

      1. getReadableDatabase()或者getWritableDatabase()方法来得到SQLiteDatabase对象,通过该对象可以对SQLite数据库进行操作。

      2.提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作。

    因此,SQLite、SQLiteDatabase、SQLiteOpenHelper的关系描述如下。

    SQLiteOpenHelper---获得-->SQLiteDatabase---操作-->SQLite数据库。

    也就是说,首先得到一个SQLiteOpenHelper对象,然后通过该对象的getReadableDatabase()或者getWritableDatabase()方法来得到SQLiteDatabase对象,然后再用SQLiteDatabase对象对SQLite数据库进行操作。

    接下来用一个小工程演示下:

    step1:新建android工程,命名为TestSQLite,工程目录如下图所示:

    step2:设置布局文件main.xml

    main.xml
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:orientation="vertical"
     4     android:layout_width="fill_parent"
     5     android:layout_height="fill_parent">
     6     <Button
     7         android:id="@+id/createdatabase"
     8         android:layout_width="fill_parent"
     9         android:layout_height="wrap_content"
    10         android:text="createDatabase"/>
    11         
    12     <Button
    13         android:id="@+id/updatedatabase"
    14         android:layout_width="fill_parent"
    15         android:layout_height="wrap_content"
    16         android:text="updateDatabase"/>
    17     
    18     <Button
    19         android:id="@+id/insert"
    20         android:layout_width="fill_parent"
    21         android:layout_height="wrap_content"
    22         android:text="insert"/>
    23     
    24     <Button
    25         android:id="@+id/update"
    26         android:layout_width="fill_parent"
    27         android:layout_height="wrap_content"
    28         android:text="update"/>
    29     
    30     <Button
    31         android:id="@+id/delete"
    32         android:layout_width="fill_parent"
    33         android:layout_height="wrap_content"
    34         android:text="delete"/>
    35     
    36     <Button
    37         android:id="@+id/query"
    38         android:layout_width="fill_parent"
    39         android:layout_height="wrap_content"
    40         android:text="queryTheCursor"/>
    41     
    42     <ListView
    43         android:id="@+id/listView"
    44         android:layout_width="fill_parent"
    45         android:layout_height="wrap_content"/>
    46     
    47 </LinearLayout>

    step3:创建抽象辅助类SQLiteOpenHelper的子类

    DBHelper
     1 package com.cb.sqlite1;
     2 
     3 
     4 import android.content.Context;
     5 import android.database.sqlite.SQLiteDatabase;
     6 import android.database.sqlite.SQLiteDatabase.CursorFactory;
     7 import android.database.sqlite.SQLiteOpenHelper;
     8 import android.util.Log;
     9 
    10 public class DBHelper extends SQLiteOpenHelper{
    11     
    12 
    13     private static String DATABASE_NAME = "test.db";
    14     private static int VERSION = 1;
    15     private String tag = "DBHelper";
    16     
    17     //在SQLiteOpenHelper的子类中,必须有构造函数
    18     public DBHelper(Context context, String name, CursorFactory factory,
    19             int version) {
    20         //必须调用父类的构造函数
    21         super(context, name, factory, version);
    22     }
    23     
    24     public DBHelper(Context context, int version) {
    25         this(context, DATABASE_NAME, null, version);
    26     }
    27     
    28     public DBHelper(Context context) {
    29         this(context, VERSION);
    30     }
    31     
    32     
    33     
    34 
    35     //该函数在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabase对象的时候,才会调用这个方法
    36     @Override
    37     public void onCreate(SQLiteDatabase db) {
    38         db.execSQL("create table user (id int ,name varchar(20))");
    39         Log.i(tag, "database onCreate()");
    40     }
    41     
    42     //如果DATABASE_VERSION值被改为2,系统发现现有数据库版本不同,即会调用onUpgrade
    43     @Override
    44     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    45         Log.i(tag, "database onUpgrade()");
    46     }
    47 
    48 }

    step4:TestSQLite.java

    TestSQLite
    package com.cb.sqlite1;
    
    import android.app.Activity;
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class TestSQLite extends Activity {
        private Button mCreateDatabaseBtn;
        private Button mUpdateDatabaseBtn;
        private Button mInsertBtn;
        private Button mUpdateBtn;
        private Button mDeleteBtn;
        private Button mQueryBtn;
        
        private String tag = "TestSQLite";
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            mCreateDatabaseBtn = (Button)findViewById(R.id.createdatabase);
            mUpdateDatabaseBtn = (Button)findViewById(R.id.updatedatabase);
            mInsertBtn = (Button)findViewById(R.id.insert);
            mUpdateBtn = (Button)findViewById(R.id.update);
            mDeleteBtn = (Button)findViewById(R.id.delete);
            mQueryBtn =(Button)findViewById(R.id.query);
            
            
            mCreateDatabaseBtn.setOnClickListener(new CreateDatabaseListener());
            mUpdateDatabaseBtn.setOnClickListener(new UpdateDatabaseListener());
            mInsertBtn.setOnClickListener(new InsertListener());
            mUpdateBtn.setOnClickListener(new UpdateListener());
            mDeleteBtn.setOnClickListener(new DeleteListener());
            mQueryBtn.setOnClickListener(new QueryListener());
    
            
        }
        
        class CreateDatabaseListener implements OnClickListener {
    
            @Override
            public void onClick(View v) {
                Log.i(tag, "CreateDatabaseListener");
                DBHelper helper = new DBHelper(TestSQLite.this);
                SQLiteDatabase db = helper.getWritableDatabase();
            }
            
        }
        
        class UpdateDatabaseListener implements OnClickListener {
    
            @Override
            public void onClick(View v) {
                Log.i(tag, "UpdateDatabaseListener");
                DBHelper helper = new DBHelper(TestSQLite.this, 2);
                SQLiteDatabase db = helper.getWritableDatabase();
            }
            
        }
        
        class InsertListener implements OnClickListener {
    
            @Override
            public void onClick(View v) {
                Log.i(tag, "InsertListener");
                DBHelper helper = new DBHelper(TestSQLite.this);
                SQLiteDatabase db = helper.getWritableDatabase();
                
                ContentValues values = new ContentValues();
                values.put("id", 1);
                values.put("name", "cb");
                
                //发现插入数据时,也会调用onUpgrade()方法
                db.insert("user", null, values);
            }
            
        }
        
        class UpdateListener implements OnClickListener {
    
            @Override
            public void onClick(View v) {
                Log.i(tag, "UpdateListener");
                
                DBHelper helper = new DBHelper(TestSQLite.this);
                SQLiteDatabase db = helper.getWritableDatabase();
                
                ContentValues values = new ContentValues();
                values.put("name", "hello,cb");
                
                db.update("user", values, "id = ?", new String[]{"1"});
            }
            
        }
        
        class DeleteListener implements OnClickListener {
    
            @Override
            public void onClick(View v) {
                Log.i(tag, "DeleteListener");
                
                DBHelper helper = new DBHelper(TestSQLite.this);
                SQLiteDatabase db = helper.getWritableDatabase();
                
                db.delete("user", "id = ?", new String[]{"1"});
            }
            
        }
        
        class QueryListener implements OnClickListener {
    
            @Override
            public void onClick(View v) {
                Log.i(tag, "QueryListener");
                DBHelper helper = new DBHelper(TestSQLite.this);
                SQLiteDatabase db = helper.getWritableDatabase();
                
                /*
                 * Cursor类
                 * 游标刚开始时,处于第一条记录的上方。
                 * cursor.moveToNext()作用:
                 * 1.将游标向下挪动一位
                 * 2.判断当前游标位置下方是否还有数据
                 * */
                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);
                }
            }
            
        }
    }

    step5:执行结果如下

    ps:通过adb查看数据库(adb调试工具,让我们可以以linux的方式调试程序)

    一些SQLite操作命令:

    1.adb shell--------进入了linux命令行,就可以使用linux命令操作android环境。

    2.cd  data/data/包名--------进入相应目录

    3.ls --------查看文件,可以看到数据库

    4.sqlite3 数据库名--------进入数据库命令环境,访问数据库

    5.   .schema --------查看数据库下的信息

  • 相关阅读:
    fiddler 抓取 安卓模拟器 https包
    heidiSQL使用简介
    weblogic重启脚本
    svn命令在linux下的使用
    LVS之NAT和DR服务脚本
    LVS之NAT模型、DR模型配置和持久连接
    apache ab压力测试报错apr_socket_recv
    LVS负载均衡模型及算法概述
    Orcale11g单机安装与卸载
    IPC相关的命令
  • 原文地址:https://www.cnblogs.com/chenbin7/p/2499515.html
Copyright © 2011-2022 走看看