操纵SQLite

来源:互联网 发布:mac草图大师如何破解 编辑:程序博客网 时间:2024/06/06 12:59
 数据库文件位于/data/data/你的程序的包名/databases/中,下图是一个例子



SQLite是Android平台软件开发中会经常用到的数据库产品,作为一款轻型数据库,SQLite的设计目标就是是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够。下面我们一起来看看针对Android平台的SQlite 3的使用。
以下概念都是在Android平台的SQlite限制下的理解:
数据库基础概念
◆SQlite 通过文件来保存数据库,一个文件就是一个数据库。
◆数据库里又包含数个表格;
◆每个表格里面包含了多个记录;
◆每个记录由多个字段组成;
◆每个字段都有其对应的值;
◆每个值都可以指定类型。
数据库名称即文件名;表格有自己的名称;记录没有名称;每个字段都有名称。在SQlite中,记录没有顺序的概念,不存在第一、第二此类的概念;只能通过查询来获取满足条件的记录。我们通过执行SQL指令来操作数据库。
Android平台下数据库相关类
◆SQLiteOpenHelper 抽象类:通过从此类继承实现用户类,来提供数据库打开、关闭等操作函数。
◆SQLiteDatabase 数据库访问类:执行对数据库的插入记录、查询记录等操作。
◆SQLiteCursor 查询结构操作类:用来访问查询结果中的记录。

  1.创建和打开数据库 
  在Android 中创建和打开一个数据库都可以使用openOrCreateDatabase 方法来实现,因为它会自动去检测是否存在这个数据库,如果存在则打开,不过不存在则创建一个数据库;创建成功则返回一个 SQLiteDatabase对象,否则抛出异常FileNotFoundException。下面我们来创建一个名 为"Examples_06_05.db"的数据库,并返回一个SQLiteDatabase对象 mSQLiteDatabase。

SQLiteDataBase mSQLiteDataBase;
1. public class DataBaseHelper {
DataBaseHelper (Context context) {
super(context, DB_NAME, null, DB_VERSION);//null( CursorFactory factory)
}
}
2. DataBaseHelper mOpenHalper= new DataBaseHelper(this);
3. 1. mSQLiteDatabase = mOpenHelper.openOrCreateDatabase("Example_06_05.db", MODE_PRIVATE, null);    
//openOrCreateDatabase(String name, int mode,CursorFactory Factory)

2.创建表 
   一个数据库中可以包含多个表,我们的每一条数据都保存在一个指定的表中,要创建表可以通过execSQL 方法来执行一条SQL语句。execSQL能够执行大部分的SQL语句,下面我们来创建一个名为table1 且包含3个字段的表。 具体代码如下:

1. 1. String CREATE_TABLE = "CREATE TABLE table1 (_id INTEGER PRIMARY KEY, num INTEGER,  data TEXT)";    
2. 2. mSQLiteDatabase.execSQL(CREATE_TABLE);    
3. //或者利用StringBuilder
2. StringBuilder sql = new StringBuilder();
3. sql.append("CREATE TABLE ");
4. sql.append(TBL_NAME);
5. sql.append(" (");
6. sql.append(FIELD_ID + " TEXT PRIMARY KEY NOT NULL, ");
7. sql.append(FIELD_NAME + " TEXT, ");
8. sql.append(FIELD_AGE + " INTEGER");
9. sql.append(");");
10. db.execSQL(sql.toString());

 
3.向表中添加一条数据 
    可以使用insert 方法来添加数据,但是 insert 方法要求把数据都打包到 ContentValues 中, ContentValues 其实就是一个Map, key值是字段名称, Value值是字段的值。通过 ContentValues 的 put 方法就可以把数据放到ContentValues中,然后插入到表中去。具体实现如下:
Java代码

1. 1. ContentValues  cv  =  new ContentValues();    
2. 2. cv.put(TABLE_NUM, 1);    
3. 3. cv.put(TABLE_DATA, "测试数据");    
4. 4. mSQLiteDatabase.insert(TABLE_NAME, null, cv);    
5. 5.     
6. 6.   //这样同样可以使用execSQL方法来执行一条“插入”的SQL语句,代码如下:    
7. 7. String  INSERT_DATA = "INSERT INTO table1 (_id, num, data) values (1, 1, '通过SQL语句插入')" ;    
8. 8. mSQLiteDatabase.execSQL(INSERT_DATA);    
   
4.从表中删除数据 
     要删除数据可以使用delete 方法,下面我们删除字段 "_id" 等于1的数据,具体代码如下:

1. 1. mSQLiteDatabase.delete("Examples_06_05.db", " where_id="+0, null);    
2. 2. 通过 execSQL方法执行SQL语句删除数据如下:    
3. 3. String  DELETE_DATA = "DELETE FROM table1 WHERE _id=1";    
4. 4. mSQLiteDatabase.execSQL(DELETE_DATA);    
   
5.修改表中的数据 
    如果添加了数据后发现数据有误,这时需要修改这个数据,可以使用updata方法来更新一条数据。下面我们来修改 "num" 值为0的数据,具体代码如下:

1. 1. ContentValues cv = new ContentValues();    
2. 2. cv.put(TABLE_NUM, 3);    
3. 3. cv.put(TABLE_DATA, "修改后的数据");    
4. 4. mSQLiteDatabase.update("table1" cv, "num " + "=" + Integer.toString(0), null);    

6.关闭数据库 
     关闭数据库很重要,也是大家经常容易忘记的。关闭的方法很简单,直接使用SQLiteDatabase 的 close 方法。具体代码如下:

1. mSQLiteDatabase.close();    
   
7.删除指定表 
    这里我们使用execSQL方法来实现,具体代码如下:

1. mSQLiteDatabase.execSQL("DROP TABLE table1");    
  
8.删除数据库 
    要删除一个数据库,直接使用deleteDatabase 方法即可,具体代码如下:

1. 1. this.deleteDatabase("Examples_06_05.db");    
   
9.查询表中的某条数据 
     在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如下: 

    方法                                                                                     说明  
    move                                               以当前的位置为参考,将Cursor移动到指定的位置,成功返回true, 失败返回false 

    moveToPosition                                将Cursor移动到指定的位置,成功返回true,失败返回false 

    moveToNext                                     将Cursor向前移动一个位置,成功返回true,失败返回false 

   moveToLast                                       将Cursor向后移动一个位置,成功返回true,失败返回 false。 

   movetoFirst                                       将Cursor移动到第一行,成功返回true,失败返回false 

   isBeforeFirst                                      返回Cursor是否指向第一项数据之前 

   isAfterLast                                         返回Cursor是否指向最后一项数据之后 
   
   isClosed                                            返回Cursor是否关闭 

   isFirst                                                返回Cursor是否指向第一项数据 

   isLast                                                返回Cursor是否指向最后一项数据 

   isNull                                                返回指定位置的值是否为null 

   getCount                                           返回总的数据项数 

   getInt                                               返回当前行中指定的索引数据 

   下面我们就是用Cursor来查询数据库中的数据,具体代码如下:


1. 1. Cursor cur = mSQLiteDatabase.rawQuery("SELECT * FROM table", null);    
2. 2. if( cur != null ){    
3. 3.    if( cur.moveToFirst() ){    
4. 4.        do{    
5. 5.                   int numColumn = cur.getColumnIndex("num");    
6. 6.                   int num            = cur.getInt(numColumn);    
7. 7.             }while( cur.moveToNext());    
8. 8.       }    
9. 9.  } 
10. //或这样实现
11.      String[] col[] = new String[] {"stu_no","stu_name"}
12.    Cursor cur = mSQLiteDatabase.query("student", col, null, null, null, null, null);
13.    if( cur.moveToFirst() ){ 
14.    while(cur.moveToNext()){       
15.                 String name = cursor.getString(cur.getColumnIndex("name"));        
16.                 System.out.println("query--->" + name);       
17.             } 
}      
最后在提醒大家一句:    使用SQLiteDatabase数据库要及时关闭(close), 否则可能会抛出SQLiteException异常。
原创粉丝点击