记使用Android SQLite遇到的小问题

引用请标明出处:http://blog.csdn.net/callon_h/article/details/51428341

之前一直是遇到activity需要保存数据就直接使用SQLite就好,但是有一天突然发现,我需要在其中一个Activity里访问另一个Activity建立的SQLiteDatabase,从而引出了该文。

查了很多资料,大多数都是说,使用单例模式建立继承SQLiteOpenHelper的类,然后使用静态方法(一般取名getInstance)来获得。自己亲自尝试了,发现总是不对,于是找了一种更简便更懒的方法(直接用文件位置引用数据库):
SettingActivity.java

db = openOrCreateDatabase("callon_set_pump", Context.MODE_PRIVATE, null);
        if(tabbleIsExist("table1")){
            DatabaseHelper dbHelper = new DatabaseHelper(SettingActivity.this, "callon_set_pump");
            SQLiteDatabase db = dbHelper.getReadableDatabase();
            Cursor cursor = db.query("table1", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);
            while(cursor.moveToNext()){
                String name = cursor.getString(cursor.getColumnIndex("name"));
                //add your code here
            }
            cursor = db.query("table1", new String[]{"id","name"}, "id=?", new String[]{"2"}, null, null, null);
            while(cursor.moveToNext()){
                String name = cursor.getString(cursor.getColumnIndex("name"));
                //add your code here
            }
            cursor = db.query("table1", new String[]{"id","name"}, "id=?", new String[]{"3"}, null, null, null);
            while(cursor.moveToNext()){
                String name = cursor.getString(cursor.getColumnIndex("name"));
                //add your code here
            }
            cursor = db.query("table1", new String[]{"id","name"}, "id=?", new String[]{"4"}, null, null, null);
            while(cursor.moveToNext()){
                String name = cursor.getString(cursor.getColumnIndex("name"));
                //add your code here
            }
            cursor = db.query("table1", new String[]{"id","name"}, "id=?", new String[]{"5"}, null, null, null);
            while(cursor.moveToNext()){
                String name = cursor.getString(cursor.getColumnIndex("name"));
               //add your code here
            }

        }
        else {
            db.execSQL("CREATE TABLE table1(id int,name varchar(20))");
            ContentValues values = new ContentValues();
            values.put("id", 1);
            values.put("name", "5000");
            db.insert("table1", null, values);
            values = new ContentValues();
            values.put("id", 2);
            values.put("name", "1000");
            db.insert("table1", null, values);
            values = new ContentValues();
            values.put("id", 3);
            values.put("name", "3");
            db.insert("table1", null, values);
            values = new ContentValues();
            values.put("id", 4);
            values.put("name", "3");
            db.insert("table1", null, values);
            values = new ContentValues();
            values.put("id", 5);
            values.put("name", "NONE");
            db.insert("table1", null, values);
            //add your code here
        }

上述类建立了一个数据库callon_set_pump,在另一个类中使用的话,
PageActivity.java

db_set = SQLiteDatabase.openOrCreateDatabase("data/data/com.autopump.callon.nenu/databases/callon_set_pump",null);
        Cursor cursor = db_set.query("table1", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);
        while(cursor.moveToNext()){
            String name = cursor.getString(cursor.getColumnIndex("name"));
            System.out.println("name is :"+ name);
        }

关于tabbleIsExist方法,它是用来检测是否存在该数据库的,如果存在重复创建会出现异常的哦~

private boolean tabbleIsExist(String tableName){
        boolean result = false;
        if(tableName == null){
            return false;
        }
        SQLiteDatabase db = null;
        DatabaseHelper dbHelper = new DatabaseHelper(SettingActivity.this, "callon_set_pump");
        Cursor cursor = null;
        try {
            db = dbHelper.getReadableDatabase();
            String sql = "select count(*) as c from Sqlite_master  where type ='table' and name ='"+tableName.trim()+"' ";
            cursor = db.rawQuery(sql, null);
            if(cursor.moveToNext()){
                int count = cursor.getInt(0);
                if(count>0){
                    result = true;
                }
            }

        } catch (Exception e) {
            // TODO: handle exception
        }
        return result;
    }

总之能抓到耗子的就是好猫吧,虽然方法不像什么单例模式那样洋气,希望对大家有帮助。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 2048小游戏的概要设计可以分为以下几部分: 1. 游戏界面设计:包括游戏主界面、游戏结束界面、游戏设置界面等。游戏主界面需要显示当前游戏得分、游戏操作按钮等,游戏结束界面需要显示最终得分、重新开始游戏按钮等,游戏设置界面需要包含音效开关、背景音乐开关等选项。 2. 游戏逻辑设计:主要包括方块的随机生成、方块的合并、方块的移动等。当玩家进行方向操作时,需要根据当前方块位置和操作方向判断是否可以进行移动,并且需要判断是否可以进行方块合并。 3. 数据存储设计:需要将游戏得分、游戏设置等数据进行本地存储,以便下次游戏时可以读取之前的游戏数据。 4. 音效设计:需要为游戏添加合适的音效,例如方块移动、方块合并、游戏结束等。 5. 广告与付费设计:可以在游戏中加入广告或者付费去除广告的选项,以便获取收益。 总之,一个成功的2048小游戏需要在游戏界面、游戏逻辑、数据存储、音效等方面都有良好的设计和实现。 ### 回答2: 2048小游戏是一款益智类游戏,玩家的目标是通过移动方块,使得相同数字的方块在合并后形成2048这个数字的方块。以下是该游戏的概要设计。 1. 游戏界面设计:采用简洁、清晰的界面设计,主要包括游戏棋盘和方块。游戏棋盘为4x4的格子,方块根据数字的大小呈现不同的颜色。 2. 游戏规则设计:玩家通过上下左右滑动来移动方块,相同数字的方块会合并成一个新的方块,并在空白格子中产生新的方块。每次移动后,新的数字方块以2的形式出现。当玩家成功合并两个2048方块时,游戏胜利;当棋盘被填满且没有可合并的方块时,游戏失败。 3. 游戏功能设计: - 计分系统:录玩家的得分,每次成功合并方块时增加相应分数。 - 撤销功能:允许玩家撤销一次上一步移动。 - 重新开始:玩家可以选择重新开始游戏。 - 最高纪录:录玩家历史最高分,在游戏结束时显示。 4. 游戏界面交互设计:玩家通过触摸屏幕上的方向键模拟滑动操作,方块根据滑动方向移动并合并。移动过程中添加适当的动画效果,增加游戏的交互性。 5. 游戏难度设计:设置不同难度的游戏模式,如简单、普通、困难,通过限制方块生成的概率或增加合并难度来增加游戏挑战性。 总之,该2048小游戏概要设计包括了游戏界面设计、游戏规则设计、游戏功能设计、界面交互设计和游戏难度设计。通过以上设计,可以实现一款符合玩家习惯且有趣的Android游戏。 ### 回答3: 2048小游戏是一款经典的数字合并游戏,目标是通过向不同方向滑动屏幕,将相同的数字相邻合并,得到更大的数字。以下是Android课程设计2048小游戏的概要设计: 1. 游戏界面设计: - 采用MVVM架构设计,将逻辑和界面分离。 - 使用GridLayout布局实现游戏面板,方便管理和显示数字矩阵。 - 使用动画效果来使得数字在滑动过程中平滑移动和合并。 2. 游戏逻辑设计: - 设计一个4x4的矩阵用于存储数字,初始化时在随机位置生成两个数字(2或4)。 - 随着玩家滑动屏幕,数字向指定方向移动直到遇到边界或其他数字。 - 相邻数字相同则合并,合并后的数字加入分数,并生成一个新的数字。 - 判断游戏是否胜利:出现2048数字即可胜利。 - 判断游戏是否失败:没有空白格子可生成新数字且无法继续合并。 3. 用户界面设计: - 采用Material Design风格,使用卡片式布局和明亮的颜色。 - 显示当前分数和最高分数。 - 提供菜单按钮包含重新开始和退出游戏选项。 4. 数据存储设计: - 使用SharedPreferences存储最高分数,便于在游戏中进行读写操作。 - 使用SQLite数据库录游戏录。包括游戏分数、游戏时间和结束原因等信息。 5. 游戏优化和扩展: - 使用异步任务来加载和保存游戏数据,避免卡顿。 - 添加撤销功能,允许玩家撤销一步操作。 - 添加多种游戏主题选择,提供更多样化的游戏体验。 通过以上概要设计,我们可以设计出一款功能完善、界面美观的Android课程设计2048小游戏。玩家可以体验数字合并带来的乐趣,并且通过不断挑战自己创造最高分数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值