码迷,mamicode.com
首页 > 数据库 > 详细

【SQLite使用方法】

时间:2015-05-11 18:10:50      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:android   windows   数据库管理   嵌入式   操作系统   

一、SQLite介绍

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

二、SQLiteOpenHelper使用方法

JAVA中使用JDBC来访问数据库,而Android则设计使用一套自己的API来访问数据库,必须要是用到SQLiteOpenHelper方法来访 问数据库,不使用也可以,但会很麻烦。SQLiteOpenHelper是一个管理数据库的创建、版本等操作的帮助类。可以创建一个子类去实现一些方法。SQLiteOpenHelper是一个抽象类,用户需要继承这个类,并实现该类中的一些方法。

使用SQLiteOpenHelper来访问数据库必须要使用一些方法:

方法名

描述

getReadableDatabase():

创建或者打开一个可读的数据库,会返回一个SQLiteDatabase对象,基于这个对象可以进行增删改查操作。

getWritableDatabase():

创建或者打开一个(可读)可写的数据库,同样也会返回一个SQLiteDatabase对象,基于这个对象可以进行增删改查操作。

onCreate(SQLiteDatabase db):

回调函数,当数据库第一次被创建的时候就会调用。

onOpen(SQLiteDatabase db):

回调函数,当数据库被打开的时候就会被调用。

onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion):

回调函数,当数据库被更新的时候就会被调用。

close():

关闭数据库。

三、             使用adb访问SQLite

adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。 adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。

adb是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机). 它的主要功能有:  

1)      运行设备的shell(命令行)  

2)      管理模拟器或设备的端口映射  

3)      计算机和设备之间上传/下载文件  

4)      将本地apk软件安装至模拟器或android设备  

ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备.

打开命令行,输入adb,就会看到adb的相关命令。如果看到的是adb不是内部或外部命令这个提示,说明环境变量没有配置好,以前path只配置了 sdk目录下的tools,对于旧版本中adb.exe就在该目录下,可以正常启动。但是对于新版本sdk,adb.exe被移动到了platform- tools目录下,这一点需要注意。

如果此时提示device not found:

则是因为模拟器没有启动,需要先启动模拟器,启动模拟器可以从Eclipse上的Opens Android SDK and AVD Manageer上选择需要启动的模拟器进行启动,也可以从命令行进行启动:

SQLite数据库放在./data/data/当前虚拟机运行的应用程序的包名/databases/目录里。当没有创建数据库的时候,是没有databases目录的,只有当数据库创建成功时才有。(我的程序包名均为com.android.activity)

    此时只有lib目录,没有databases目录。当运行创建程序之后,就会创建databases目录,且该目录下有数据库。

四、             SQLite增删改查

DatabaseHelper.java

  1. //DatabaseHelper作为一个访问SQLite的助手累,提供两个方面的功能


  2. //第一,getReadableDatabase()和getWriteableDatabase()可以获得SQLiteDatabase对象,通过这个对象对数据库进行操作


  3. //第二,提供了onCreate和onUpdate两个回调函数,允许我们在创建和升级数据库时,进行自己的操作


  4. public class DatabaseHelper extends SQLiteOpenHelper {


  5.    


  6.     public static final int VERSION=3;


  7.     //在SQLiteOpenHelper的子类中,必须有下面的第一个构造函数


  8.     //第一个参数:一个Activity对象,第二个参数:数据库的名字,第三个参数:第四个参数:当前数据库的版本


  9.     public DatabaseHelper(Context context, String name, CursorFactory factory,


  10.            int version) {


  11.        //必须通过super调用父类当中的构造函数


  12.        super(context, name, factory, version);


  13.        // TODO Auto-generated constructor stub


  14.     }


  15.     public DatabaseHelper(Context context,String name,int version){


  16.        this(context,name,null,version);


  17.     }


  18.     public DatabaseHelper(Context context,String name){


  19.        this(context,name,VERSION);


  20.     }


  21.     //onCreate函数是第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabase对象的时候,才会调用这个方法


  22.     //也就是在DatabaseHelper调用getReadableDabase或者getWriteableDatabase时,如果是第一次创建数据库才执行


  23.     @Override


  24.     public void onCreate(SQLiteDatabase db) {


  25.        // TODO Auto-generated method stub


  26.        System.out.println("创建数据库");


  27.        db.execSQL("create table user(id int,name varchar(20))");//千万别写错了


  28.       


  29.     }


  30.    


  31.     //数据库版本更新的时候,调用这个函数


  32.     //比方说,创建数据库的版本是1,更新后的版本是2,就表示数据库更新了


  33.     @Override


  34.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


  35.        // TODO Auto-generated method stub


  36.         System.out.println("更改数据库");    


  37.     }


  38.    


  39.       


  40. }

复制代码

MySQLiteActivity.java

  1. public class MySQLiteActivity extends Activity {


  2.    


  3.     private Button createButton = null;


  4.     private Button updataButton = null;


  5.     private Button insertButton = null;


  6.     private Button unButton = null;


  7.     private Button selectButton = null;


  8.     @Override


  9.     public void onCreate(Bundle savedInstanceState) {


  10.         super.onCreate(savedInstanceState);


  11.         setContentView(R.layout.main);


  12.        


  13.         createButton = (Button)this.findViewById(R.id.createButton);


  14.         createButton.setOnClickListener(new CreateListener());


  15.        


  16.         updataButton =(Button)this.findViewById(R.id.updateButton);


  17.        


  18.     }


  19.     class CreateListener implements OnClickListener{




  20.        @Override


  21.        public void onClick(View v) {


  22.            // TODO Auto-generated method stub


  23.            //创建一个DatabaseHelper对象


  24.            DatabaseHelper dbHelper = newDatabaseHelper(MySQLiteActivity.this,"bjldb");


  25.             //只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库


  26.            SQLiteDatabase db = dbHelper.getReadableDatabase();


  27.        }      


  28.     }


  29.     class InsertListener implements OnClickListener{




  30.        @Override


  31.        public void onClick(View v) {


  32.            // TODO Auto-generated method stub


  33.            //生成ContentValues对象,和map对象差不多,存放的都是键值对


  34.            ContentValues values= new ContentValues();


  35.            //向该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值


  36.            values.put("id",1);


  37.            values.put("name", "张三丰");


  38.            DatabaseHelper dbHelper = newDatabaseHelper(MySQLiteActivity.this,"bjldb");


  39.            SQLiteDatabase db = dbHelper.getWritableDatabase();


  40.            //调用insert方法,就可以将数据插入到数据库当中,三个参数:表名、默认空值,ContentValues对象


  41.            db.insert("user",null,values);


  42.        }      


  43.     }


  44.     class UpdateRecordListener implementsOnClickListener{




  45.        @Override


  46.        public void onClick(View v) {


  47.            // TODO Auto-generated method stub


  48.            DatabaseHelper dbHelper = newDatabaseHelper(MySQLiteActivity.this,"bjldb");


  49.            SQLiteDatabase db = dbHelper.getWritableDatabase();


  50.            ContentValues values = new ContentValues();


  51.            values.put("name", "hello");


  52.            ///第一个参数是要更新的表名


  53.             //第二个参数是一个ContentValeus对象


  54.             //第三个参数是where子句


  55.            //第四个参数,对占位符进行赋值,第一个元素赋值给第一个展位副


  56.            db.update("users",values,"id=?",new String[]{"1"});


  57.           


  58.        }


  59.    


  60.     }


  61.    class SelectListener implements OnClickListener{




  62.     @Override


  63.     public void onClick(View v) {


  64.        // TODO Auto-generated method stub


  65.        DatabaseHelper dbHelper = newDatabaseHelper(MySQLiteActivity.this,"bjldb");


  66.        SQLiteDatabase db = dbHelper.getWritableDatabase();


  67.         Cursor cursor = db.query("user",new String[]{"id","name"},"id=?",new String[]{"1"},null,null,null);


  68.         while(cursor.moveToNext()){


  69.         //getString必须用索引


  70.         String name= cursor.getString(cursor.getColumnIndex("name"));


  71.         System.out.println("姓名是"+name);


  72.         }


  73.     }


  74.       


  75.    }


  76. }

复制代码

说明:

1)      在CreateListener这个监听器中是用来创建数据库的,创建数据库必须要先创建一个DatabaseHelper对象,同时调用的是 DatabaseHelper两个参数的构造方法,分别为当前Activity的对象,以及要创建的数据库的名字。并且只有调用了 DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会 创建,或打开一个数据库。

2)      UpdateListener是用来更新数据库的,不是更新数据的。由于默认数据库版本为1,此处设置为2,则android会自动调用onUpgrade方法。

3)      插入数据必须使用ContentValues对象进行数据的存储、传递。contentValue对象和Map差不多,存放的都是键值对。想在该对象当中 插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致。由于插入数据,相对于修改,所以版本号为2。最后调用 insert方法就可以将数据插入到数据库当中,三个参数:表名、如果ContentValues对象为空时的默认值,ContentValues对象。

4)      更新数据操作需要使用ContentValues对象存储需要更新的列名以及更新后的值。最后调用DatabaseHelper的update方法,参数 分别为表名、contentValues对象,where子句,此时相当于JDBC的PrepareStatement的方法使用?作为占位符,在后面的 String数组中设置占位符的值。

5)      数据查询是调用query方法,该方法参数众多,一般的参数为:表名、存储要查询列的String型数组、where子句、占位符数组、groupby、 having、orderby。返回值为Cursor类型,循环调用cursor的moveToNext方法即可。

6)      不要过于依赖SQLite,不太稳定。


【SQLite使用方法】

标签:android   windows   数据库管理   嵌入式   操作系统   

原文地址:http://wufanxin.blog.51cto.com/7318130/1650324

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!