編輯:關於Android編程
今天在項目裡使用到了greendao,記錄一下greendao的使用過程。
greendao是對sqlite數據庫操作的封裝,可以讓我們更加方便的使用sqlite,其它類似的框架還有OrmLite、SugarORM、Active Android、Realm。但是greendao的性能要遠遠的高於其它四個框架,在官網有測試結果,因為它不是使用反射的機制,而是直接生成相關的代碼。這就大幅度提升了它的性能。
vcHLyv2+3b/i1tChozwvcD4NCjxoMyBpZD0="使用步驟">使用步驟:
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/java-gen']
}
}
compile 'de.greenrobot:greendao:2.1.0'
如果我們要使用greendao需要另建一個純java工程,這個Java工程用來生成我們android工程中需要用到的一些類,包括Bean,DAO,DaoMaster,DaoSession.
java工程的build.gradle裡添加dependencies
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'de.greenrobot:greendao-generator:2.1.0'
}
這個類很關鍵,它裡面會建立數據庫和表以及表的各個字段,代碼如下
public class MyGreenDaoClass {
public static void main(String[] args) throws Exception {
//1、 參數: 1表示數據庫版本號 "lhd.test.hello"表示自動生成代碼的路徑
Schema schema = new Schema(1,"lhd.test.hello");
//2、 創建了schema後,就可以用這個schema對象操作數據庫了
//這裡我們寫了個方法
mydatabase(schema);
//3、 使用 DAOGenerator 類的 generateAll() 方法自動生成代碼
//我們將代碼自動生成到我們之前建立的android的java-gen目錄下,這個路徑不是固定的,可以自由設置
new DaoGenerator().generateAll(schema,"F:\\androidg4\\MyGreenDao\\app\\src\\java-gen");
}
private static void mydatabase(Schema schema){
//1、 創建一個實體類,一個實體類就是數據庫的一張表 這裡表名為mydata,數據庫的名字會在android工程中指定
Entity mydata = schema.addEntity("MyData");
//2、 設置實體類的屬性,每個屬性就是表中的一個字段
mydata.addIdProperty(); //首先設置一個Id
mydata.addStringProperty("name"); //設置一個name字段
mydata.addStringProperty("age"); //設置一個age字段
mydata.addStringProperty("cool").notNull();//設置一個cool字段,並且不能為空
}
}
注意一點就是:千萬不要倒錯包了
import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;
運行成功會在java-gen目錄下產生DaoMaster,DaoSession,mydata,mydataDao文件
運行沒有錯誤,控制台輸出
運行後生成的文件
// 我們將DaoSession對象放在myapplication裡,避免多次生成 Session 對象,這樣全局就使用同一個session鏈接到數據庫啦。
myapplication.java
package com.example.lhd.mygreendao;
import android.app.Application;
import android.database.sqlite.SQLiteDatabase;
import lhd.test.hello.DaoMaster;
import lhd.test.hello.DaoSession;
/**
* Created by LHD on 2016/6/14.
*/
public class myapplication extends Application{
//建立全局的daoSession
public static DaoSession daoSession;
public static SQLiteDatabase db;
@Override
public void onCreate() {
super.onCreate();
setupDatabase();
}
private void setupDatabase() {
// 通過 DaoMaster 的內部類 DevOpenHelper,你可以得到一個便利的 SQLiteOpenHelper 對象。
// 可能你已經注意到了,你並不需要去編寫「CREATE TABLE」這樣的 SQL 語句,因為 greenDAO 已經幫你做了。
// 注意:默認的 DaoMaster.DevOpenHelper 會在數據庫升級時,刪除所有的表,意味著這將導致數據的丟失。
// 所以,在正式的項目中,你還應該做一層封裝,來實現數據庫的安全升級。
//數據庫的名字是my_data
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "my_data", null);
db = helper.getWritableDatabase();
// 注意:該數據庫連接屬於 DaoMaster,所以多個 Session 指的是相同的數據庫連接。
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}
}
別忘了在manifest文件裡聲明:
android:name=".myapplication"
android:theme="@style/AppTheme">
布局文件:
activity_main.xml
主代碼文件:
MainActivity.java
package com.example.lhd.mygreendao;
import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
import java.util.List;
import de.greenrobot.dao.query.Query;
import lhd.test.hello.MyData;
import lhd.test.hello.MyDataDao;
public class MainActivity extends ListActivity {
private SQLiteDatabase db;
private EditText edit_input;
private Cursor cursor;
private String str_input;
private MyDataDao dataDao;
//定義一個全局變量i 用來模擬年齡
private static int i = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit_input = (EditText) findViewById(R.id.edit_input);
//獲取全局的daoSession然後通過daoSession獲取mydataDao
dataDao = myapplication.daoSession.getMyDataDao();
db = myapplication.db;
//獲取name字段的行
String textColumn = MyDataDao.Properties.Name.columnName;
//按本地語言進行排序
String orderBy = textColumn + " COLLATE LOCALIZED ASC";
//執行查詢返回一個cursor
cursor = db.query(dataDao.getTablename(), dataDao.getAllColumns(), null, null, null, null, orderBy);
//SimpleCursorAdapter的使用
String[] from = {textColumn, MyDataDao.Properties.Age.columnName};
int[] to = {android.R.id.text1, android.R.id.text2};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, cursor, from,
to);
setListAdapter(adapter);
}
public void onMyClick(View v) {
switch (v.getId()) {
case R.id.add:
add_data();
break;
case R.id.search:
search_data();
break;
}
}
//添加一條數據
public void add_data() {
str_input = edit_input.getText().toString();
edit_input.setText("");
//1、創建對象
MyData data = new MyData();
String name = str_input;
String age = "20" + i++;
String cool = "yes";
//2、設置數據
data.setName(name);
data.setAge(age);
data.setCool(cool);
//3、插入數據
dataDao.insert(data);
cursor.requery();
}
//查詢
public void search_data() {
str_input = edit_input.getText().toString();
if (edit_input.getText().toString().isEmpty()) {
Toast.makeText(MainActivity.this, "輸入錯誤", Toast.LENGTH_SHORT).show();
} else {
Query query = dataDao.queryBuilder()
.where(MyDataDao.Properties.Name.eq(str_input))
.orderAsc(MyDataDao.Properties.Age)
.build();
List ls = query.list(); //查詢返回的list
Toast.makeText(MainActivity.this, "有" + ls.size() + "條數據符合", Toast.LENGTH_SHORT).show();
edit_input.setText("");
}
}
//刪除
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//刪除操作,通過id刪除
dataDao.deleteByKey(id);
cursor.requery();
}
}
效果圖:
轉載請注明出處,謝謝~~目錄本文概述 動畫補充說明 屬性動畫的View加載方式 TypeEvaluator的使用 TimeInterpolator LayoutTrans
經常會網友遇到手機使用時間較久後會遇到提示“SD卡已損壞,您可能必須將其重新格式化”故障,導致手機SD卡無法使用。最近身邊有朋友手機
11. Android的數據存儲形式在Android中的數據存儲形式主要有以下幾種:SharedPreferrencesSharedPreferrences主要用於存儲一
關於ListView拖拽移動位置,想必大家並不陌生,比較不錯的軟件都用到如此功能了.如:搜狐,網易,百度等,但是相比來說還是百度的用戶體驗較好,不偏心了,下面看幾個示例: