android 之SQLite数据库 增、删、改、查

学习android开发不可避免的会涉及数据库的使用,android使用的是SQLite数据库。对于SQLite数据库的基本信息这里就不过多的介绍,我们主要看哈是怎么用的就是了。

与以往数据库不一样的地方

以前我们做javaWeb开发时用jdbc连接,现在变了,个人觉得变得简单了。在应用程序中直接就可以去创建数据库,然后对其进行操作。不用像以前写连接代码。

操作数据库

 

一,SQLiteOpenHelper 类

其中

getReadableDatabase()得到可读的数据库,返回SQLiteDatabase对象,然后通过对象进行数据库操作。

getWritableDatabase()得到可写的数据库,返回SQLiteDatabase对象,然后通过对象进行数据库操作。

onCreate(SQLiteDatabase db)在第一次创建数据库时调用。

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)在更改数据库时都会调用。

onOpen(SQLiteDatabase db)当数据库打开时调用。

close()关闭数据库。

二,SQLiteDatabase类

这个类提供了对数据库的一些基本操作:

insert()

delete()

update()

query()

代码:

SQLiteOpenHelper 的子类:

 

public class DataBaseHelper extends SQLiteOpenHelper {
    
    private static final String DATABASE_NAME = "winenice.db";
    private static final int DATABASE_VERSION = 1;
    
    public static final String TABLE_SWEEP_HISTORY = "sweep_history";
    
    private static final String CREATE_TABLE_SWEEP_HISTORY = "create table if not exists " + TABLE_SWEEP_HISTORY + " (_id integer primary key autoincrement, type text not null, time text not null, content text not null);";
    
    public DataBaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_SWEEP_HISTORY);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_SWEEP_HISTORY);
        onCreate(db);
    }

}

 

 

有了这个类后,我们就可以对数据库进行增、删、改、查操作了。
插入数据:

 

//生成ContentValues对象,key:列名,value:想插入的值
                ContentValues values = new ContentValues();
                values.put("id", 1);
                values.put("body", "hello");
                DatabaseHelper dbhelper = new DatabaseHelper(SqliteActivity.this);
                //得到可写的SQLiteDatabase对象
                SQLiteDatabase db = dbhelper.getWritableDatabase();
                //调用insert方法,将数据插入数据库
                //参数1:表名
                //参数2:如果你想插入空值,那么你必须指定它的所在的列
                db.insert("MSG", null, values);
                System.out.println("插入了:1, hello");

 

删除数据:

 

DatabaseHelper dbhelper = new DatabaseHelper(SqliteActivity.this);
                //得到可写的SQLiteDatabase对象
                SQLiteDatabase db = dbhelper.getWritableDatabase();
                //调用delete方法,删除数据
                db.delete("MSG", "id=?", new String[]{"1"});
                System.out.println("删除了:id=1");

 

修改数据:

ContentValues values = new ContentValues();
                values.put("body", "my dear!");
                DatabaseHelper dbhelper = new DatabaseHelper(SqliteActivity.this);
                //得到可写的SQLiteDatabase对象
                SQLiteDatabase db = dbhelper.getWritableDatabase();
                //调用insert方法,将数据插入数据库
                //参数3:where 子句 "?"是占位符号,对应后面的"1",这和web开发时的语法是一样的
                db.update("MSG", values, "id=?", new String[]{"1"});
                System.out.println("更新了:hello-->my dear!");

查询数据:

 

DatabaseHelper dbhelper = new DatabaseHelper(SqliteActivity.this);
                //得到可读的SQLiteDatabase对象
                SQLiteDatabase db = dbhelper.getReadableDatabase();
                //参数1:表名
                //参数2:要想显示的列
                //参数3:where子句
                //参数4:where子句对应的条件值
                //参数5:分组方式
                //参数6:having条件
                //参数7:排序方式
                Cursor cursor = db.query("MSG", new String[]{"id","body"}, "id=?", new String[]{"1"}, null, null, null);
                System.out.println("查到的数据为:");
                while(cursor.moveToNext()){
                        int id = cursor.getInt(cursor.getColumnIndex("id"));
                        String name = cursor.getString(cursor.getColumnIndex("body"));
                        System.out.println("-->"+id+"::::::::::"+name);
                    }

 

怎样使用adb查看数据库?

SQLite没有客户端,不能直接的查看数据库,所以用它提供的adb吧。

1,进入命令行后输入adb回车,会显示很多的信息。

2,输入adb shell回车,就进入了Linux命令行,现在就可以使用Linux的命令了。

3,ls回车,显示所有的东西,其中有个data。(ls:显示所有,cd:进入)

4,cd data回车,再ls回车,cd data回车,ls回车后就会看到很多的com.。。。的东西,那就是机器上的应用程序,找到你应用程序的包名,然后进入。

5,进去后在查看所有,会发现个databases,进入databases,显示所有就会发现你的数据库名字,我这里使用的是"text_msg"。

6,sqlite3 text_msg回车就进入了你的数据库了,然后“.schema”就会看到该应用程序的所有表及建表语句。

7,现在你就可以使用标准的SQL语句查看刚才生成的数据库及数据了。

          对数据库的操作方法很多,这只是其中一种。

from:http://blog.csdn.net/zzy916853616/article/details/6599898

 

 附:char、varchar、text和nchar、nvarchar、ntext的区别

SQL中char、varchar、text和nchar、nvarchar、ntext的区别
     1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
     2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
    从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
    3、TEXT。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
    4、NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
     所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。
     如果是存储文章等大段内容的时候,纯英文和数字,用text,含有中文字符的,用ntext。

 

 

 

 

 

 

 

posted @ 2012-12-13 21:56  Android Walker  阅读(811)  评论(0编辑  收藏  举报