在Android中,是否可以使用ContentValues?将时间戳插入数据库?当我尝试使用以下内容添加它时:
ContentValues args = new ContentValues();
args.put(MY_DATE, my_date);
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,告诉我my_date需要成为一个String.有关如何实现这一目标的任何建议?
stackoverflow上有关于这个主题的问题很少,但我没有得到正确的答案.我对平面文件的性能有一些疑问,使用平面文件而不是SQLite更好吗?
我获取了Android的性能统计数据SQLite.
我有一个表有21列的性能统计信息
任何人都可以建议如何减少这个插入时间.
Records Write time in ms Read time in ms
1000 67813 608
1000 66340 604
1000 64359 609
10000 679837 5159
10000 618062 5110
10000 644638 5729
10000 646878 5890
Run Code Online (Sandbox Code Playgroud)
Flat file 没有时间而不是 SQLite
所以有人请建议我如何为SQLite改善这段时间.
我使用简单database open insert using ContentValues和数据库关闭.
请告诉我一些如何改进这些统计数据的方法.
使用下面的答案后更新了性能统计数据.我想提高这些性能.
Records Writetime in ms Readtime in ms
1000 1645 530
1000 2497 672
1000 3143 610
10000 16356 5243
10000 14006 5122
10000 13158 5002
10000 14828 5234
100000 125525 …Run Code Online (Sandbox Code Playgroud) 我正在为我当前的应用程序进行更新.我的应用程序使用SQLite DB,到目前为止我的版本1.我将需要在第二个版本中更改/引入新表.我做了我的研究,我发现要做到这一点,最好的方法是使用switch(case)语句,我以一种简化的方式对db进行更新.
我的问题是,android如何知道什么是旧版本onUpgrade()?.事实上,什么时候被召唤?.
因此,对于第一次下载我更新的应用程序的用户,我认为onUpgrade()不会被调用!android怎么会知道什么时候不打电话onUpgrade()?
请为我澄清一下.我想提交我的第一个更新,我不想失去我辛苦赚来的用户:)
我发现问题在更新应用版本后,在我上传的应用程序中找不到这样的表"table_name".我在测试后出来我只是在将旧版本的应用程序升级到新版本的应用程序之后才遇到此问题
我所实施的内容
我已经在onUpgrade()方法中完成了代码,并且还在构造函数中升级了db版本,但我无法在设备中对其进行测试.
步骤1) 将版本代码1增加到2
public databasehelper(Context context) {
super(context, DATABASE_NAME, null, 2);
this.myContext = context;
try {
createDataBase();
openDataBase();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
步骤2)将新表添加到onUpgrade()方法中
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e("onUpgrade db", ">>>>called");
switch (oldVersion) {
case 1:
db.execSQL(DATABASE_CREATE_notification_counter);
Log.e("db version", ">>>"+oldVersion);
// we want both updates, so no break statement here...
case 2:
Log.e("db version", ">>>"+oldVersion);
// I removed onCreate() method from here because new version will …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ActiveAndroid对列进行批量更新.这是我的代码:
new Update(SomeModel.class).set("Enabled = 0").execute();
Run Code Online (Sandbox Code Playgroud)
但是我得到了一个(编辑:我的不好,错误是在其他地方).有谁知道如何执行StackOverflowError.Update()查询?它在ActiveAndroid的wiki中没有说什么.
编辑:
这个语法是正确的:
new Update(SomeModel.class)
.set("Enabled = 0")
.where("Account = ?", account.getId())
.execute();
Run Code Online (Sandbox Code Playgroud)
where如果不需要,您可以跳过.
我正在使用以下代码在数据库中创建多个表.但是,我不明白为什么会出现这个问题.
private static final String TABLE_SMSFilter = "SMSFilter";
public void onCreate(SQLiteDatabase db)
{
Log.d("Test", "Control is in Oncreate()");
String CREATE_SMSSSCHEDULE_TABLE = "CREATE TABLE " + TABLE_SMSSchedule
+ "(" + KEY_ID + " INTEGER PRIMARY KEY autoincrement,"
+ KEY_NUMBER + " TEXT)";
String CREATE_PROFILE_SCHEDULE_TABLE = "CREATE TABLE "
+ TABLE_ProfileSchedule + "(" + ProfileSchedule_ID
+ " INTEGER PRIMARY KEY autoincrement,"
+ ProfileSchedule_NUMBER + " TEXT, "
+ ProfileSchedule_ProfileMode + " TEXT,"
+ ProfileSchedule_CalendarID + "INTEGER)";
String CREATE_SMS_FILTER_TABLE = "CREATE TABLE " …Run Code Online (Sandbox Code Playgroud) 我在更新数据库时遇到了一些麻烦.
这是日志:
12-02 16:18:57.502: D/Data Update(21218): Start updating databases
12-02 16:18:57.502: D/Data Update(21218): update size: 5
12-02 16:18:57.502: D/Data Update(21218): updating table cemeteries
12-02 14:28:51.877: I/SqliteDatabaseCpp(18826): sqlite returned: error code = 1802, msg = statement aborts at 13: [INSERT OR REPLACE INTO cemeteries(id,name) VALUES (?,?)] , db=/data/data/de.l_one.app.shaufelv14/databases/poidatabase
12-02 14:28:51.877: E/SQLiteStatementCpp(18826): native_execute (step): errno = 2, error message = No such file or directory, handle = 0xdc0b70
12-02 14:28:51.877: I/SqliteDatabaseCpp(18826): sqlite returned: error code = 1, msg = statement aborts at …Run Code Online (Sandbox Code Playgroud) 我试图通过在Android应用程序中已经存在且正常运行的数据库设置中实现加密来保护一些合理的数据.
我试着按照这个教程(http://sqlcipher.net/sqlcipher-for-android/)浏览了很多foruns,包括用于Cipher的google组.但是,我仍然不清楚SQLCipher如何工作以及如何调整我的代码以满足我的需求.
我下面这个实现的android系统数据库:http://www.vogella.com/articles/AndroidSQLite/#databasetutorial_database,这意味着我有SQLiteOpenHelper类的扩展和另一个类存储CRUD方法.
在这种情况下我应该如何使用SQLCipher?我应该在哪里定义密码?我应该在哪里使用loadLibs(上下文)?只在主要活动中?或者在访问数据库的每个活动中?
我觉得我差不多了,我只需要最后的推动来解决这个问题:P提前谢谢!
我的表结构是这样的,使用sqlite3
CREATE TABLE enghindi (eng TEXT,hindi TEXT)
Run Code Online (Sandbox Code Playgroud)
我有一个名为enghindi的表,其中有两列名为hindi,eng,我想合并eng列的记录,也可以用逗号分隔hindi单词
看下面的表看起来像

我想在下面看到这样的

我想用sqlite3查询做到这一点
我正在尝试根据ISBN从我的库存表中获取某些图书数据.但是,我收到一个错误:"尝试重新打开已经关闭的对象".只有当我单击一个listView对象,转到另一个屏幕,通过"finish()"返回到此页面,然后尝试单击另一个listView对象时,才会出现该错误.我提出的String searchEntries[] = InventoryAdapter.getInventoryEntriesByISBN(searchQuery, isbn[position]);从onClickListener以前的for循环之前onClickListener和现在的作品.
如果我通过"finish()"从另一个活动返回此活动后尝试getInventoryEntriesByISBN,为什么它不起作用?
SearchResultsScreen发生错误:
String searchEntries[] = InventoryAdapter.getInventoryEntriesByISBN(searchQuery, isbn[position]);
Run Code Online (Sandbox Code Playgroud)
并通过扩展,发生在InventoryAdapter:
Cursor cursor = db.rawQuery(query, new String[] {ISBN});
Run Code Online (Sandbox Code Playgroud)
SearchResultsScreen.java
// Set up search array
for(int i = 0; i < isbn.length; i++)
{
searchArray.add(new InventoryItem(isbn[i], InventoryAdapter.getTitleAndAuthorByISBN(isbn[i])));
}
Toast.makeText(getApplicationContext(), "searchArray.size()="+searchArray.size(), Toast.LENGTH_LONG).show();
// add data in custom adapter
adapter = new CustomAdapter(this, R.layout.list, searchArray);
ListView dataList = (ListView) findViewById(R.id.list);
dataList.setAdapter(adapter);
// On Click ========================================================
dataList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, …Run Code Online (Sandbox Code Playgroud)