1-SI--安卓SQLite基础使用指南

作者: e4e52c116681 | 来源:发表于2018-08-26 17:34 被阅读4次

    零、前言

    [1]熟悉MySQL的学这个就像会西瓜的人去学吃哈密瓜一样简单。
    [2]如果对MySQL不太熟悉的童鞋,可以看一下我的这篇:SpringBoot-14-MyBatis预热篇,MySQL小结
    [3]SQLite:安卓内置轻量级的关系型数据库
    [4]强烈建议语句什么的提前写好,在MySQL上测试一下,不然少个分号,多个逗号什么的就呵呵了
    [5]安卓有API支持数据库操作,但感觉不怎么灵活,感兴趣的可以自己了解一下
    [6]本篇介绍基础使用,下篇会封装一下。

    坑点

    [1]:SQLite 不支持 DEFAULT 关键字
    [2]:INSERT INTO 的 INTO 要加上 (MySQL养成的坏毛病,得该)


    一、创建数据库

    1.SQL常量类:SQLCon.java
    /**
     * 作者:张风捷特烈<br/>
     * 时间:2018/8/26 0026:14:48<br/>
     * 邮箱:1981462002@qq.com<br/>
     * 说明:SQL常量类
     */
    public class SQLCon {
        /**
         * 数据库名
         */
        public static String DB_NAME = "weapon";
    
        /**
         * 数据库版本
         */
        public static int DB_VERSION = 1;
    
        /**
         * 建表语句
         */
        public static final String CREATE_TABLE = "CREATE TABLE sword (\n" +
                "id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,\n" +
                "name VARCHAR(32) NOT NULL,\n" +
                "atk SMALLINT UNSIGNED NOT NULL,\n" +
                "hit SMALLINT UNSIGNED NOT NULL DEFAULT 20,\n" +
                "crit SMALLINT UNSIGNED NOT NULL DEFAULT 10\n" +
                ");";
        
    }
    
    
    2.SQLiteOpenHelper使用:我的数据库辅助类
    /**
     * 作者:张风捷特烈<br/>
     * 时间:2018/8/26 0026:14:26<br/>
     * 邮箱:1981462002@qq.com<br/>
     * 说明:我的数据库辅助类
     */
    public class MySQLHelper extends SQLiteOpenHelper {
    
        private Context mContext;
    
        /**
         * 构造函数
         *
         * @param context 上下文
         */
        public MySQLHelper(Context context) {
            super(context, SQLCon.DB_NAME, null, SQLCon.DB_VERSION);
            mContext = context;
        }
    
        /**
         * 创建数据库,数据库存在就不会执行
         *
         * @param db SQLite数据库对象
         */
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(SQLCon.CREATE_TABLE);//创建表
        }
    
        /**
         * 数据库进行升级
         *
         * @param db         SQLite数据库对象
         * @param oldVersion 旧版本
         * @param newVersion 新版本
         */
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            
        }
    }
    
    3.在需要的地方使用:
    MySQLHelper mySQLHelper = new MySQLHelper(this);//创建辅助对象
    mySQLHelper.getWritableDatabase();//获取可写数据库对象
    
    //getReadableDatabase()和getWritableDatabase()
    //这两个方法都可以创建或打开一个现有的数据库,并返回一个可对数据库进行读写操作的对象。
    //磁盘空间已满时getWritableDatabase()异常
    

    创建数据库.png

    二、升级数据库时删除表

    1.SQL常量类,将数据库版本改到2:SQLCon.java
        /**
         * 数据库版本
         */
        public static int DB_VERSION = 2;
        
        /**
         * 删除表语句
         */
        public static final String DROP_TABLE = "DROP TABLE sword";
    
    2.com.toly1994.si_sqlite.MySQLHelper#onUpgrade
    db.execSQL(SQLCon.DROP_TABLE);
    L.d(oldVersion+":"+newVersion+L.l());//1:2
    
    3.在需要的地方使用
    MySQLHelper mySQLHelper2 = new MySQLHelper(this);//创建辅助对象
    mySQLHelper2.getWritableDatabase();//获取可写数据库对象
    

    三、插入数据

    1.SQL常量类
        /**
         * 插入语句
         */
        public static final String INSERT = "INSERT INTO sword(id,name,atk,hit,crit) VALUES" +
                "(1,'痕兮',7000,800,999)," +
                "(2,'逐暮',100,1000,10000)," +
                "(3,'风跃',9000,10,255);";
    
    2..在需要的地方使用
    mDb = new MySQLHelper(this).getWritableDatabase();
    mDb.execSQL(SQLCon.INSERT);
    
    插入数据.png

    四、删除数据

    1.SQL常量类
        /**
         * 删除数据
         */
        public static final String DELETE = "DELETE FROM sword WHERE id=1;";
    
    2.在需要的地方使用
    mDb = new MySQLHelper(this).getWritableDatabase();
    mDb.execSQL(SQLCon.DELETE);
    
    删除数据.png

    五、修改数据

    1.SQL常量类
        /**
         * 修改数据
         */
        public static final String UPDATE = "UPDATE sword SET hit=hit+1;";
    
    2.在需要的地方使用
    mDb = new MySQLHelper(this).getWritableDatabase();
    mDb.execSQL(SQLCon.UPDATE);
    
    修改数据.png

    五、查询数据

    1.查询所有
    Cursor cursor = mDb.rawQuery("SELECT * FROM sword", null);
    while (cursor.moveToNext()) {
        String id = cursor.getString(cursor.getColumnIndex("id"));
        String name = cursor.getString(cursor.getColumnIndex("name"));
        String atk = cursor.getString(cursor.getColumnIndex("atk"));
        String hit = cursor.getString(cursor.getColumnIndex("hit"));
        String crit = cursor.getString(cursor.getColumnIndex("crit"));
        System.out.println(id + "---" + name + "---" + atk + "---" + hit + "---" + crit);
    }
        //2---逐暮---100---1001---10000
        //3---风跃---9000---11---255
    cursor.close();//关闭游标
    
    2.查询一个:?为占位符,后面String数组对应站位符位置,占位符可多个。
     Cursor cursor2 = mDb.rawQuery("SELECT * FROM sword WHERE id = ?", new String[]{"2"});
    while (cursor2.moveToNext()) {
        String id = cursor2.getString(cursor2.getColumnIndex("id"));
        String name = cursor2.getString(cursor2.getColumnIndex("name"));
        String atk = cursor2.getString(cursor2.getColumnIndex("atk"));
        String hit = cursor2.getString(cursor2.getColumnIndex("hit"));
        String crit = cursor2.getString(cursor2.getColumnIndex("crit"));
        System.out.println(id + "---" + name + "---" + atk + "---" + hit + "---" + crit);
    }
    //2---逐暮---100---1001---10000
    cursor2.close();//关闭游标
    

    本文由张风捷特烈原创,转载请注明
    更多安卓技术欢迎访问:https://www.jianshu.com/c/004f3fe34c94
    张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com
    你的喜欢与支持将是我最大的动力

    相关文章

      网友评论

        本文标题:1-SI--安卓SQLite基础使用指南

        本文链接:https://www.haomeiwen.com/subject/cwioiftx.html