zoukankan      html  css  js  c++  java
  • Android之操作SQLite

    1.SQLite简介

    SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入  式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java、C++、.Net等,还有ODBC接口,同样比起 Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

    2.SQLite数据类型

    一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种常用的数据类型:

    NULL: 这个值为空值

    VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。

    CHAR(n):长度固定为n的字串,n不能超过 254。

    INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.

    REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.

    TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).

    BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改  变格式。

    DATA :包含了 年份、月份、日期。

    TIME: 包含了 小时、分钟、秒。

    3.SQLiteDatabase的常用方法 

    方法名称
    方法表示含义
    openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory  factory)
    打开或创建数据库
    insert(String table,String nullColumnHack,ContentValues  values)
    插入一条记录
    delete(String table,String whereClause,String[]  whereArgs)
    删除一条记录
    query(String table,String[] columns,String selection,String[]  selectionArgs,String groupBy,String having,String  orderBy)
    查询一条记录
    update(String table,ContentValues values,String whereClause,String[]  whereArgs)
    修改记录
    execSQL(String sql)
    执行一条SQL语句
    close()
    关闭数据库

    下面就在代码中查看详细的解释:

    SQLiteActivity

      1 package mars.sqlite3;
      2 
      3 import mars.sqlite3.db.DatabaseHelper;
      4 import android.app.Activity;
      5 import android.content.ContentValues;
      6 import android.database.Cursor;
      7 import android.database.sqlite.SQLiteDatabase;
      8 import android.os.Bundle;
      9 import android.util.Log;
     10 import android.view.View;
     11 import android.view.View.OnClickListener;
     12 import android.widget.Button;
     13 
     14 public class SQLiteActivity extends Activity {
     15     /** Called when the activity is first created. */
     16     private Button createButton;
     17     private Button insertButton;
     18     private Button updateButton;
     19     private Button updateRecordButton;
     20     private Button queryButton;
     21     @Override
     22     public void onCreate(Bundle savedInstanceState) {
     23         super.onCreate(savedInstanceState);
     24         setContentView(R.layout.main);
     25         createButton = (Button)findViewById(R.id.createDatabase);
     26         updateButton = (Button)findViewById(R.id.updateDatabase);
     27         insertButton = (Button)findViewById(R.id.insert);
     28         updateRecordButton = (Button)findViewById(R.id.update);
     29         queryButton = (Button)findViewById(R.id.query);
     30         createButton.setOnClickListener(new CreateListener());
     31         updateButton.setOnClickListener(new UpdateListener());
     32         insertButton.setOnClickListener(new InsertListener());
     33         updateRecordButton.setOnClickListener(new UpdateRecordListener());
     34         queryButton.setOnClickListener(new QueryListener());
     35     }
     36     class CreateListener implements OnClickListener{
     37         @Override
     38         public void onClick(View v) {
     39             //创建一个DatabaseHelper对象
     40             DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
     41             //只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库
     42             SQLiteDatabase db = dbHelper.getReadableDatabase();
     43         }
     44     }
     45     class UpdateListener implements OnClickListener{
     46 
     47         @Override
     48         public void onClick(View v) {
     49             DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
     50             SQLiteDatabase db = dbHelper.getReadableDatabase();
     51         }
     52         
     53     }
     54     class InsertListener implements OnClickListener{
     55 
     56         @Override
     57         public void onClick(View v) {
     58             //生成ContentValues对象
     59             ContentValues values = new ContentValues();
     60             //想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
     61             values.put("id", 1);
     62             values.put("name","zhangsan");
     63             DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
     64             SQLiteDatabase db = dbHelper.getWritableDatabase();
     65             //调用insert方法,就可以将数据插入到数据库当中
     66             db.insert("user", null, values);
     67         }
     68     }
     69     //更新操作就相当于执行SQL语句当中的update语句
     70     //UPDATE table_name SET XXCOL=XXX WHERE XXCOL=XX...
     71     class UpdateRecordListener implements OnClickListener{
     72 
     73         @Override
     74         public void onClick(View arg0) {
     75             // TODO Auto-generated method stub
     76             //得到一个可写的SQLiteDatabase对象,这里的version必须为2时才可以,因为刚开始的时候更新为了2,如果为1的话会出现空异常错误
     77             DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
     78             SQLiteDatabase db = dbHelper.getWritableDatabase();
     79             ContentValues values = new ContentValues();
     80             values.put("name", "zhangsanfeng");
     81             //第一个参数是要更新的表名
     82             //第二个参数是一个ContentValeus对象
     83             //第三个参数是where子句
     84             db.update("user", values, "id=?", new String[]{"1"});
     85         }
     86     }
     87     class QueryListener implements OnClickListener{
     88 
     89         @Override
     90         public void onClick(View v) {
     91             System.out.println("aaa------------------");
     92             Log.d("myDebug", "myFirstDebugMsg");
     93             
     94             //以下是出错的代码
     95             DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
     96             SQLiteDatabase db = dbHelper.getReadableDatabase();
     97             
     98             //参数1:表名   
     99             //参数2:要想显示的列   
    100             //参数3:where子句   
    101             //参数4:where子句对应的条件值   
    102             //参数5:分组方式   
    103             //参数6:having条件   
    104             //参数7:排序方式
    105             Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);
    106             while(cursor.moveToNext()){
    107                 String name = cursor.getString(cursor.getColumnIndex("name"));
    108                 System.out.println("query--->" + name);
    109             }
    110             db.close();
    111         }
    112     }
    113     
    114 }

    DatabaseHelper

     1 package mars.sqlite3.db;
     2 
     3 import android.content.Context;
     4 import android.database.sqlite.SQLiteDatabase;
     5 import android.database.sqlite.SQLiteOpenHelper;
     6 import android.database.sqlite.SQLiteDatabase.CursorFactory;
     7 
     8 //DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能,
     9 //第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作
    10 //第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作
    11 
    12 public class DatabaseHelper extends SQLiteOpenHelper {
    13     
    14     private static final int VERSION = 1;
    15     //在SQLiteOepnHelper的子类当中,必须有该构造函数
    16     public DatabaseHelper(Context context, String name, CursorFactory factory,
    17             int version) {
    18         //必须通过super调用父类当中的构造函数
    19         super(context, name, factory, version);
    20         // TODO Auto-generated constructor stub
    21     }
    22     public DatabaseHelper(Context context,String name){
    23         this(context,name,VERSION);
    24     }
    25     public DatabaseHelper(Context context,String name,int version){
    26         this(context, name,null,version);
    27     }
    28 
    29     //该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法
    30     @Override
    31     public void onCreate(SQLiteDatabase db) {
    32         // TODO Auto-generated method stub
    33         System.out.println("create a Database");
    34         //execSQL函数用于执行SQL语句
    35         db.execSQL("create table user(id int,name varchar(20))");
    36     }
    37 
    38     @Override
    39     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    40         // TODO Auto-generated method stub
    41         System.out.println("update a Database");
    42     }
    43 
    44 }

    效果截图如下:

    查询数据截图:

    更新数据然后查询数据截图:

    使用命令来查询sqlite数据库

    首先打开adb调试,如果打开不成功,说明adb添加到环境变量里面,把adb添加到环境变量里面即可,具体的百度一下,比较简单。

    如果出现下面的说明成功:

    因为Android是基于Linux内核开发的所以可以使用shell命令进行操作,但是在打开此命令的时候有可能会报错,这时最大的可能就是你的模拟机没有开,开开模拟机就不会有这样的错误:

    然后开始使用Linux命令操作sqlite,首先进入data包,然后一直到显示所有的工程名就可以了:

    然后进入包来寻找数据库:

    进入databases数据库:

    注意:这里的ls -l是显示包里面的所有的包的:

    然后使用sqlite3进行操作数据库语句:

    到这里就结束了,具体的可以自己实践实践。在这里给大家推荐一个个人认为不错的博客:http://blog.csdn.net/codeeer/article/details/30237597

  • 相关阅读:
    Python并行编程(十三):进程池和mpi4py模块
    Python 列表集合 字典推导式、生成器表达式
    Python 迭代对象、迭代器
    Python 参数,嵌套函数 的变量 使用
    Python 编码进阶
    Python 深浅Copy
    Python 代码块、缓存机制
    Python 列表,字典 相关方法
    初识 python 字符串 相关函数
    初识编码格式
  • 原文地址:https://www.cnblogs.com/bingbingliang-xiaomonv/p/5472901.html
Copyright © 2011-2022 走看看