android mysql代码_Android的数据库的写法(基础篇)

首先写一个helper继承SQLiteOpenHelperprivate SQLiteDatabase db_r = null; // readable database

private SQLiteDatabase db_w = null; // writable database

private static DbHelper dbHelper;

private DbHelper(Context context) {

super(context, DataBaseClass.DB_FILE, null, DataBaseClass.DB_VERSION);

}

public static synchronized DbHelper getInstance(Context context) {

if (dbHelper == null) {

dbHelper = new DbHelper(context);

}

return dbHelper;

}

@Override

public void onCreate(SQLiteDatabase db) {

Collection tables = DataBaseClass.sRCMDbTables.values();

Iterator iterator = tables.iterator();

System.out.println("====DBHelp oncreate");

try {

db.beginTransaction();

while (iterator.hasNext()) {

iterator.next().onCreate(db);

}

db.setTransactionSuccessful();

} catch (Throwable e) {

throw new RuntimeException("DB creation failed: " + e.getMessage());

} finally {

db.endTransaction();

}

}

@Override

public synchronized SQLiteDatabase getReadableDatabase() {

if (db_r == null || !db_r.isOpen()) {

try {

db_r = super.getReadableDatabase();

} catch (SQLiteException e) {

//TODO Implement proper error handling

db_r = null;

throw e;

}

}

return db_r;

}

@Override

public synchronized SQLiteDatabase getWritableDatabase() {

if (db_w == null || !db_w.isOpen() || db_w.isReadOnly()) {

try {

db_w = super.getWritableDatabase();

} catch (SQLiteException e) {

//TODO Implement proper error handling

db_w = null;

throw e;

}

}

return db_w;

}

创建表封装一个类:public final class DataBaseClass {

private DataBaseClass() {};

public static final int DB_VERSION = 2;

static final String DB_FILE = "my.db";

public interface RCMColumns {

public static final String account_ID = "account_id";                   //INTEGER (long)

}

public static final class MyTest1Table extends DbBaseTable implements BaseColumns, RCMColumns {

private MyTest1Table() {

}

private static final MyTest1Table sInstance = new MyTest1Table();

static MyTest1Table getInstance() {

return sInstance;

}

private static final String TABLE_NAME = "Mytest1";

/* Columns */

public static final String TEST1               = "test1";

public static final String TEST2                  = "test2";

public static final String TEST3            = "test3";

private static final String CREATE_TABLE_STMT = "CREATE TABLE IF NOT EXISTS "

+ TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"

+ account_ID + " INTEGER, "

+ TEST1 + " TEXT, "

//          + TEST2 + " TEXT, "

+ TEST3 + " TEXT"

+ ");";

@Override

String getName() {

return TABLE_NAME;

}

@Override

void onCreate(SQLiteDatabase db) {

db.execSQL(CREATE_TABLE_STMT);

}

}

public static final class MyTest2Table extends DbBaseTable implements BaseColumns, RCMColumns {

private MyTest2Table() {

}

private static final MyTest2Table sInstance = new MyTest2Table();

static MyTest2Table getInstance() {

return sInstance;

}

private static final String TABLE_NAME = "Mytest2";

/* Columns */

public static final String TEST4               = "test4";

public static final String TEST5                  = "test5";

public static final String TEST6            = "test6";

private static final String CREATE_TABLE_STMT = "CREATE TABLE IF NOT EXISTS "

+ TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"

+ account_ID + " INTEGER, "

+ TEST4 + " TEXT, "

+ TEST5 + " TEXT, "

+ TEST6 + " TEXT"

+ ");";

@Override

String getName() {

return TABLE_NAME;

}

@Override

void onCreate(SQLiteDatabase db) {

db.execSQL(CREATE_TABLE_STMT);

}

}

static LinkedHashMap sRCMDbTables = new LinkedHashMap();

static {

sRCMDbTables.put(MyTest1Table.getInstance().getName(), MyTest1Table.getInstance());

//  sRCMDbTables.put(MyTest2Table.getInstance().getName(), MyTest2Table.getInstance());

}

}

用一个contentProvider来对数据库进行查询,插入操作:public class MyProvider extends ContentProvider {

static final boolean DEBUG_ENBL = false;

static final String TAG = "[RC]MyProvider";

/* URI authority string */

public static final String AUTHORITY = "com.pic.optimize.provider.myprovider";

/* URI paths names */

public static final String MyTest1Table = "MyTest1Table";

public static final String MyTest2Table = "MyTest2Table";

private DbHelper dbHelper;

@Override

public boolean onCreate() {

dbHelper = DbHelper.getInstance(getContext());

return true;

}

@Override

public int delete(Uri uri, String selection, String[] selectionArgs) {

return 0;

}

@Override

public String getType(Uri uri) {

return null;

}

@Override

public Uri insert(Uri uri, ContentValues values) {

int match = sUriMatcher.match(uri);

SQLiteDatabase db;

long rowId;

try {

db = dbHelper.getWritableDatabase();

} catch (SQLiteException e) {

throw e;

}

synchronized (dbHelper) {

try {

rowId = db.insert(tableName(match), null, values);

} catch (SQLException e) {

throw e;

}

}

uri = ContentUris.withAppendedId(UriHelper.removeQuery(uri), rowId);

getContext().getContentResolver().notifyChange(uri, null);

return uri;

}

@Override

public Cursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sortOrder) {

int match = sUriMatcher.match(uri);

SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

qb.setTables(tableName(match));

SQLiteDatabase db;

try {

db = dbHelper.getReadableDatabase();

} catch (SQLiteException e) {

// TODO Implement proper error handling

throw e;

}

Cursor cursor;

synchronized (dbHelper) {

try {

cursor = qb.query(db, projection, selection, selectionArgs,

null, null, sortOrder);

} catch (Throwable e) {

throw new RuntimeException("Exception at db query: "

+ e.getMessage());

}

}

return cursor;

}

@Override

public int update(Uri uri, ContentValues values, String selection,

String[] selectionArgs) {

return 0;

}

private String tableName(int uri_match) {

switch (uri_match) {

case MyTest1Table_MATCH:

return DataBaseClass.MyTest1Table.getInstance().getName();

case MyTest2Table_MATCH:

return DataBaseClass.MyTest2Table.getInstance().getName();

}

return null;

}

/* UriMatcher codes */

private static final int MyTest1Table_MATCH = 10;

private static final int MyTest2Table_MATCH = 11;

private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

static {

sUriMatcher.addURI(AUTHORITY, MyTest1Table, MyTest1Table_MATCH);

sUriMatcher.addURI(AUTHORITY, MyTest2Table, MyTest2Table_MATCH);

}

}

Activity调用:@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

copyDatabase();

DbHelper.getInstance(this);

addDataToDataBase();

queryDataBase1();

}

private void copyDatabase() {

File file = new File("/data/data/com.pic.optimize/databases");

String[] array = file.list();

for(int i=0;i

Log.d("TAG","=====array[i]="+array[i]);

}

File f = new File("/data/data/com.pic.optimize/databases/my.db");

String sdcardPath = Environment.getExternalStorageDirectory().getAbsolutePath();

File o = new File(sdcardPath+"/my.db");

if(f.exists()) {

FileChannel outF;

Log.d("TAG","=====file exsit");

try {

outF = new FileOutputStream(o).getChannel();

new FileInputStream(f).getChannel().transferTo(0, f.length(),outF);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

Toast.makeText(this, "完成", Toast.LENGTH_SHORT).show();

}

}

private void addDataToDataBase() {

try {

ContentResolver resolver = this.getContentResolver();

ContentValues values = new ContentValues();

values.put(DataBaseClass.MyTest1Table.TEST1, "cc");

values.put(DataBaseClass.MyTest1Table.account_ID, 1002);

resolver.insert(UriHelper.getUri(MyProvider.MyTest1Table),

values);

} catch (Throwable error) {

}

}

private void queryDataBase1() {

ContentResolver resolver = this.getContentResolver();

Cursor cursor = resolver.query(UriHelper.getUri(MyProvider.MyTest1Table), null, null, null, null);

cursor.moveToPosition(-1);

while(cursor.moveToNext()) {

int account = cursor.getInt(1);

String test1 = cursor.getString(2);

}

cursor.close();

}

打印结果是:12-10 10:28:49.580 11294-11294/com.pic.optimize D/TAG: =====array[i]=my.db

12-10 10:28:49.580 11294-11294/com.pic.optimize D/TAG: =====array[i]=my.db-journal

12-10 10:28:49.581 11294-11294/com.pic.optimize D/TAG: =====file exsit

12-10 10:28:49.610 11294-11294/com.pic.optimize I/System.out: ====account=1002test1=cc

一.创建一个DataBaseHelper DataBaseHelper是一个访问SQLite的助类,提供两个方面的功能 1.getReadableDatebase(),getWriteableDatabase()可以获取SQLiteDatabase对象,通过 2.提供了onCreate()和onUpdate()两个回调函数,允许我们常见和升级数据库是进行使用 A、 在SQLiteOpenHelper的子类当中,必须要有的构造函数 B、该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDataBase对象的时候onCreate 二、创建一个实体person类并且给字段和封装 三、创建一个业务类对SQL的CRUD操作 1.getWritableDatabase()和getReadableDatabase()的区别 ,两个方法都可以获取一个用于操作数据库的SQLiteDatabase实例 2.execSQL(增,删,改都是这个方法)和close();android内部有缓存可关闭也不关闭也行,查询rawQuery是方法 3.在分页有到Cursor(游标)取游标下一个值cursor.moveToNext(),用游标对象接数据 "select * from person limit ?,?" person不能加上where 关键字 4.在删除注意:sb.deleteCharAt(sb.length() - 1); 四、AndroidCRUD业务对SQLite的CRUD操作 1.ContentValues对象的使用 2.android内部insert添加数据的方法,而且values这个不给值也必须要执行,而主键是不是null的其他字段的值是为null 3.insert update query delete 五、单元测试类要注意的 AndroidCRUDService curdService = new AndroidCRUDService(this.getContext()); /* * 注意:getContext必须在我们使用前已经注解进去的,在使用前要实力化,而且是使用后才有上下文 *一般设置为局部对象 */ 六、AndroidManifest.xml的配置 <!-- 配置用户类库android.test.runner测试 --> package jll.sqlitedb; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; /** * *@author Administrator DataBaseHelper是一个访问SQLite的助类,提供两个方面的功能 * 1.getReadableDatebase(),getWriteableDatabase()可以获取SQLiteDatabase对象,通过 * 2.提供了onCreate()和onUpdate()两个回调函数,允许我们常见和升级数据库是进行使用 */ public class DataBaseHelper extends SQLiteOpenHelper { // 给一个默认的SQLite的数据库名 private static final String DataBaseName = "SQLite_DB"; private static final int VERSION = 2; // 在SQLiteOpenHelper的子类当中,必须要有的构造函数 public DataBaseHelper(Context context, String name, CursorFacto
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值