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位 二、登入雲主機
Akka邊學邊寫(4)-- 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