1. 程式人生 > >android 3d遊戲研究(二)(邊學邊寫,多謝高手指正,鞠躬) :資料庫

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;
    }

相關推薦

android 3d遊戲研究多謝高手指正鞠躬 資料庫

android中的資料庫按儲存位置分為兩種:1,系統目錄下的資料庫 ;2,sdcard下資料庫 首先來說系統目錄下的資料庫: 一般位置:/data/data/APK包名/databases/xx.db (xx 資料庫名稱) 看下下面的類: import android.c

推薦android幾本研究深入的書籍對開發人員很有幫助

 Android Web應用 Android 開發管家技術與精彩案例 Android 開發實戰經典 Android 平臺開發之旅 Android 開發應用實戰詳解 Android 經典應用程式開發 Android 開發應用從入門到精通 Android 從入門到精通 Android 開發寶典 Android 程

知識點筆記維數組排序、統計數組重復個數、

log 排序 ole ret .so func .get stat this //統計數組內重復元素的個數 const arr = ["leyi", "leyi", "leyi2", "leyi2", "leyi3", "leyi4", "leyi5"]; const s

軟體光柵器實現、VS和PS的輸入、輸出和運作切空間的計算

二、軟體光柵器的VS和PS的輸入、輸出和運作,法線貼圖版本。轉載請註明出處。   這裡介紹的VS和PS是實現法線對映的版本,本文僅介紹實現思路,並給出程式碼供參考。切空間計算、光照模型等相關公式不是本文重點,本文暫不給出,讀者可以查閱其他博文或文獻。   軟光柵的頂點部分處理放在VS也就是頂點著色器中進行

Java 過一下基礎

Java是面向物件的語言 那麼首先就要了解一下什麼是面向過程和麵向物件。 面向過程:關鍵在於“怎麼做”。例如你想成為大俠,首先你需要斷臂或者跌落懸崖,然後遇見雕兄或者白猿,然後再“重劍無鋒”或者“九陽真經”等等。這裡注重的是步驟,是一個邏輯上的過程,典型就是C語言中的函式呼叫,堆砌成一個程式。 面向物件:

閉包、箭頭函式、generator JavaScript

閉包:函式 + 建立函式的詞法環繞的組合 函式除了可以接受函式作為引數,還可以將函式作為結果值返回。返回的是函式,而不是結果。 可以類比於Java中類,只有一個公共方法(閉包中返回的函式)的類類似於閉包。 function make_sum(arr) {

Django

一、使用騰訊雲 1、購買騰訊雲主機:https://console.qcloud.com/cvm 2、在騰訊註冊域名:https://console.qcloud.com/domain/mydomain 這裡是使用的體驗版,Cent OS 7.2 64位 二、登入雲主機

Akka4-- MiniRPG

前面幾篇文章用Akka寫了HelloWorld和EchoServer,為了更進一步學習Akka,本文將會實現一個很小的RPG遊戲伺服器:MiniRPG。 遊戲邏輯 因為是迷你RPG,所以邏輯很簡單。伺服器可以處理四種操作:建立玩家、給玩家加經驗、升級、查詢玩家資訊。下面是P

常見TCP/IP面試題補充

1. OSI與TCP/IP各層的結構與功能,都有哪些協議。 (1)OSI:七層模型。 ①物理層:在物理通道上實現原始位元流的傳輸。(乙太網, IEEE 802.2 等) ②資料鏈路層:實現無差錯地將資料幀從一個節點傳送到下一個相鄰節點。(Wi-Fi(IEEE 802.11)

Spring Aop的一個簡單列子 確實淺顯易懂好文章!的太棒了之前幾天都看不懂AOP。。瞬間被他講懂了

  先了解AOP的相關術語:1.通知(Advice):通知定義了切面是什麼以及何時使用。描述了切面要完成的工作和何時需要執行這個工作。2.連線點(Joinpoint):程式能夠應用通知的一個“時機”,這些“時機”就是連線點,例如方法被呼叫時、異常被丟擲時等等。3.切入點(Pointcut)通知定義了切面要發生

利用Python制作一個連連看小遊戲玩!

ffffff 生成 判斷 fab 精靈類 簡介 用戶 之間 自帶 導語 今天我們將制作一個連連看小遊戲,讓我們愉快地開始吧~ 開發工具 Python版本:3.6.4 相關模塊: pygame模塊; 以及一些Python自帶的模塊 環境搭建 安裝Python並添加到環境變量,

Android apk動態載入機制的研究 資源載入和activity生命週期管理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android快樂貪吃蛇遊戲實戰專案開發教程-03虛擬方向鍵繪製一個三角形

一、繪製三角形 在上一篇文章中,我們已經新建了虛擬方向鍵的自定義控制元件DirectionKeys類,下面我們繼續。 本專案中的虛擬方向鍵的背景是4個三角形組成的矩形,其實是4個三角形的按鈕。 系統自帶的按鈕是矩形的,怎麼做一個三角形按鈕呢? 首先我需要了解,所有控制元件的外觀都是畫出來的,當然不

Unity開發Android遊戲Hello world!

在設定好開發環境後,我們開始編寫一個最簡單的程式,也就是hello world,並讓它在手機上跑起來。 1,建立專案 (1),新建一個空專案。【File】-->【New Project】 (2),新建一個2D背景,用於襯托UI。【GameObject】--&g

Android音訊錄製研究

上一篇實現了Android端文字的傳輸 點選開啟連結,由於此係列要實現Android端語音的傳輸,所以這篇就先研究一下Android端語音的錄製。先上效果圖吧:這是主頁就是幾個按鈕:音訊的錄製分為檔案錄製和位元組流錄製,(1)檔案採用Media Record錄製和Media

Android實現五子棋遊戲 人機對戰實現

下面簡單介紹一下實現人機對戰的思路以及程式碼實現: 思路 人機對戰的總體思路是通過遍歷所有的無棋子的位置,通過模擬在每個無棋子點落子,並根據其周圍的棋子來獲取該點的兩個優先順序評分: 模擬使用者棋子來獲取一個優先順序評分,用於防守(使用者

3d學習筆記——遊戲物件的運動

簡答題簡答並用程式驗證遊戲物件運動的本質是什麼?請用三種方法以上方法,實現物體的拋物線運動。(如,修改Transform屬性,使用向量Vector3的方法…)寫一個程式,實現一個完整的太陽系, 其他星球圍繞太陽的轉速必須不一樣,且不在一個法平面上。遊戲物件運動的本質遊戲物件運

Unity《ATD》塔防RPG類3D遊戲架構設計

目錄 《ATD》 遊戲模型 《ATD》 遊戲邏輯 《ATD》 UI/HUD/特效/音樂 結語 前篇:Unity《ATD》塔防RPG類3D遊戲架構設計(一) - KillerAe

Android應用開發網絡工具——Volley

respond sid 開發 多少 called creat miss 相等 eal 引言 在Android應用開發:網絡工具——Volley(一)中結合Cloudant服務介紹了Volley的一般使用方法,當中包括了兩種請求類型StringRequest和JsonOb

.net Kafka.Client多個Consumer Group對Topic消費不能完全覆蓋研究總結

eight 分享 stat .com ima topic consumer 閱讀 padding 依據Partition和Consumer的Rebalance策略,找到Kafka.Client Rebalance代碼塊,還原本地環境,跟蹤調試,發現自定義Consumer G