所以我正在为android编写一个数据库管理器,在该类中将是一个写入该数据库表的方法.
SQLiteDatabase db = this.getReadableDatabase();
db.beginTransaction();
try {
//DO some db writing
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,如果事务没有像在try中那样设置为成功,这将自动回滚数据,但是如果它不成功我如何捕获,以便我可以通知用户成功或回滚
我有一个用自定义密码创建的字符串,它可以有任何char值(0到0xFFFF).这个字符串是通过输入明文并用伪随机值旋转每个字符来创建的,所以我无法控制输出字符的含义.
我可以安全地存储和检索这个没有任何问题的SQLiteDatabase TEXT字段吗?
我认为Java使用UTF-16,所以我有点害怕像字符的NULL,END OF TEXT,ESCAPE,',",0xfeff / 0xfffe (BOM)出现在随机的地方到我的字符串等,我真的不知道SQLite的怎么会在内部存储这一点.如果它使用任何基于文本的标记来确定字段的开始和结束,我担心这会失败.
理想情况下,我想要退回我输入的完全相同的字符序列,以便我可以通过反向密码.
我将使用托管insert(ContentValues)方法SqLiteDatabase,所以我认为这将解决有关转义输入字符串的任何问题,但我仍然不相信这可以工作.
这是一个安全的操作,如果没有,我还应该做什么来存储我的加密字符串?
新线程.SQL新手.获取联系信息的新手.所以我当然迷路了.如果我正确地读取这个logcat,它告诉我:列数据1不存在,或者我正在寻找错误的信息.不幸的是,这是一个"从我的错误中学习"的学习之路,我无法想象这一点.很感谢任何形式的帮助.
这里的目标是获取联系人的姓名,电话号码和电子邮件(按联系人ID匹配信息).
日志:
06-22 21:15:44.700: E/AndroidRuntime(1662): FATAL EXCEPTION: Thread-120
06-22 21:15:44.700: E/AndroidRuntime(1662): java.lang.IllegalArgumentException: Invalid column data1
06-22 21:15:44.700: E/AndroidRuntime(1662): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167)
06-22 21:15:44.700: E/AndroidRuntime(1662): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
06-22 21:15:44.700: E/AndroidRuntime(1662): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
06-22 21:15:44.700: E/AndroidRuntime(1662): at android.content.ContentResolver.query(ContentResolver.java:372)
06-22 21:15:44.700: E/AndroidRuntime(1662): at android.content.ContentResolver.query(ContentResolver.java:315)
06-22 21:15:44.700: E/AndroidRuntime(1662): at sat.tuts4mobile.customlistview.ContactDetails$1.run(ContactDetails.java:53)
06-22 21:15:44.700: E/AndroidRuntime(1662): at java.lang.Thread.run(Thread.java:856)
Run Code Online (Sandbox Code Playgroud)
代码(它提取联系人ID 0的信息):
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.TextView;
/**
* Created by Pete on 6/19/13.
*/
public class ContactDetails extends Activity {
TextView …Run Code Online (Sandbox Code Playgroud) 我正在创建一个应用程序,我在表中插入数据.在表中插入数据后,我想得到该行的id,以便我可以根据它进行进一步的操作.我试图使用sqlite的last_insert_rowid()函数,但没有找到运气.任何人都可以告诉哪个是最后一个插入行id的最佳方法.任何想法都表示赞赏.提前致谢.
我在Android SQLite DB中工作.我正在将它从版本1升级到版本2.该onUpgrade方法按预期调用.
我的代码:
sqLiteDatabase.execSQL("ALTER TABLE " + Contracts.DateActivities.TABLE_NAME + " ADD COLUMN " + Contracts.DateActivities.C_GROUP + " INTEGER DEFAULT 0;");
Run Code Online (Sandbox Code Playgroud)
我一直得到同样的错误:
Caused by: android.database.sqlite.SQLiteException: near "group": syntax error (code 1): , while compiling: ALTER TABLE DateActivities ADD group INTEGER DEFAULT 0
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我试过的其他变化:
sqLiteDatabase.execSQL("ALTER TABLE " + Contracts.DateActivities.TABLE_NAME + " ADD COLUMN " + Contracts.DateActivities.C_GROUP + " INTEGER DEFAULT 0;");
sqLiteDatabase.execSQL("ALTER TABLE " + Contracts.DateActivities.TABLE_NAME + " ADD COLUMN " + Contracts.DateActivities.C_GROUP + " int DEFAULT 0;"); …Run Code Online (Sandbox Code Playgroud) 目前我有一个创建两种模型的应用程序(我们称之为A和B).
A与B具有1:N的关系,现在我在掌上电脑和可穿戴设备中都有一个数据库来存储这些模型.
问题是,我需要同步这两个数据存储,我不完全确定如何实现这一点.我看过许多文档引用了dataApi,他们建议你将数据保存在DataItem对象中,每次磨损连接时都会同步.
我对这种方法不是100%肯定的是:
关于这个主题的文档目前似乎有点缺乏,所以我不确定DataApi是否是我需要的正确实现,或者我是否必须在消息中将原始数据发送到同步数据库.
任何人都可以告诉我这是什么.我在数据库中添加数据时出现此错误.它只发生在一个特定的行上.我试着通过互联网找到答案或理由.但是徒劳无功 截图

public void FunSetVisitorDetails(String strResult) {
Log.d(TAG, "Get Visitor Details started.");
if (!strResult.equalsIgnoreCase("NA") && !strResult.equalsIgnoreCase("NI")) {
SQLiteDatabase database = getWritableDatabase();
database.delete("TBL_VISITOR_MASTER", null, null);
String[] strResultData = strResult.split("#");
for (int index = 0; index < strResultData.length; index++) {
String[] strRowData = strResultData[index].split(",");
ContentValues values = new ContentValues();
values.put("VISITORID", strRowData[0]);
values.put("MEMBERID", strRowData[1]);
values.put("TEAMID", strRowData[2]);
values.put("CATEGORY", strRowData[3]);
values.put("NAME", strRowData[4]);
values.put("COMPNAME", strRowData[5]);
values.put("SPECIALIZED1", strRowData[6]);
values.put("SPECIALIZED2", strRowData[7]);
values.put("SPECIALIZED3", strRowData[8]);
values.put("SPECIALIZED4", strRowData[9]);
values.put("SPECIALIZED5", strRowData[10]);
values.put("CLIENT1", strRowData[11]);
values.put("CLIENT2", strRowData[12]);
values.put("CLIENT3", strRowData[13]);
values.put("CLIENT4", strRowData[14]);
values.put("CLIENT5", strRowData[15]);
values.put("ASK", …Run Code Online (Sandbox Code Playgroud) 我的查询执行时间<3毫秒.但问题是,我正在从查询执行中获得的游标中创建一个pojo类对象.此字段的对象创建和设置值花费的时间超过140毫秒.Pojo类有大约36个字段.有任何建议可以解决这个问题.
谢谢
performance android database-performance android-sqlite android-recyclerview
自Java从1.7开始引入该语句以来,我就采用了以下规则来编写与光标相关的语句,如下所示:
try (Cursor cursor = context.getContentResolver().query(queryAccountUri, null, null, null, null)) {
if (cursor != null && cursor.moveToFirst()) {
entry.userId = cursor.getString(0);
entry.account = cursor.getString(1);
entry.phone = cursor.getString(2);
entry.nickName = cursor.getString(3);
entry.icon = cursor.getString(4);
}
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但是,这些天,我们的测试人员不断通知我,该语句在运行猴子测试时仍然导致内存泄漏,或者如果对此方法进行循环测试,甚至会耗尽所有内存。cursor由于某些NOT CLOSING问题,所有日志文件都表明该对象是凶手。因此,我必须更改代码以cursor手动关闭对象,如下所示:
try {
if (cursor.moveToFirst()) {
entry.userId = cursor.getString(0);
entry.account = cursor.getString(1);
entry.phone = cursor.getString(2);
entry.nickName = cursor.getString(3);
entry.icon = cursor.getString(4);
}
} catch (NullPointerException e) {
e.printStackTrace();
} finally {
try …Run Code Online (Sandbox Code Playgroud) 在活动A中,我正在加载一个包含我表中所有值的列表,并设置了一个setOnItemClickListener来启动活动B并通过发送数据发送带有所选项的id [ 1 ] 的uri
[ 1 ]
Uri currentTestUri = ContentUris.withAppendedId(TestEntry.CONTENT_URI, id);
在活动B中,我的onCreateLoader包含投影:
String[] projection = {
TestEntry._ID,
TestEntry.COLUMN_TEST_ONE,
TestEntry.COLUMN_TEST_TWO}
Run Code Online (Sandbox Code Playgroud)
...带有return语句
return new CursorLoader(this,
mCurrentTestUri, //Got this from Activity A
projection,
null,
null,
null);
Run Code Online (Sandbox Code Playgroud)
我的onLoadFinished看起来像这样:
if (cursor.moveToFirst()) {
int oneColumnIndex = cursor.getColumnIndex(TestEntry.COLUMN_TEST_ONE);
int twoColumnIndex = cursor.getColumnIndex(TestEntry.COLUMN_TEST_TWO);
String currentOne = cursor.getString(oneColumnIndex);
String currentTwo = cursor.getString(twoColumnIndex);
textViewOne.setText(currentOne);
textViewTwo.setText(currentTwo);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,现在我希望显示下一行(右下方)的值,但是使用不同的投影(我只需要_ID和COLUMN_TEST_ONE)并且onLoadFinished显示COLUMN_TEST_ONE的值textViewThree.
[两行的值应该同时显示,而不是一个或另一个]
我可以使用[ …
sqlite android android-cursorloader android-loader android-sqlite
android-sqlite ×10
android ×8
java ×2
sqlite ×2
cordova ×1
cursor ×1
lastinsertid ×1
performance ×1
wear-os ×1