MyDatabaseHelper
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.widget.Toast; /** * Created by YRC on 2016/11/7. */ public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK= "create table Book (" + "id integer primary key autoincrement, " + "author text, " + "price real, " + "pages integer, " +"category_id integer," + "name text)"; public static final String CREATE_CATEGORY="create table Category(" + "id integer primary key autoincrement," + "category_name text," + "category_code integer)"; private Context mContext; public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){ super(context,name,factory,version); mContext=context; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); db.execSQL(CREATE_CATEGORY); } public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ switch (oldVersion){ case 1: db.execSQL(CREATE_CATEGORY); case 2: db.execSQL("alter table Book add column category_id integer+++++++++++++++"); default: } } }
MainActivity
import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private MyDatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper=new MyDatabaseHelper(this,"BookStore.db",null,2); Button createDatabase= (Button) findViewById(R.id.CreateDataBtn); createDatabase.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dbHelper.getWritableDatabase(); } }); Button addData= (Button) findViewById(R.id.AddDataBtn); addData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db=dbHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("author", "Dan Brown"); values.put("pages", 454); values.put("price", 16.96); values.put("name", "The Da Vinci Code"); db.insert("Book", null, values); values.clear(); values.put("author", "Dan Brown"); values.put("pages", 50); values.put("price", 20); values.put("name", "The Lost Symbol"); db.insert("Book", null, values); } }); Button updataData= (Button) findViewById(R.id.UpdataBtn); updataData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db=dbHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("price",10.99); db.update("Book",values,"name=?",new String[]{"The Da Vinci Code"}); } }); Button deleteData= (Button) findViewById(R.id.DeleteDataBtn); deleteData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db=dbHelper.getWritableDatabase(); db.delete("Book","pages>?",new String[]{"500"}); } }); Button queryButton= (Button) findViewById(R.id.QuerydataBtn); queryButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db=dbHelper.getWritableDatabase(); Cursor cursor=db.query("Book",null,null,null,null,null,null); if (cursor.moveToFirst()){ do{ String name=cursor.getString(cursor.getColumnIndex("name")); String author=cursor.getString(cursor.getColumnIndex("author")); int pages=cursor.getInt(cursor.getColumnIndex("pages")); double price=cursor.getDouble(cursor.getColumnIndex("price")); Log.d("MainActivity","Book name is "+name); Log.d("MainActivity","Book author is "+author); Log.d("MainActivity","Book pages is "+pages); Log.d("MainActivity","Book price is "+price); }while (cursor.moveToNext()); } cursor.close(); } }); Button replaceData= (Button) findViewById(R.id.replaceDataBtn); replaceData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db=dbHelper.getWritableDatabase(); db.beginTransaction(); try{ db.delete("Book",null,null); ContentValues values=new ContentValues(); values.put("name","Game of Thrones"); values.put("author","Georage Martin"); values.put("pages",720); values.put("price",20.85); db.insert("Book",null,values); db.setTransactionSuccessful(); }catch (Exception e){ e.printStackTrace(); }finally { { db.endTransaction(); } } } }); } }
DatabaseProvider
import android.content.ContentProvider; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.support.annotation.Nullable; /** * Created by YRC on 2016/11/16. */ public class DatabaseProvider extends ContentProvider { public static final int BOOK_DIR=0; public static final int BOOK_ITEM=1; public static final int CATEGORY_DIR=2; public static final int CATEGORY_ITEM=3; public static final String AUTHORITY="com.example.yrc.sqlpractice.provider"; private static UriMatcher uriMatcher; private MyDatabaseHelper dbHelper; static { uriMatcher=new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(AUTHORITY,"book",BOOK_DIR); uriMatcher.addURI(AUTHORITY,"book/#",BOOK_ITEM); uriMatcher.addURI(AUTHORITY,"category",CATEGORY_DIR); uriMatcher.addURI(AUTHORITY,"category/#",CATEGORY_ITEM); } @Override public boolean onCreate() { dbHelper=new MyDatabaseHelper(getContext(),"BookStore.db",null,2); return true; } @Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db=dbHelper.getReadableDatabase(); Cursor cursor=null; switch (uriMatcher.match(uri)){ case BOOK_DIR: cursor=db.query("Book",projection,selection,selectionArgs,null,null,sortOrder); break; case BOOK_ITEM: String bookId=uri.getPathSegments().get(1); cursor=db.query("Book",projection,"id=?",new String[]{ bookId },null,null,sortOrder); break; case CATEGORY_DIR: cursor=db.query("Category",projection,selection,selectionArgs,null,null,sortOrder); break; case CATEGORY_ITEM: String categoryId=uri.getPathSegments().get(1); cursor=db.query("Category",projection,"id=?",new String[]{ categoryId },null,null,sortOrder); break; default: break; } return cursor; } @Nullable @Override public Uri insert(Uri uri, ContentValues values) { SQLiteDatabase db=dbHelper.getWritableDatabase(); Uri uriReturn=null; switch (uriMatcher.match(uri)){ case BOOK_DIR: case BOOK_ITEM: long newBookId=db.insert("Book",null,values); uriReturn=Uri.parse("content://"+AUTHORITY+"/book/"+newBookId); break; case CATEGORY_DIR: case CATEGORY_ITEM: long newCategoryBookId=db.insert("Category",null,values); uriReturn=Uri.parse("content://"+AUTHORITY+"/category/"+newCategoryBookId); break; default: break; } return uriReturn; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { SQLiteDatabase db=dbHelper.getWritableDatabase(); int updateRows=0; switch (uriMatcher.match(uri)){ case BOOK_DIR: updateRows=db.update("Book",values,selection,selectionArgs); break; case BOOK_ITEM: String bookId=uri.getPathSegments().get(1); updateRows=db.update("Book",values,"id=?",new String[]{bookId}); break; case CATEGORY_DIR: updateRows=db.update("Category",values,selection,selectionArgs); break; case CATEGORY_ITEM: String categoryId=uri.getPathSegments().get(1); updateRows=db.update("Category",values,"id=?",new String[]{categoryId}); break; default: break; } return updateRows; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase db=dbHelper.getWritableDatabase(); int deletedRows=0; switch (uriMatcher.match(uri)){ case BOOK_DIR: deletedRows=db.delete("Book",selection,selectionArgs); break; case BOOK_ITEM: String bookId=uri.getPathSegments().get(1); deletedRows=db.delete("Book","id=?",new String[]{bookId}); break; case CATEGORY_DIR: deletedRows=db.delete("Category",selection,selectionArgs); break; case CATEGORY_ITEM: String categoryId=uri.getPathSegments().get(1); deletedRows=db.delete("Book","id=?",new String[]{categoryId}); break; default: break; } return deletedRows; } @Nullable @Override public String getType(Uri uri) { switch (uriMatcher.match(uri)){ case BOOK_DIR: return "vnd.android.cursor.dir/vnd.com.example.yrc.sqlpractice.provider.book"; case BOOK_ITEM: return "vnd.android.cursor.item/vnd.com.example.yrc.sqlpractice.provider.book"; case CATEGORY_DIR: return "vnd.android.cursor.dir/vnd.com.example.yrc.sqlpractice.provider.category"; case CATEGORY_ITEM: return "vnd.android.cursor.dir/vnd.com.example.yrc.sqlpractice.provider.category"; } return null; } }