我使用SQLite数据库存储少量字符串。我在第一次启动应用程序时使用此代码添加这些字符串。
DatabaseHandler db = new DatabaseHandler(this);
db.addProducts(//lot of strings appended to make a single String);
db.close();
DatabaseHandler是:
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "my_db";
private static final String TABLE_NAME = "products";
private static final String KEY_NAME = "pname";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_PRODUCTS_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ KEY_NAME + " TEXT" + ")";
db.execSQL(CREATE_PRODUCTS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public void addProducts(String product_name) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, product_name); // Product Name
db.insert(TABLE_NAME, null, values);
db.close();
}
public String getProducts() {
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + TABLE_NAME;
Cursor cursor = db.rawQuery(selectQuery, null);
String s = "default";
if (cursor.moveToFirst()) {
int n = cursor.getCount();
s = cursor.getString(0);
}
cursor.close();
return s;
}
}
问题是如果我没有检查表products
是否存在,我会在每次推出应用程序时调用db.addProducts("");
。每次光标计数增加1
并最终说need to extend db
类似的东西。如何检查表是否已经存在?
我只能找到:How to check if database exists
:
public static boolean checkDataBase(String DB_FULL_PATH) {
SQLiteDatabase checkDB = null;
try {
checkDB = SQLiteDatabase.openDatabase(DB_FULL_PATH, null,
SQLiteDatabase.OPEN_READONLY);
checkDB.close();
} catch (SQLiteException e) {
// database doesn't exist yet.
}
return checkDB != null ? true : false;
}
我坚持这条道路。我怎样才能获得数据库的路径?
此外,如果我检查表是否存在而不是数据库,那将是有用的。
谢谢
答案 0 :(得分:0)
在Raw Query CREATE TABLE IF NOT EXISTS "+TABLENAME+";
中使用它,这不会每次都创建一个表
答案 1 :(得分:0)
您的数据库中只有一个表, 首先使用此
检查您的数据库是否已创建 private boolean checkDataBase() {
// TODO Auto-generated method stub
File dbFile = new File(DB_PATH + DB_NAME);
return dbFile.exists();
}
分析数据库使用SQlite数据库Brouser
答案 2 :(得分:0)
在我看来,更优雅的解决方案是拥有类似共享参考的东西。我想你想要这样做,所以你可以通过“用户是否第一次启动应用程序?”的方式检查某些内容。
您可以这样做:
public void firstRunPreferences(){
Context mContext = this.getApplicationContext();
mPrefs = mContext.getSharedPreferences("myAppPrefs", 0);
}
public void setRunned(){
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean("firstRun", false);
editor.commit();
}
public boolean getFirstRun(){
return mPrefs.getBoolean("firstRun", true);
}
第一种方法可以获取应用程序的sharedPreferences实例,而第二种方法可以操作并添加一个布尔值。
您可以在任何您喜欢的位置调用该方法(例如,在您首次实例化DB Helper类时,使用dbCreated替换setRunned。)
祝你好运!
答案 3 :(得分:0)
我认为这对PATH-Question有帮助。在以下教程中找到:http://www.vogella.com/articles/AndroidSQLite/article.html#sqliteoverview “访问SQLite数据库涉及访问文件系统。这可能很慢。因此建议异步执行数据库操作,例如在AsyncTask类中。
如果您的应用程序创建了数据库,则此数据库默认保存在目录DATA / data / APP_NAME / databases / FILENAME中。
上述目录的各个部分是根据以下规则构建的。 DATA是Environment.getDataDirectory()方法返回的路径。 APP_NAME是您的应用程序名称。 FILENAME是您在数据库的应用程序代码中指定的名称。 “
因此,一个db在die文件系统中存在一个文件。那是/data/data/package.name/databases。 package.name是应用程序的包名。数据库是数据库的名称。