SQLite数据库(一)

 

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;

        }

posted @ 2013-08-18 18:50  bacazy  Views(9302)  Comments(0Edit  收藏  举报