android 3d游戏研究(二)(边学边写,多谢高手指正,鞠躬) :数据库

android中的数据库按存储位置分为两种:1,系统目录下的数据库 ;2,sdcard下数据库

首先来说系统目录下的数据库:

一般位置:/data/data/APK包名/databases/xx.db (xx 数据库名称)

看下下面的类:

import android.content.Context;                                //引入相关包
import android.database.sqlite.SQLiteDatabase;                //引入相关包
import android.database.sqlite.SQLiteOpenHelper;            //引入相关包
import android.database.sqlite.SQLiteDatabase.CursorFactory;//引入相关包
public class SqLiteDBHelper extends SQLiteOpenHelper{
    public SqLiteDBHelper(Context context, String name, CursorFactory factory,
            int version) {//继承SQLiteOpenHelper的类,必须有该构造函数
        super(context, name, factory, version);
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
    //创建数据库时调用,此方法是在调用了getReadableDatabase()或getWritableDatabase()后才调用
        db.execSQL("create table sqlitetest(uid long,uname varchar(25))");
        System.out.println("already create a database:sqlitetest.");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    //升级数据库时掉用
    }
    
}

该类是创建此类数据库的一个简单方法


//创建数据库

SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);
                System.out.println("create or open database success!");
                SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库
                Toast.makeText(MyActivity.this,     "创建或打开数据库", Toast.LENGTH_SHORT).show();   


//增加数据库记录  

ContentValues cv=new ContentValues();//得到ContentValues对象
                cv.put("uid", 1); //放入键值对,键要与列名一致,值要与列的数据类型一致
                cv.put("uname", "zcl"); //放入键值对,键要与列名一致,值要与列的数据类型一致
                SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库    
                Toast.makeText(MyActivity.this,     "插入记录", Toast.LENGTH_SHORT).show();                                
                SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库
                sld.insert("sqlitetest", null, cv);//增加数据库记录            
                System.out.println("success insert a new content!");


//更新数据库记录

SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库
                SQLiteDatabase sld=dh.getWritableDatabase();//得到一个SQLiteDatabase对象,用于操控数据库
                ContentValues cv = new ContentValues();    //得到ContentValues对象
                Toast.makeText(MyActivity.this,     "更新记录", Toast.LENGTH_SHORT).show();                                        
                cv.put("uname", "zcl_update");
                sld.update("sqlitetest", cv, "uid=?", new String[]{"1"});//更新数据库记录
                System.out.println("success updata the content!");    


//查询记录

SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库
                Toast.makeText(MyActivity.this,     "查询记录", Toast.LENGTH_SHORT).show();                                        
                SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库
                Cursor cursor=sld.query("sqlitetest", new String[]{"uid","uname"}, "uid=?",  new String[]{"1"}, null, null, null);    
                while(cursor.moveToNext()){                
                    //打印输出
                    String name=cursor.getString(cursor.getColumnIndex("uname"));
                    System.out.println("query result:"+name);
                }}});



sdcard下数据库

位置:需要指定sdcard中的路径

此处用:path="/sdcard/wop/data/";

/**
     * @Description: TODO(判断sqlite是否已经打开)
     */
    private void checkSqlite() {
        if (sqlite == null || !sqlite.isOpen()) {
            sqlite = SQLiteDatabase.openDatabase(strpath, null,
                    SQLiteDatabase.NO_LOCALIZED_COLLATORS);
        }
    }


/**
     * @Description: TODO(设置事务处理成功)
     */
    private void transactionSuccessful() {
        sqlite.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交
        sqlite.endTransaction(); // 处理完成
    }



1)创建数据库:

此时的创建其实就是将原来已经创建好的db文件copy入sdcard中

而在工程中db文件的位置最好在asset下,如wop。db3

然后根据文件复制的方式,执行copy

2)增

在原wop。db3文件中进行添加字段;推荐SQLite Expert Profession工具

3)删

// 删除photo图片
    public Boolean deletePhoto(String strphotopath) {
        boolean result = false;
        // 插入tag表
        try {
            checkSqlite();
            // 插入table_Day表
            sqlite.beginTransaction(); // 手动设置开始事务
            sqlite.execSQL("delete from table_Photo where photo_url='"
                    + strphotopath + "';");
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
            result = false;
        } finally {
            transactionSuccessful();
        }
        return result;
    }


4)改

    public boolean updateprivate(String strserver_id, String strlocalzt,
            String Strpicasa_uploaded) {
        boolean result = false;
        try {

            checkSqlite();
            String sql = "update table_Photo set server_photo_id='"
                    + strserver_id + "',picasa_uploaded='" + Strpicasa_uploaded
                    + "',localzt='" + strlocalzt
                    + "' where _id=(SELECT max(_id) FROM table_Photo);";
            sqlite.execSQL(sql);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
            result = false;
        }
        return result;
    }


5)查

/**
     * 获取最后一张图片路径
     */
    public String getLastPhotoPath() {
        Cursor curPhone = null;
        String PhotoPath = null;
        try {
            checkSqlite();

            String sql = "Select max(_id),photo_url From table_Photo   ORDER BY _id desc;";
            curPhone = sqlite.rawQuery(sql, null);
            if (curPhone.getCount() > 0) {

                while (curPhone.moveToNext()) {
                    PhotoPath = curPhone.getString(curPhone
                            .getColumnIndex("photo_url"));
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            item = null;
            PhotoPath = null;
        } finally {
            if (curPhone != null) {
                curPhone.close();
            }
        }
        return PhotoPath;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值