这个星期一直在与狗屁DELL交涉都没怎么写博客了,尼玛的狗屁DELL发我一个没有硬盘的机器还不肯退换货,真是气死人了,不说了,说多了都是血。
直接使用SQLiteDatabase的openOrCreateDatabase可以直接打开或者是新建一个SQLiteDatabase,但是这里存在一个缺点。在每次执行SQL语句的时候都需要在try catch语句中进行,如果在try中直接操作的数据库或者表不存在,就需要在catch中重新创建表并且执行CRUD操作,并且有关数据库的每一个方法都要这么做,重复的代码太多了,所以实际的开发中大都选用SQLiteOpenHelper类。
主要方法:
synchronized SQLiteDatabase getReadableDatabase():以读写的方式打开数据库。
synchronized SQLiteDatabase getWritableDatabase();以写的方式打开数据库。
abstract void onCreate(SQLiteDatabase db) 当第一次创建数据库的时候回调该方法。
abstract void onUprade(SQLiteDatabase db,int oldversion,int newVersion) 数据库版本更新的时候回调该方法。
abstract void close() 关闭所有打开的SQLiteDatabase.
使用方法:
1)继承SQLiteOpenHelper。在构造方法中的参数String name就是数据库的名称。
2)重写onCreate和onUpgrade方法。
MySQLiteOpenHelper类:
package com.app.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class MySQLiteOpenHelper extends SQLiteOpenHelper { String createSQL = "create table tb_test(_id integer primary key autoincrement ,name,age )"; public MySQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(createSQL); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { } }
Main.java
package com.app.main; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.Menu; import android.widget.Toast; import com.app.db.MySQLiteOpenHelper; public class Main extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MySQLiteOpenHelper helper = new MySQLiteOpenHelper(this, "my.db3", null, 1); String insertSQL = "insert into tb_test values(null,'wx',18)"; SQLiteDatabase db = helper.getReadableDatabase(); db.execSQL(insertSQL); Cursor cursor = db.rawQuery("select * from tb_test", null); cursor.moveToFirst(); int id = cursor.getInt(0); Toast.makeText(this, id+"",Toast.LENGTH_SHORT).show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
实现效果: