Merge "new API in Context. on openDatabase, new param DatabaseErrorHandler"

This commit is contained in:
Vasu Nori
2010-06-03 12:42:32 -07:00
committed by Android (Google) Code Review
8 changed files with 183 additions and 6 deletions

View File

@@ -39461,6 +39461,25 @@
<parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory">
</parameter>
</method>
<method name="openOrCreateDatabase"
return="android.database.sqlite.SQLiteDatabase"
abstract="true"
native="false"
synchronized="false"
static="false"
final="false"
deprecated="not deprecated"
visibility="public"
>
<parameter name="name" type="java.lang.String">
</parameter>
<parameter name="mode" type="int">
</parameter>
<parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory">
</parameter>
<parameter name="errorHandler" type="android.database.DatabaseErrorHandler">
</parameter>
</method>
<method name="peekWallpaper"
return="android.graphics.drawable.Drawable"
abstract="true"
@@ -40888,6 +40907,25 @@
<parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory">
</parameter>
</method>
<method name="openOrCreateDatabase"
return="android.database.sqlite.SQLiteDatabase"
abstract="false"
native="false"
synchronized="false"
static="false"
final="false"
deprecated="not deprecated"
visibility="public"
>
<parameter name="name" type="java.lang.String">
</parameter>
<parameter name="mode" type="int">
</parameter>
<parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory">
</parameter>
<parameter name="errorHandler" type="android.database.DatabaseErrorHandler">
</parameter>
</method>
<method name="peekWallpaper"
return="android.graphics.drawable.Drawable"
abstract="false"
@@ -61029,6 +61067,24 @@
<parameter name="version" type="int">
</parameter>
</constructor>
<constructor name="SQLiteOpenHelper"
type="android.database.sqlite.SQLiteOpenHelper"
static="false"
final="false"
deprecated="not deprecated"
visibility="public"
>
<parameter name="context" type="android.content.Context">
</parameter>
<parameter name="name" type="java.lang.String">
</parameter>
<parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory">
</parameter>
<parameter name="version" type="int">
</parameter>
<parameter name="errorHandler" type="android.database.DatabaseErrorHandler">
</parameter>
</constructor>
<method name="close"
return="void"
abstract="false"
@@ -155111,6 +155167,25 @@
<parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory">
</parameter>
</method>
<method name="openOrCreateDatabase"
return="android.database.sqlite.SQLiteDatabase"
abstract="false"
native="false"
synchronized="false"
static="false"
final="false"
deprecated="not deprecated"
visibility="public"
>
<parameter name="file" type="java.lang.String">
</parameter>
<parameter name="mode" type="int">
</parameter>
<parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory">
</parameter>
<parameter name="errorHandler" type="android.database.DatabaseErrorHandler">
</parameter>
</method>
<method name="peekWallpaper"
return="android.graphics.drawable.Drawable"
abstract="false"

View File

@@ -57,6 +57,7 @@ import android.content.pm.PackageParser.Package;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.graphics.Bitmap;
@@ -542,6 +543,15 @@ class ContextImpl extends Context {
return db;
}
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory,
DatabaseErrorHandler errorHandler) {
File f = validateFilePath(name, true);
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(f.getPath(), factory, errorHandler);
setFilePermissionsFromMode(f.getPath(), mode, 0);
return db;
}
@Override
public boolean deleteDatabase(String name) {
try {

View File

@@ -21,6 +21,8 @@ import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.DatabaseErrorHandler;
import android.database.DefaultDatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.graphics.Bitmap;
@@ -587,6 +589,32 @@ public abstract class Context {
public abstract SQLiteDatabase openOrCreateDatabase(String name,
int mode, CursorFactory factory);
/**
* Open a new private SQLiteDatabase associated with this Context's
* application package. Creates the database file if it doesn't exist.
*
* <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be
* used to handle corruption when sqlite reports database corruption.</p>
*
* @param name The name (unique in the application package) of the database.
* @param mode Operating mode. Use 0 or {@link #MODE_PRIVATE} for the
* default operation, {@link #MODE_WORLD_READABLE}
* and {@link #MODE_WORLD_WRITEABLE} to control permissions.
* @param factory An optional factory class that is called to instantiate a
* cursor when query is called.
* @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
* corruption. if null, {@link DefaultDatabaseErrorHandler} is assumed.
* @return The contents of a newly created database with the given name.
* @throws android.database.sqlite.SQLiteException if the database file could not be opened.
*
* @see #MODE_PRIVATE
* @see #MODE_WORLD_READABLE
* @see #MODE_WORLD_WRITEABLE
* @see #deleteDatabase
*/
public abstract SQLiteDatabase openOrCreateDatabase(String name,
int mode, CursorFactory factory, DatabaseErrorHandler errorHandler);
/**
* Delete an existing private SQLiteDatabase associated with this Context's
* application package.

View File

@@ -20,6 +20,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.graphics.Bitmap;
@@ -203,6 +204,12 @@ public class ContextWrapper extends Context {
return mBase.openOrCreateDatabase(name, mode, factory);
}
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory,
DatabaseErrorHandler errorHandler) {
return mBase.openOrCreateDatabase(name, mode, factory, errorHandler);
}
@Override
public boolean deleteDatabase(String name) {
return mBase.deleteDatabase(name);

View File

@@ -837,10 +837,23 @@ public class SQLiteDatabase extends SQLiteClosable {
}
/**
* same as {@link #openDatabase(String, CursorFactory, int)} except for an additional param
* errorHandler.
* @param errorHandler the {@link DatabaseErrorHandler} obj to be used when database
* corruption is detected on the database.
* Open the database according to the flags {@link #OPEN_READWRITE}
* {@link #OPEN_READONLY} {@link #CREATE_IF_NECESSARY} and/or {@link #NO_LOCALIZED_COLLATORS}.
*
* <p>Sets the locale of the database to the the system's current locale.
* Call {@link #setLocale} if you would like something else.</p>
*
* <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be
* used to handle corruption when sqlite reports database corruption.</p>
*
* @param path to database file to open and/or create
* @param factory an optional factory class that is called to instantiate a
* cursor when query is called, or null for default
* @param flags to control database access mode
* @param errorHandler the {@link DatabaseErrorHandler} obj to be used to handle corruption
* when sqlite reports database corruption
* @return the newly opened database
* @throws SQLiteException if the database cannot be opened
*/
public static SQLiteDatabase openDatabase(String path, CursorFactory factory, int flags,
DatabaseErrorHandler errorHandler) {

View File

@@ -17,6 +17,8 @@
package android.database.sqlite;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.DefaultDatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log;
@@ -39,6 +41,7 @@ public abstract class SQLiteOpenHelper {
private SQLiteDatabase mDatabase = null;
private boolean mIsInitializing = false;
private final DatabaseErrorHandler mErrorHandler;
/**
* Create a helper object to create, open, and/or manage a database.
@@ -52,12 +55,37 @@ public abstract class SQLiteOpenHelper {
* {@link #onUpgrade} will be used to upgrade the database
*/
public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {
this(context, name, factory, version, new DefaultDatabaseErrorHandler());
}
/**
* Create a helper object to create, open, and/or manage a database.
* The database is not actually created or opened until one of
* {@link #getWritableDatabase} or {@link #getReadableDatabase} is called.
*
* <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be
* used to handle corruption when sqlite reports database corruption.</p>
*
* @param context to use to open or create the database
* @param name of the database file, or null for an in-memory database
* @param factory to use for creating cursor objects, or null for the default
* @param version number of the database (starting at 1); if the database is older,
* {@link #onUpgrade} will be used to upgrade the database
* @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
* corruption.
*/
public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version,
DatabaseErrorHandler errorHandler) {
if (version < 1) throw new IllegalArgumentException("Version must be >= 1, was " + version);
if (errorHandler == null) {
throw new IllegalArgumentException("DatabaseErrorHandler param value can't be null.");
}
mContext = context;
mName = name;
mFactory = factory;
mNewVersion = version;
mErrorHandler = errorHandler;
}
/**
@@ -95,7 +123,7 @@ public abstract class SQLiteOpenHelper {
if (mName == null) {
db = SQLiteDatabase.create(null);
} else {
db = mContext.openOrCreateDatabase(mName, 0, mFactory);
db = mContext.openOrCreateDatabase(mName, 0, mFactory, mErrorHandler);
}
int version = db.getVersion();
@@ -169,7 +197,8 @@ public abstract class SQLiteOpenHelper {
try {
mIsInitializing = true;
String path = mContext.getDatabasePath(mName).getPath();
db = SQLiteDatabase.openDatabase(path, mFactory, SQLiteDatabase.OPEN_READONLY);
db = SQLiteDatabase.openDatabase(path, mFactory, SQLiteDatabase.OPEN_READONLY,
mErrorHandler);
if (db.getVersion() != mNewVersion) {
throw new SQLiteException("Can't upgrade read-only database from version " +
db.getVersion() + " to " + mNewVersion + ": " + path);

View File

@@ -29,6 +29,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
@@ -183,6 +184,12 @@ public class MockContext extends Context {
throw new UnsupportedOperationException();
}
@Override
public SQLiteDatabase openOrCreateDatabase(String file, int mode,
SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
throw new UnsupportedOperationException();
}
@Override
public File getDatabasePath(String name) {
throw new UnsupportedOperationException();

View File

@@ -37,6 +37,7 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.Resources.Theme;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.graphics.Bitmap;
@@ -1058,6 +1059,13 @@ public final class BridgeContext extends Context {
return null;
}
@Override
public SQLiteDatabase openOrCreateDatabase(String arg0, int arg1,
CursorFactory arg2, DatabaseErrorHandler arg3) {
// TODO Auto-generated method stub
return null;
}
@Override
public Drawable peekWallpaper() {
// TODO Auto-generated method stub