提到APP中的数据储存,我们第一个会想到的就是SQLite,因为它的简单方便以及体积小,使其跻身主流的数据库的行列。优点就不过多赘述,今天主要写一些SQLite中的简单的使用以及实用的方法。
SQLiteDatabase db = openOrCreateDatabase("test.db",MODE_PRIVATE,null); db.execSQL("create table if not exists usertb (_id integer primary key autoincrement,name text not null,age integer not null,sex text not null)");
上面是SQLite里最常用的创建数据库和创建表的模式,"test.db"是创建数据库的名称,加了后缀是怕只写名字的话有些应用可能无法识别,mode_private代表着数据库的模式为私有的,最后的那个是创建的数据库工厂。_id 是建立的usertb的主键,自增长的id,注意如果不加下划线的话,建立的_id将不被识别。其中,null为空值数据,integer为无符号的整型数据,real是浮点型数据,text为文本字符串数据,blob为blob型数据。SQLite中没有专门的boolean型数据,所以我们可以用整形来代替,0是false,1是true。而时间类型一般用text的"yyyy-MM-dd HH:mm:SS.SSS"或者integer的unix时间形式保存数据值。
db.execSQL(sql);//执行sql语句 db.insert(table,nullColumnHanck,values);//添加数据 db.delete(table,whereClause,whereArgs);//删除数据 db.update(table,values,whereClause,whereArgs);//修改数据 db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy);//查询数据 db.rawQuery(sql,selectionArgs);//执行sql语句查询
上面是SQLite中经常用到的几种操作方法,增删改查。
增添新的数据的话,可以用
db.execSQL("insert into usertb(name,sex,age)values('xxx','man',18)");也可以用
ContentValues values = new ContentValues(); values.put("name","xxx"); values.put("sex","man"); values.put("age",18); db.insert("usertb",null,values);但我们一般会使用第二种,因为这样做可以使我们读代码时候更加简单明了,而且循环遍历写入数据可以更加简单。而修改我们会使用
values.put("sex","woman"); db.update("usertb",values,"_id>?",new String[] {"2"});这样我们就可以把usertb中所有ID大于2的条目的性别全部改为“woman”了。删除可以用
db.delete("usertb","name like ?",new String[]{"%x%"});这样可以杀出usertb中所有名字中带“x”的条目,查询的话比较简单,但是要把查询的信息打印出来我们就需要用到数据库操作符了。查询我们可以用
db.query("usertb",null,"_id>?",new String[]{"0"},null,null,"name");
这是查询usertb中所有ID大于0的条目的name值,然后我们可以依次遍历条目中的内容
Cursor c = db.query("usertb",null,"_id>?",new String[]{"0"},null,null,"name"); if(c != null){ String[] columns = c.getColumnNames(); while (c.moveToNext()){ for (String columnsName : columns){ Log.i("czx",c.getString(c.getColumnIndex(columnsName))); } } }
这样我们就循环遍历出了数据库中所有条目的所有字段。
当然,这样在主线程中写会使代码繁复,这是我们可以用到SQLiteOpenHelper这个工具类。
package com.example.mysqlite; import android.content.Context; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by Administrator on 2016/7/19. * author : czx */ public class MySQLiteOpenHelper extends SQLiteOpenHelper { public MySQLiteOpenHelper(Context context, String name) { super(context, name, null, 1); } public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) { super(context, name, factory, version, errorHandler); } @Override //首次创建数据库时调用,一般可以把建库,建表操作写入 public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL("create table if not exists uertb(_id integer primary key autoincrement," + " name text not null,age integer not null,sex text not null)"); } @Override //当数据库版本发生变化时,会自动调用 public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }而Activity中可以直接调用Helper,
package com.example.mysqlite; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.annotation.StringDef; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; /** * Created by Administrator on 2016/7/19. * author : czx */ public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MySQLiteOpenHelper helper = new MySQLiteOpenHelper(MainActivity.this,"earth.db"); SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("insert into usertb(name,sex,age)values('xxx','man',18)"); ContentValues values = new ContentValues(); values.put("name","xxx"); values.put("sex","man"); values.put("age",18); db.insert("usertb",null,values); values.clear(); values.put("name","yyy"); values.put("sex","man"); values.put("age",19); db.insert("usertb",null,values); values.clear(); values.put("name","zzz"); values.put("sex","man"); values.put("age",18); db.insert("usertb",null,values); values.clear(); values.put("name","czx"); values.put("sex","man"); values.put("age",25); db.insert("usertb",null,values); values.clear(); values.put("sex","woman"); db.update("usertb",values,"_id>?",new String[] {"2"}); db.delete("usertb","name like ?",new String[]{"%x%"}); Cursor c = db.query("usertb",null,"_id>?",new String[]{"0"},null,null,"name"); if(c != null){ String[] columns = c.getColumnNames(); while (c.moveToNext()){ for (String columnsName : columns){ Log.i("czx",c.getString(c.getColumnIndex(columnsName))); } } c.close(); } db.close(); } }