SQLite是一款精简的SQL工具,占用的系统资源较小,对SQL的支持全面。
Android提供android.database和android.database.sqlite这两个包用于对数据库的支持。
1 数据库管理:
可视为对文件的管理,创建库文件需要在SD卡上创建文件或文件夹,所以需要在工程清单文件(AndroidManifest.xml)中声明允许写外部存储器的许可。如以下代码所示:
<uses-permission android:name=”android.perminssion.WRITE_EXTERNAL_STORAGE”/>
通过 SQLiteDatabase类中的openOrCreateDatabase方法按照指定路径在文件系统中创建一个数据库,并返回该数据库的实例对象;使用“close”方法关闭数据库
2 数据库模式管理:
(1)创建或删除数据表:
如:private void execCreateTableSQL()
{
String sql=“CREATE TABLE”+ tablename+ “(_id INTEGER PRIMARY KEY,”;
//生成SQL语句的
//以读写方式打开数据库
SQLiteDatabase db=SQLiteDatabase.openDatabase(SQLiteDBAct.DB_NAME, null , SQLiteDatabase.OPEN_READWRITE);
//执行SQL语句
db.execSQL(sql);
//关闭数据库
Db.close();
}
基本流程是:打开数据库,执行SQL语句进行各项操作,关闭数据库
SQLite数据库打开标识
标识类型
说明
CREATE_IF_NECESSARY
按需创建
NO_LOCALIZED_COLLATORS
不使用本地化校验
OPEN_READONLY
只读方式
OPEN_READWRITE
读写方式
(2)获取数据表
//初始化列表项目
private void initList(String table_name)
{
String[] columnNames = { "sql" };
//以只读方式打开数据库
SQLiteDatabase db = SQLiteDatabase.openDatabase(SQLiteDBAct.DB_NAME, null,
SQLiteDatabase.OPEN_READONLY);
//按照指定条件查询数据表【sqlite_master】中指定的列
Cursor cursor = db.query("sqlite_master",columnNames,
"(tbl_name='"+table_name+"')",null,null,null,null);
if (cursor.getCount() == 1)
{
//保证游标复位
cursor.moveToFirst();
//获取用于创建数据表的列名
String sql = cursor.getString(0);
//通过表名获取数据表的列名
String[] allColumnNames = getTableColumnNames(db, table_name);
//解析SQL语句
List<String> sqlParts = parseSQL(sql);
for (int i = 0; i < allColumnNames.Length; ++i)
{
//获取各列的类型名
String type = getColumnTypeByName(sqlParts, allColumnNames[i]);
//............
}
//关闭游标
cursor.close();
db.close();
}
}
//获取指定表的全部列名
private String[] getTableColumnNames(SQLiteDatabase db, String tableName)
{
Cursor cursor = db.query(tableName, null, "(0>1)", null, null, null, null);
String[] columnNames = cursor.getColumnNames();
cursor.close();
return (columnNames);
}
//解析SQL语句
private List<String> parseSQL(String sql)
{
Pattern p = Pattern.compile("[A-Za-z0-9_]+");
Matcher m = p.matcher(sql);
List<String> sqlParts = new List<string>();
while (m.find())
{
sqlParts.add(m.group());
}
return sqlParts;
}
//获取指定列的类型
private String getColumnTypeByName(List<String> items, String columnName)
{
int index = indexOf(items, columnName);
if (index == -1)
{
return "";
}
String type = items.get(index + 1).toString();
if (type.ToUpperCase().indexOf("CHAR") != -1)
{
type += ("(" + items.get(index + 2) + ")");
}
return type;
}