我正在尝试优化我的Sqlite查询的性能.
我想知道是否有任何方法可以找到每个Sqlite语句的执行时间,或者是否有任何工具允许在Android SDK中查看语句执行时间?
虽然我熟悉查询计时器.timer On和.timer show命令.
例:

任何答案都真的很感激!
我正在使用本教程在我的Android项目中实现SQLite功能.
我有这个SQLiteOpenHelper代码:
public class HHSSQLiteHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "HHS.db";
private static final String TABLE_VENDORS = "vendors";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_VENDORID = "vendorId";
public static final String COLUMN_COMPANYNAME = "companyName";
public HHSSQLiteHandler(Context context, String vendor,
SQLiteDatabase.CursorFactory factory, int company) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}
. . .
Run Code Online (Sandbox Code Playgroud)
...但尝试以这种方式实例化该类:
protected void onPostExecute(String result) {
try {
JSONArray jsonArr …Run Code Online (Sandbox Code Playgroud) 我ListView在我的应用程序中,用户可以添加/删除项目.我正在使用SQLiteDatabase应用程序未使用时存储项目但是,SQLiteDatabase给我一个奇怪的错误说"No such table found:subjects(code 1).我无法弄清楚为什么会发生这种情况,我以前曾经使用SQLiteDatabase过几次,但这次它只是不起作用.
这是我的代码:
SubjectsDatabase.java -
import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class SubjectsDatabase extends SQLiteOpenHelper {
private static final String SUBJECT_ID = "id";
private static final String SUBJECT_NAME = "name";
private static final String DATABASE_NAME = "subjectsDatabase";
private static final String TABLE_SUBJECTS = "subjects";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE …Run Code Online (Sandbox Code Playgroud) 我正在创建一个Android应用程序,其中包含使用sqlite数据库的注册表单和忘记密码字段后,单击忘记密码字段安全检查以显示密码与重置按钮.当我单击重置密码字段时,它显示索引1处的绑定值为null请帮我解决这个问题.点击忘记归档后,这是我的活动代码:
forgot_reset = (ButtonFlat)forgot_dialog.findViewById(R.id.dialog_button_Reset_forgot);
forgot_reset.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
String stored_sec_hint = loginDataBaseAdapter.getSinlgeEntry(dialog_seq_answer);
if(confirm_sec_hint_forgot.equals(""))
{
Toast.makeText(Login_Page.this, "Please enter your security hint to proceed", Toast.LENGTH_LONG).show();
}
else
{
if(stored_sec_hint==null)
{
Toast.makeText(Login_Page.this, "Please Enter correct security hint to proceed", Toast.LENGTH_LONG).show();
}
else
{
show_pwd.setText(stored_pass);
}
}
}
});
forgot_dialog.show();
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的数据库适配器类:
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
public class LoginDataBaseAdapter
{
static final String DATABASE_NAME = "login.db";
static final int DATABASE_VERSION …Run Code Online (Sandbox Code Playgroud) 这是我第一次尝试实现 SQLite,我遇到了一个我无法解决的常见错误。错误是
03-12 15:37:20.432: E/SQLiteDatabase(1603): Error inserting Test=test string value Entry=entry string value _id=1
03-12 15:37:20.432: E/SQLiteDatabase(1603): android.database.sqlite.SQLiteConstraintException: PRIMARY KEY must be unique (code 19)
Run Code Online (Sandbox Code Playgroud)
我对可能发生的事情有很高的理解。错误是说我的主键——对我来说是 _id——对于每个条目应该是唯一的。但据我所知,我只是想添加一个元素,我相信我已经根据我遵循的教程进行了设置。请看看我有什么,让我知道我做错了什么。提前致谢!
首先,我尝试使用以下行保存条目。我将 id 设置为 1,然后尝试在其他列中保存一些测试值
DatabaseManager.saveEntry(MainActivity.this, "1", "entry string value", "test string value");
Run Code Online (Sandbox Code Playgroud)
数据库管理器
public class DatabaseManager {
public static void saveEntry(Context context, String id, String entry, String test) {
try {
ContentValues values = getContentValuesEntryTable(id, entry, test);
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(EntryTable.CONTENT_URI, null, null, null, null);
if (cursor != null …Run Code Online (Sandbox Code Playgroud) 我想获得最后插入的行的主键值(自动增量).我搜索了S/O并找到了最后一行row_id的答案.但我需要最后插入行的值.请帮我.
谢谢
您可以将DbFlow ORM与现有SQLite数据库一起使用.这是与应用程序一起打包并在初始安装时复制(从assets文件夹)?
所以我知道有人问过类似的问题,但我找不到适合我的具体情况的东西。
我有一个创建数据库并填充数据库等的应用程序,但是我在设备上没有超级用户访问权限,所以这是我的问题。我需要使用一些值填充此数据库,然后将其导入到我的应用程序/设备中。
如果我具有root用户访问权限,则可以直接替换/data/data/com.my.application/databases文件夹中的数据库,但是由于我没有root用户访问权限,因此我需要能够导入更改后的数据库此位置并替换标准位置。
谁能帮我一些代码或如何将数据库导入此文件夹的示例?我只需要能够导入和替换现有的。
谢谢,Wihan
我正在使用 SQLite 并提供id要检索的值列表。但是,这些id值的顺序很重要,我想以相同的顺序检索记录。
例如,
SELECT
*
FROM
todos
WHERE
todos.id in ( 1, 3, 2, 4 )
Run Code Online (Sandbox Code Playgroud)
这将返回:
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
但我希望它以与提供的id值相同的顺序返回,如下所示:
1
3
2
4
Run Code Online (Sandbox Code Playgroud)
我已经看到了 MySQL 和 PostgreSQL 的答案,但没有看到 SQLite 的答案。
在我的项目中,我使用 sqlite 数据库来保存图片及其位置。尝试将数据插入我的数据库时出现此错误:
E/SQLiteLog: (20) statement aborts at 5: [INSERT INTO PHOTO VALUES(NULL,?,?,?,?)] datatype mismatch
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.tomer.finalproject, PID: 18550
android.database.sqlite.SQLiteDatatypeMismatchException: datatype mismatch (code 20)
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:786)
at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:926)
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
名为 SQLiteOpenHelper 的类中的插入方法:
public void insertData(String name, String lat, String lon, byte[] image) {
SQLiteDatabase database = getWritableDatabase();
String sql = "INSERT INTO PHOTO VALUES(NULL,?,?,?,?)";
SQLiteStatement statement = database.compileStatement(sql);
statement.clearBindings();
statement.bindString(1, name);
statement.bindString(2, lat);
statement.bindString(3, lon);
statement.bindBlob(4, image);
statement.executeInsert();
} …Run Code Online (Sandbox Code Playgroud) android-sqlite ×10
android ×9
sqlite ×6
java ×2
dbflow ×1
insert ×1
mismatch ×1
performance ×1
sql-order-by ×1
where-in ×1