android-データベースSQLite関連
26052 ワード
AndroidプラットフォームのSQLiteデータベースは、標準的なSQL文をサポートする軽量レベルのデータベースです.
ここでは、 androidデータベースの作成 sql文を使用してデータベースを削除する システムapiデータベース削除 データベースのトランザクション 1、データベースの作成
手順:
クラス継承SQLiteOpenHelper を書くコンストラクション関数でデータベース名、カーソルファクトリ、バージョン番号 を指定します.データベースを初期化し、getWritableDatabaseまたはgetReadableDatabaseを実行し、データベースを作成または開く. onCreateでSQL作成文 を実行 androidプラットフォームのデータベースの作成には、SQLiteOpenHelperを継承する補助クラスが必要であり、親クラスの構築方法を書き換える必要があります.
このクラスは補助クラスにすぎません.データベースを使用するには、データベースアクセスクラスPersonDAOを作成する必要があります. 2、データベースを削除して を調べる
注:データベース・アシスタント・クラス・オブジェクトを取得した場合、データベースは作成されず、getxxxxdDatabaseメソッド(読み取り可能または書き込み可能なデータベースの作成)が呼び出された場合にのみ作成されます.
3,googleのapiを使用してデータベース を操作する
SQL文を使用して削除・変更を行うほか、googleが提供するapiも使用できます.
Googleのapiを使ってPersonDAOを修正し、以下のようにします.
両方式の比較1.SQL文を利用して添削を行う利点:柔軟で、必要に応じて表のカスケードクエリーを行う.短所:エラーが発生しやすい.戻り値が2.システムAPIを利用して追加削除して利点を調べる:エラーが発生しにくい.戻り値の欠点があります:柔軟ではありませんて、効率は少し低くて、sql文をつなぎ合わせるのに時間がかかります------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- (安全性)銀行振込: 転出、laowang口座10000->1000-> 転出転入、xiaosan口座0受信1000 (高効率)データの挿入: データベースの運用効率を向上させ、約6倍の速度で を向上させる.データを開く
laowangでxiaosanに1000を振り替える例でdemoを書きます.
まとめ:-----------------------------------------------------------土台は磐石のように!!
ここでは、
手順:
/**
* SQLiteOpenHelper
*
* @author wgk
*
*/
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
public PersonSQLiteOpenHelper(Context context) {
super(context, "PERSON.db", null, 1);// super,
}
/**
*
* , , / /
*
* @param context
*
* @param name
*
* @param factory
* Cursor ( ), . .
* @param version
*
*/
public PersonSQLiteOpenHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
// ,
public void onCreate(SQLiteDatabase db) {
//
db.execSQL("create table person ("
+ " _id integer primary key autoincrement, "
+ " name varchar(20), " + " age integer);");
}
@Override
//
//
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
このクラスは補助クラスにすぎません.データベースを使用するには、データベースアクセスクラスPersonDAOを作成する必要があります.
public class PersonDAO{
private final Context context;
private PersonSQLiteOpenHelper helper;
public PersonDAO(Context context) {
this.context = context;
helper = new PersonSQLiteOpenHelper(context);
}
/**
* @param name
* @param age
*/
public void add(String name, int age) {
SQLiteDatabase db = helper.getWritableDatabase();
// db.execSQL("insert into person (name,age) values ('"+name+"',"+age+")");
// SQL
db.execSQL("insert into person (name,values) values(?,?)",
new Object[] { name, age });
}
/**
*
*
* @param name
*/
public void delete(String name) {
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("delete from person where name=?", new Object[] { name });
}
//
public void update(int age, String name) {
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("update person set age=? where name=?", new Object[] { age,name });
}
public void querySingleRecord(String nameStr) {
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person where name=?",new String[] { nameStr });
if (cursor != null && cursor.moveToFirst()) {
String _id = cursor.getString(0);
String name = cursor.getString(1);
String age = cursor.getString(2);
System.out.println("_id: " + _id);
System.out.println("name: " + name);
System.out.println("age: " + age);
cursor.close();
}
}
/**
*
*/
public void queryAll() {
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * form person", null);
if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
System.out.println("_id: " + _id);
System.out.println("name: " + name);
System.out.println("age: " + age);
System.out.println("-----------------");
}
cursor.close();
}
}
}
//
PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext());
// / ,
helper.getWritableDatabase();
3,googleのapiを使用してデータベース
SQL文を使用して削除・変更を行うほか、googleが提供するapiも使用できます.
//
//
db.insert("person", "name", values);
//
db.delete("person", "name=?", new String[]{name});
//
db.update("person", values, "name=?", new String[]{name});
//
Cursor cursor = db.query("person", //
null, // new String[]{name,age}
"name = ?", //
new String[]{nameStr},//
null, //
null, //
null); //
Googleのapiを使ってPersonDAOを修正し、以下のようにします.
/**
* google api
*
*
* @author wgk
*
*/
public class PersonDAO3 {
private final Context context;
private PersonSQLiteOpenHelper helper;
public PersonDAO3(Context context){
this.context=context;
helper=new PersonSQLiteOpenHelper(context);
}
/**
*
* @param name
* @param age
*/
public void add(String name,int age){
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name", name);
values.put("age", age);
// , ,
String nullColumnHack="null";
long insert=db.insert("person", nullColumnHack, values);
System.out.println(insert);
}
/**
*
* @param name
*/
public void delete(String name){
SQLiteDatabase db=helper.getWritableDatabase();
int delete=db.delete("person", "name=?", new String[]{name});
System.out.println(delete);
}
/**
* !
* @param age
* @param name
*/
public void update(int age,String name){
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("age", age);
int update =db.update("person", values, "name=?", new String[]{name});
System.out.println(update);
}
/**
* !
* @param name
*/
public void querySingleRecord(String nameStr){
SQLiteDatabase db=helper.getReadableDatabase();
Cursor cursor=db.query("person",
null,//
"name=?",//
new String[]{nameStr},//
null, //
null,//
null);//
if(cursor!=null&&cursor.moveToFirst()){
String _id=cursor.getString(0);
String name=cursor.getString(1);
String age=cursor.getString(2);
System.out.println("_id: " + _id);
System.out.println("name: " + name);
System.out.println("age: " + age);
// cursor
// cursor
// cursor
cursor.close();
}
}
/**
*
*/
public void queryAll(){
SQLiteDatabase db=helper.getReadableDatabase();
Cursor cursor=db.query("person",
null,
null,
null,
null,
null,
"_id DESC");//
if(cursor!=null&&cursor.getCount()>0){
while(cursor.moveToNext()){
int _id=cursor.getInt(cursor.getColumnIndex("_id"));
String name=cursor.getString(cursor.getColumnIndex("name"));
int age=cursor.getInt(cursor.getColumnIndex("age"));
System.out.println("_id: " + _id);
System.out.println("name: " + name);
System.out.println("age: " + age);
}
// cursor
// cursor
// cursor
cursor.close();
}
}
}
両方式の比較1.SQL文を利用して添削を行う利点:柔軟で、必要に応じて表のカスケードクエリーを行う.短所:エラーが発生しやすい.戻り値が2.システムAPIを利用して追加削除して利点を調べる:エラーが発生しにくい.戻り値の欠点があります:柔軟ではありませんて、効率は少し低くて、sql文をつなぎ合わせるのに時間がかかります-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
laowangでxiaosanに1000を振り替える例でdemoを書きます.
public class TransactionDemo extends AndroidTestCase{
public void transactionDemo(){
PersonSQLiteOpenHelper helper= new PersonSQLiteOpenHelper(getContext());
//
SQLiteDatabase db=helper.getWritableDatabase();
try{
//
db.beginTransaction();
// 1000
db.execSQL("update person set money=money-1000 where name=?", new Object[]{"laowang"});
// , , , ,
//int i =1/0;
// 1000
db.execSQL("update person set money=money+1000 where name=?", new Object[]{"xiaosan"});
//
db.setTransactionSuccessful();
}catch (Exception e){
e.printStackTrace();
}finally{
db.endTransaction();
}
}
まとめ:-----------------------------------------------------------土台は磐石のように!!