基础
建立数据库
步骤:
1,写一个类继承SQLiteOpenHelper。示例:
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context){
super(context,"name.db",null,1);//调用父类的构造函数,父类会自动创建一个数据库
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
注意其中的构造方法:
所有的构造方法调用父类的super(Context,String,CursorFactory,int)。这里的
第二个参数指的是要创建的数据库的名(非表名)
;而super方法,会自动创建一个数据库。而后,我们在这个库中创建任意多张表,在每一个表中进行CRUD操作。
我们没有办法自己创建一个数据库,只能通过SQLiteOpenHelper中相应的构造函数来创建;我们能做的就是在创建好的库中创建表(也就是create table),并对表进行操作。
onCreate()
通过构造函数,我们已经创建好了一个库,而onCreate()就是用来在初始化该库的表结构的。也就是说,它是用来在数据库中添加表的,并不是用来创建库的。其中传入的参数db就是通过构造函数创建好的数据库。
数据类型
sqlite是支持多种数据类型的(数据的大小是没有限制的,即使在创建的时候指定了)。例如:
String sql = "CREATE TABLE IF NOT EXISTS "
+ "error_"
+ id
+ "_"
+ curId
+ " (_ID INTEGER PRIMARY KEY autoincrement, id int, json varchar(200),type varchar(20))";
db.execSQL(sql);
这里将id指定为int类型,因为需要取最大的id值。如果用成varchar,那么取的结果和int的结果是不一样的。
导入外界库
将该数据库放在assets目录下,然后通过流的方式把它读到手机中。
private void copyDatabase() {
File file = new File(getFilesDir(), "number_location.db");//getFilesDir()是一个api,得到的是/data/data/包名/files目录
if (file.exists() && file.length() > 1L)
return;
AssetManager assets = getResources().getAssets();//得到AssetsManager,用于操作assets目录下的文件
try {
InputStream inputStream = assets.open("number_location.db");//将assets目录下的文件转换成流,然后将它复制到files中
byte[] buff = new byte[1024];
FileOutputStream out = new FileOutputStream(file);
int length = 0;
while ((length = inputStream.read(buff)) != -1) {
out.write(buff, 0, length);
}
inputStream.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
通过以下代码打开复制到files目录下的数据库:
SQLiteDatabase database = SQLiteDatabase.openDatabase(path
+ "/number_location.db", null, SQLiteDatabase.OPEN_READONLY);// path为数据库所在的目录
操作
根据表名判断该表是否存在
String sql = "select count(*) as c from sqlite_master where type='table' and "
+ "name = '" + tableName.trim() + "' ";
cursor = db.rawQuery(sql, null);
if (cursor.moveToNext()) {
int count = cursor.getInt(0);
if (count > 0)
result = true;
}