如果您的应用程序需要数据库并且它带有内置数据,那么运送该应用程序的最佳方式是什么?我是不是该:
预先创建SQLite数据库并将其包含在.apk?
在应用程序中包含SQL命令并让它创建数据库并在首次使用时插入数据?
我看到的缺点是:
可能的SQLite版本不匹配可能会导致问题,我目前不知道数据库应该去哪里以及如何访问它.
在设备上创建和填充数据库可能需要很长时间.
有什么建议?关于任何问题的文档的指针将不胜感激.
我无法找到Android在SQLite数据库文件中存储数据库版本的位置.数据库版本到底存储在哪里?
如何使用String[] selectionArgs的SQLiteDatabase.query()?我希望我可以把它设置为null,因为我没有用它.我只是尝试将数据库中的整个未排序表加载到Cursor.有关如何实现这一目标的任何建议?
是永远叫做的onUpgrade方法SQLiteOpenHelper吗?如果是这样,什么时候被召唤?如果开发人员没有调用它,那为什么呢?这个功能到底发生了什么?我已经看到了删除所有表的示例,但随后评论说放弃所有表并不是你应该做的.有什么建议?
我正在创建一个应用程序,我遇到了问题Cursor.当我尝试使用此函数获取值时SQLiteDatabase,我有一个返回给Cursor我:
public Cursor fetchOption(long rowId) throws SQLException {
Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,
null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何获得该领域的价值Cursor.如果我这样做:
String a = mOptionDb.fetchOption(0).getColumnName(0).toString();
String b = mOptionDb.fetchOption(0).getColumnName(1).toString();
String c = mOptionDb.fetchOption(0).getColumnName(2).toString();
Run Code Online (Sandbox Code Playgroud)
我只获取列(_id, title, body)的名称,但不获取值.有关如何实现这一目标的任何建议?
我在我的应用程序中使用了包含多个表的数据库.我有一个XML解析器,需要在解析时将数据写入两个表.我为这两个表创建了两个数据库适配器,但现在我遇到了问题.当我使用一张桌子时,很容易:
FirstDBAdapter firstTable = new FirstDBAdapter(mycontext);
firstTable.open(); // open and close it every time I need to insert something
// may be hundreds of times while parsing
// it opens not a table but whole DB
firstTable.insertItem(Item);
firstTable.close();
Run Code Online (Sandbox Code Playgroud)
因为它是一个SAX解析器,在我看来(也许我错了),这将更好:
FirstDBAdapter firstTable = new FirstDBAdapter(mycontext);
@Override
public void startDocument() throws SAXException
{
firstTable.open(); // open and close only once
}
...
firstTable.insertItem(Item);
...
@Override
public void endDocument() throws SAXException
{
firstTable.close();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我需要将数据插入第二个表,我该怎么做?例如,如果我有第二个适配器,我认为这将是一个坏主意:
FirstDBAdapter firstTable = new FirstDBAdapter(mycontext);
SecondDBAdapter secondTable = …Run Code Online (Sandbox Code Playgroud) 我正在尝试在真实设备上调试我的应用程序,但是我收到此错误:
ERROR/AndroidRuntime(981):引起:java.lang.IllegalArgumentException:列'_id'不存在
当我在模拟器上进行测试时,不会出现错误.错误在以下代码的最后一行中给出:
adapter = new SimpleCursorAdapter(this, R.layout.list_item, c, new String[] {
DataHandlerDB.CONTACT_NAME_COL,
DataHandlerDB.CONTACT_NUMBER_COL,
DataHandlerDB.CONTACT_DURATION_COL,
DataHandlerDB.CONTACT_DATE_COL }, new int[] {
R.id.contact_name, R.id.phone_number, R.id.duration, R.id.date });
Run Code Online (Sandbox Code Playgroud)
这是我的活动:
public class MyActivity extends Activity {
private static final String LOG_TAG = "MyActivity";
private ListView listview;
private SimpleCursorAdapter adapter;
private DataHandlerDB handler;
private SQLiteDatabase db;
private OpenHelper helper;
private Cursor c;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
helper = new OpenHelper(this);
db = helper.getWritableDatabase();
helper.onCreate(db);
setBasicContent();
c.close();
}
@Override
public void onDestroy(){ …Run Code Online (Sandbox Code Playgroud) 我将SQLite数据库移动到SD卡,但有时会抛出以下异常:
android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error
Run Code Online (Sandbox Code Playgroud)
关于如何防止这种情况发生的任何建议?
我创建了一个我在Android开发平台中使用的SQLite FTS3表(target2.2并且minVersion是8).例如,我创建了如下表:
create virtual table person using fts3(first,last);
Run Code Online (Sandbox Code Playgroud)
我知道当我将数据插入此表时,我long将返回,这是插入的记录的行ID.如何从此表中获取行ID?如果我执行:
select * from person
Run Code Online (Sandbox Code Playgroud)
我得到-1了Cursor.getColumnColumnIndex("rowid");.此外,Cursor.getColumnNames()仅显示两列('first'和'last')而不是'rowid'.关于如何解决这个问题的任何建议?
我正在尝试从我的资源文件夹中复制现有数据库并对其执行一些操作.一切正常,但我的模拟器的日志文件中出现以下错误:
sqlite returned: error code = 14, msg = cannot open file at source line 25467
09-06 11:23:41.844: INFO/Database(22560): sqlite returned: error code = 14, msg = cannot open file at source line 25467
09-06 11:23:41.885: ERROR/Database(22560): sqlite3_open_v2("/data/data/com.dhani.Lazy/databases/LazyDB.sqlite", &handle, 1, NULL) failed
09-06 11:23:41.885: WARN/System.err(22560): android.database.sqlite.SQLiteException: unable to open database file
09-06 11:23:41.894: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
09-06 11:23:41.904: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1849)
09-06 11:23:41.914: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
09-06 11:23:41.914: WARN/System.err(22560): at com.dharani.LazyApple.Database.DataBaseHelper.checkDataBase(DataBaseHelper.java:72)
09-06 11:23:41.914: WARN/System.err(22560): at com.dharani.LazyApple.Database.DataBaseHelper.createDataBase(DataBaseHelper.java:47)
09-06 11:23:41.914: WARN/System.err(22560): …Run Code Online (Sandbox Code Playgroud)