将 android sql文件放生成在sd卡
来源:互联网 发布:用友网络面试题 编辑:程序博客网 时间:2024/06/11 05:26
public abstract class SQLiteOpenHelper {private static final String TAG = SQLiteOpenHelper.class.getSimpleName();private final Context mContext;private final String mName;private final CursorFactory mFactory;private final int mNewVersion;private SQLiteDatabase mDatabase = null;private boolean mIsInitializing = false;/** * 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. * * @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 */public SDCardSQLiteOpenHelper(Context context, String name,CursorFactory factory, int version) {if (version < 1)throw new IllegalArgumentException("Version must be >= 1, was "+ version);mContext = context;mName = name;mFactory = factory;mNewVersion = version;}/** * Create and/or open a database that will be used for reading and writing. * Once opened successfully, the database is cached, so you can call this * method every time you need to write to the database. Make sure to call * {@link #close} when you no longer need it. * * <p> * Errors such as bad permissions or a full disk may cause this operation to * fail, but future attempts may succeed if the problem is fixed. * </p> * * @throws SQLiteException * if the database cannot be opened for writing * @return a read/write database object valid until {@link #close} is called */public synchronized SQLiteDatabase getWritableDatabase() {if (mDatabase != null && mDatabase.isOpen() && !mDatabase.isReadOnly()) {return mDatabase; // The database is already open for business}if (mIsInitializing) {throw new IllegalStateException("getWritableDatabase called recursively");}// If we have a read-only database open, someone could be using it// (though they shouldn't), which would cause a lock to be held on// the file, and our attempts to open the database read-write would// fail waiting for the file lock. To prevent that, we acquire the// lock on the read-only database, which shuts out other users.boolean success = false;SQLiteDatabase db = null;try {mIsInitializing = true;if (mName == null) {db = SQLiteDatabase.create(null);} else {String path = getDatabasePath(mName).getPath();db = SQLiteDatabase.openOrCreateDatabase(path, mFactory);}int version = db.getVersion();if (version != mNewVersion) {db.beginTransaction();try {if (version == 0) {onCreate(db);} else {onUpgrade(db, version, mNewVersion);}db.setVersion(mNewVersion);db.setTransactionSuccessful();} finally {db.endTransaction();}}onOpen(db);success = true;return db;} catch (Exception e) {e.printStackTrace();} finally {mIsInitializing = false;if (success) {if (mDatabase != null) {try {mDatabase.close();} catch (Exception e) {}}mDatabase = db;} else {if (db != null)db.close();}}return db;}/** * Create and/or open a database. This will be the same object returned by * {@link #getWritableDatabase} unless some problem, such as a full disk, * requires the database to be opened read-only. In that case, a read-only * database object will be returned. If the problem is fixed, a future call * to {@link #getWritableDatabase} may succeed, in which case the read-only * database object will be closed and the read/write object will be returned * in the future. * * @throws SQLiteException * if the database cannot be opened * @return a database object valid until {@link #getWritableDatabase} or * {@link #close} is called. */public synchronized SQLiteDatabase getReadableDatabase() {if (mDatabase != null && mDatabase.isOpen()) {return mDatabase; // The database is already open for business}if (mIsInitializing) {throw new IllegalStateException("getReadableDatabase called recursively");}try {return getWritableDatabase();} catch (SQLiteException e) {if (mName == null)throw e; // Can't open a temp database read-only!Log.e(TAG, "Couldn't open " + mName+ " for writing (will try read-only):", e);}SQLiteDatabase db = null;try {mIsInitializing = true;String path = getDatabasePath(mName).getPath();db = SQLiteDatabase.openDatabase(path, mFactory,SQLiteDatabase.OPEN_READWRITE);if (db.getVersion() != mNewVersion) {throw new SQLiteException("Can't upgrade read-only database from version "+ db.getVersion() + " to " + mNewVersion + ": "+ path);}onOpen(db);Log.w(TAG, "Opened " + mName + " in read-only mode");mDatabase = db;return mDatabase;} finally {mIsInitializing = false;if (db != null && db != mDatabase)db.close();}}/** * Close any open database object. */public synchronized void close() {if (mIsInitializing)throw new IllegalStateException("Closed during initialization");if (mDatabase != null && mDatabase.isOpen()) {mDatabase.close();mDatabase = null;}}public File getDatabasePath(String name) {String EXTERN_PATH = null;if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) == true) {String dbPath = mContext.getString(R.string.dir)+ mContext.getString(R.string.db_dir) + "/";EXTERN_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + dbPath;File f = new File(EXTERN_PATH);if (!f.exists()) {f.mkdirs();}}return new File(EXTERN_PATH + name);}/** * Called when the database is created for the first time. This is where the * creation of tables and the initial population of the tables should * happen. * * @param db * The database. */public abstract void onCreate(SQLiteDatabase db);/** * Called when the database needs to be upgraded. The implementation should * use this method to drop tables, add tables, or do anything else it needs * to upgrade to the new schema version. * * <p> * The SQLite ALTER TABLE documentation can be found <a * href="http://sqlite.org/lang_altertable.html">here</a>. If you add new * columns you can use ALTER TABLE to insert them into a live table. If you * rename or remove columns you can use ALTER TABLE to rename the old table, * then create the new table and then populate the new table with the * contents of the old table. * * @param db * The database. * @param oldVersion * The old database version. * @param newVersion * The new database version. */public abstract void onUpgrade(SQLiteDatabase db, int oldVersion,int newVersion);/** * Called when the database has been opened. Override method should check * {@link SQLiteDatabase#isReadOnly} before updating the database. * * @param db * The database. */public void onOpen(SQLiteDatabase db) {}}
其实也就是改了一下生成文件的 路径。
0 0
- 将 android sql文件放生成在sd卡
- Android在sd卡生成log文件
- 把文件放在SD卡
- Android 如何将文件写入SD卡
- Android 如何将文件写入SD卡
- android-在sd卡创建一个文件
- Android将TAB选项卡放在屏幕底部
- android 将文件存到SD卡上
- 将文件放到Android模拟器的SD卡中
- android 将文件 保存到sd卡 上面
- android 将文件保存到sd卡上面(简单)
- Android将String保存为SD卡中TXT文件
- Android 将SQLite数据保存在SD卡
- Android将bitemap保存在SD卡并读取
- android 将数据缓存在文件中,放在/data/data/<package name>/files目录下
- Android将ButtonBar放在屏幕底部
- Android将ButtonBar放在屏幕底部
- Android将ButtonBar放在屏幕底部
- Core Data数据迁移与升级
- (14) 类似于男人下100层的卷轴类游戏开发
- 详细剖析Android Traceview 效率检视工具!分析程序运行速度!并讲解两种创建SDcard方式!
- js 实现页面时钟
- 如何在局域网中访问Tomcat下的项目
- 将 android sql文件放生成在sd卡
- Android adb.exe程序启动不起来 具体解决方法
- 【Android2.2及以上】如何允许你的应用移动到SD卡?
- 高仿微信5.2.1主界面架构 包含消息通知
- VIM使用系列:缩进调整、自动补全、折叠、跳转
- 自定义导航条 文字大小颜色等 按钮大小图标等 背景色
- 开始记录点东西
- About me
- 男人的过错,为什么要让女人来承受