zoukankan      html  css  js  c++  java
  • 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;

            }

  • 相关阅读:
    Centos7 Crontab
    Centos7 php-fpm root 运行,执行 kill 等系统命令
    Centos7 安装系统服务、开机自启动
    CentOS7 安装Python3,开发SocketIO 客户端
    Centos7.6 安装DNS服务器
    exerunexplorer.exe
    Web GIS 离线地图
    DataGridView中添加CheckBox列用于选择行
    Android WebView Demo
    上海华魏光纤传感科技有限公司 招聘 《.NET研发工程师》
  • 原文地址:https://www.cnblogs.com/bacazy/p/3266276.html
Copyright © 2011-2022 走看看