Androidプラットフォームはsqliteを使用します.
7865 ワード
sqliteはプラットフォームをまたぐ小型データベースとしてもいいです.Androidで使うのは他のプラットフォームと同じです.
AndroidはSQLiteOpenHelperを提供しています.直接SQLiteDatabaseを使ってもsqliteデータベースを操作できます.
J 2 eeの中では、簡単に習慣的にjdbcの操作データベースを包装しますので、ここではSQLiteOpenHelper類を使って簡単にsqliteを包装します.
4つのボタンをレイアウトしただけで、データベースを初期化して、挿入して、更新して、デモ、異常を検出して捕獲していません.
AndroidはSQLiteOpenHelperを提供しています.直接SQLiteDatabaseを使ってもsqliteデータベースを操作できます.
J 2 eeの中では、簡単に習慣的にjdbcの操作データベースを包装しますので、ここではSQLiteOpenHelper類を使って簡単にsqliteを包装します.
package com.example.org.suju.work9;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class MySQliteHandler extends SQLiteOpenHelper {
private final static int VERSION = 1;
private SQLiteDatabase db;
public MySQliteHandler(Context context, String name, CursorFactory factory) {
super(context, name, factory, VERSION);
}
public MySQliteHandler(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("debug:create db");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("debug:upgrade");
}
/*
* @param name javabean
* @return getXXX
*/
private String getMethodName(String name)
{
StringBuilder sb = new StringBuilder(name);
//
char first = sb.charAt(0);
sb.setCharAt(0, Character.toUpperCase(first));
sb.insert(0, "get");
return sb.toString();
}
/*
*
* @param name javabean
* @return getXXX
*/
private String setMethodName(String name)
{
StringBuilder sb = new StringBuilder(name);
//
char first = sb.charAt(0);
sb.setCharAt(0, Character.toUpperCase(first));
sb.insert(0, "set");
return sb.toString();
}
/*
* ContentValues put
*/
private ContentValues contentPutValue(ContentValues cv, String key, Object value) throws Exception
{
Method method = ContentValues.class.getMethod("put", String.class, value.getClass());
method.invoke(cv, key, value);
return cv;
}
public void insert(String table, Object obj)
{
db = getWritableDatabase();
Class<?> cls = obj.getClass();
Field[] fields = cls.getDeclaredFields();
ContentValues cv = new ContentValues();
for (Field f: fields) {
String mname = getMethodName(f.getName());
try {
// bean getXxx
Method method = cls.getMethod(mname);
cv = contentPutValue(cv, f.getName(), method.invoke(obj));
} catch (Exception e) {
e.printStackTrace();
}
}
db.insert(table, null, cv);
}
/**
* map
* @param table
* @param obj
*/
public void insert(String table, Map<String, Object> obj)
{
db = getWritableDatabase();
ContentValues cv = new ContentValues();
for (String key: obj.keySet()) {
cv.put(key, obj.get(key).toString());
}
db.insert(table, null, cv);
}
/*
* set bean
*
*/
private <T> T setObjValue(T obj , Cursor cursor) throws Exception
{
int index;
String mname = null; //
Method method = null; // set
String[] cns = cursor.getColumnNames();
for (String cname: cns) {
index = cursor.getColumnIndex(cname);
mname = setMethodName(cname);
int type = cursor.getType(index);
switch (type) {
case Cursor.FIELD_TYPE_FLOAT:
//
method = obj.getClass().getMethod(mname, float.class);
method.invoke(obj, cursor.getFloat(index));
break;
case Cursor.FIELD_TYPE_BLOB:
method = obj.getClass().getMethod(mname, byte[].class);
method.invoke(obj, cursor.getBlob(index));
break;
case Cursor.FIELD_TYPE_INTEGER:
method = obj.getClass().getMethod(mname, int.class);
method.invoke(obj, cursor.getInt(index));
break;
case Cursor.FIELD_TYPE_STRING:
method = obj.getClass().getMethod(mname, String.class);
method.invoke(obj, cursor.getString(index));
break;
default:
break;
}
}
return obj;
}
/*
* list,
*/
public <T> List<T> query(String table, Class<T> cls, String... select)
{
StringBuilder query = new StringBuilder("select * from ");
query.append(table);
List<T> result = new ArrayList<T>();
db = getReadableDatabase();
try {
// , bean
T obj = cls.newInstance();
//
Cursor cursor = db.rawQuery(query.toString(), select);
while (cursor.moveToNext()) {
// set obj
obj = setObjValue(obj, cursor);
result.add(obj);
}
} catch (Exception e) {
System.out.println("debug:" + e);
}
return result;
}
/*
*
* obj
*/
public void update(String table, Object obj, String where, String[] select, String... fields)
{
db = getWritableDatabase();
Class<?> cls = obj.getClass();
ContentValues cv = new ContentValues();
//
for (String f: fields) {
String mname = getMethodName(f);
try {
Method method = cls.getMethod(mname);
cv = contentPutValue(cv, f, method.invoke(obj));
} catch (Exception e) {
e.printStackTrace();
}
}
db.update(table, cv, where, select);
}
public void execSQL(String sql)
{
db = getWritableDatabase();
db.execSQL(sql);
}
}
簡単なUserオブジェクトで、いくつかのフィールドがあります.private String name;
private int age;
private int id;
private String countries;
Activityコード:4つのボタンをレイアウトしただけで、データベースを初期化して、挿入して、更新して、デモ、異常を検出して捕獲していません.
public class MainActivity extends Activity {
private Button create;
private Button update;
private Button query;
private Button insert;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
create = (Button) findViewById(R.id.create);
update = (Button) findViewById(R.id.update);
insert = (Button) findViewById(R.id.insert);
query = (Button) findViewById(R.id.query);
create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
MySQliteHandler msh = new MySQliteHandler(MainActivity.this, "sqlitdemo", null, 1);
msh.execSQL("create table user(id integer, name text, age integer, countries text);");
}
});
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
MySQliteHandler msh = new MySQliteHandler(MainActivity.this, "sqlitdemo", null, 1);
System.out.println("debug:update");
User tom = new User("linux", 19, 2, "englist");
msh.update("user", tom, "id=?", new String[]{"2"} , new String[]{"name", "countries"});
}
});
insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
MySQliteHandler msh = new MySQliteHandler(MainActivity.this, "sqlitdemo", null, 1);
System.out.println("debug:insert");
User tom = new User("tomcat", 19, 2, "china");
msh.insert("user", tom);
}
});
query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
MySQliteHandler msh = new MySQliteHandler(MainActivity.this, "sqlitdemo", null, 1);
List<User> list = msh.query("user", User.class);
User tom = list.get(0);
System.out.println("debug:query" + tom);
Toast.makeText(MainActivity.this, tom.toString(), 1000).show();
}
});
}