package com.ckt.shrimp.export2file;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.util.Log;
import com.ckt.shrimp.database.InfoContents;
/**
* Created by ckt on 3/9/15.
*/
public class TestExportWikiProvider extends ContentProvider {
public static final Uri CONTENT_URI = Uri.parse("content://com.ckt.shrimp.export2file.TestExportWikiProvider");
private static final String AUTHORIY = "com.ckt.shrimp.export2file.TestExportWikiProvider";
private static final String DATABASE_NAME = "allbooksinfo.db";
private static final int DATABASE_VERSION = 1;
private static final String TAG = "TestExportWikiProvider";
private static final boolean DBG = true;
private static final String BOOKS_TABLE_NAME = "booksinfo";
private DatabaseHelper databaseHelper = null;//
private static class DatabaseHelper extends SQLiteOpenHelper {
private Context mContext;
/**
* DatabaseHelper helper class for creating books and stuff tables into a database.
*
* @param context of the user.
*/
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
if (DBG) log("dbh.onCreate:+ db=" + db);
createBooksInfoTable(db);
if (DBG) log("dbh.onCreate:- db=" + db);
}
@Override
public void onOpen(SQLiteDatabase db) {
if (DBG) log("dbh.onOpen:+ db=" + db);
try {
// Try to access the table and create it if "no such table"
db.query(BOOKS_TABLE_NAME, null, null, null, null, null, null);
if (DBG) log("dbh.onOpen: ok, queried table=" + BOOKS_TABLE_NAME);
} catch (SQLiteException e) {
loge("Exception " + BOOKS_TABLE_NAME + "e=" + e);
if (e.getMessage().startsWith("no such table")) {
createBooksInfoTable(db);
}
}
if (DBG) log("dbh.onOpen:- db=" + db);
}
private void createBooksInfoTable(SQLiteDatabase db) {
if (DBG) log("dbh.createBooksInfoTable:+");
db.execSQL("CREATE TABLE " + BOOKS_TABLE_NAME + "("
+ "_id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ InfoContents.BOOK_ID + " TEXT NOT NULL,"
+ InfoContents.BOOK_ISBN + " TEXT NOT NULL, "
+ InfoContents.BOOK_TITLE + " TEXT NOT NULL, "
+ InfoContents.BOOK_SUBTITLE + " TEXT, "
+ InfoContents.BOOK_AUTHOR + " TEXT NOT NULL, "
+ InfoContents.BOOK_PUBLISHER + " TEXT NOT NULL, "
+ InfoContents.BOOK_PRICE + " TEXT NOT NULL, "
+ InfoContents.BOOK_CATEGORY + " TEXT NOT NULL, "
+ InfoContents.BOOK_CATEGORY_ID + " TEXT NOT NULL, "
+ InfoContents.BOOK_BOUGHT_TIME + "LONG DEFAULT 0, "
+ InfoContents.BOOK_APPLICANT_DEPARTMENT + " TEXT NOT NULL, "
+ InfoContents.BOOK_APPLICANT_NAME + " TEXT NOT NULL, "
+ InfoContents.BOOK_ACTUAL_PRICE_ + " TEXT NOT NULL, "
+ InfoContents.BOOK_BORROWING_DEP + " TEXT NOT NULL, "
+ InfoContents.BOOK_BORROWER_NAME + " TEXT NOT NULL, "
+ InfoContents.BOOK_BORROWING_DATE + " LONG DEFAULT 0 "
+ ");" );
if (DBG) log("dbh.createBooksInfoTable:-");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (DBG) {
log("dbh.onUpgrade:+ db=" + db + " oldV=" + oldVersion + " newV=" + newVersion);
}
//not implementing.
}
}//end DatabaseHelper
@Override
public boolean onCreate() {
if (DBG) log("onCreate:+");
databaseHelper = new DatabaseHelper(getContext());
if (DBG) log("onCreate:- ret true or false");
return (databaseHelper != null) ? true : false;
}
@Override
public Cursor query(Uri url, String[] projectionIn, String selection,
String[] selectionArgs, String sort) {
if(DBG)log("query: url = " + url
+"\n projectionIn = " + projectionIn
+"\n selection = " + selection
+"\n selectionArgs = " + selectionArgs
+"\n sort = " + sort);
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
//qb.setStrict(true); // a little protection from injection attacks
qb.setTables(BOOKS_TABLE_NAME);
SQLiteDatabase db = databaseHelper.getReadableDatabase();
Cursor ret = null;
try {
ret = qb.query(db, projectionIn, selection, selectionArgs, null, null, sort);
} catch (SQLException e) {
loge("got exception when querying: " + e);
}
if (ret != null)
ret.setNotificationUri(getContext().getContentResolver(), url);
return ret;
}
@Override
public String getType(Uri url) {
//not implement.
return null;
}
@Override
public Uri insert(Uri url, ContentValues initialValues) {
//not implements, just for testing
SQLiteDatabase db = databaseHelper.getWritableDatabase();
long rowId = db.insert(BOOKS_TABLE_NAME, null, initialValues);
Uri rowUri = null;
if (rowId > 0) {
rowUri = ContentUris.appendId(CONTENT_URI.buildUpon(), rowId).build();
getContext().getContentResolver().notifyChange(rowUri, null);
return rowUri;
}
throw new SQLException("Failed to insert row into." + rowUri);
}
@Override
public int delete(Uri url, String where, String[] whereArgs) {
//not implements
return 0;
}
@Override
public int update(Uri url, ContentValues values, String where, String[] whereArgs) {
//not implements
return 0;
}
/**
* Log with debug
*
* @param s is string log
*/
public static void log(String s) {
Log.d(TAG, s);
}
public static void loge(String s) {
Log.e(TAG, s);
}
}