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;

        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM