这是一个简单的!然而,我错过了一些东西.请帮帮我.在这里,我试图通过id获取值,但不能这样做.即使在更改id的值后,它也会返回相同的值.
db = openOrCreateDatabase("DBSOURCE", 0, null);
Cursor cursorc = db.rawQuery("SELECT * FROM LIST WHERE ID="+id+"", null);
cursorc.moveToFirst();
int NameID = cursorc.getColumnIndex("Name");
int mobilenumberID = cursorc.getColumnIndex("MoblieNumber");
edName.setText(cursorc.getString(NameID));
edMobNum.setText(cursorc.getString(mobilenumberID));
cursorc.close();
db.close();
Run Code Online (Sandbox Code Playgroud) 我在本网站上搜索了与此相关的各种问题,但我无法解决我得到的问题.
我想点击listview项目从数据库中获取id
这是我的类别类:
package com.example.reminders;
import java.util.List;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class Categories extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DBAdapter db = new DBAdapter(Categories.this);
db.open();
List<String> cs = db.getAllCategoriesList();
setListAdapter(new ArrayAdapter<String>(this, R.layout.activity_categories,cs));
ListView listView = getListView();
listView.setTextFilterEnabled(true);
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the …Run Code Online (Sandbox Code Playgroud) 从SQLite数据库加载10,000行到内存的最快方法是什么?每行有1个文本和4个整数.目前,我这样做:
while(!cursor.isAfterLast()) {
cursor.copyStringToBuffer(column_index_1, buffer);
cursor.copyStringToBuffer(column_index_2, buffer);
cursor.copyStringToBuffer(column_index_3, buffer);
cursor.copyStringToBuffer(column_index_4, buffer);
cursor.copyStringToBuffer(column_index_5, buffer);
cursor.moveToNext();
}
Run Code Online (Sandbox Code Playgroud)
Galaxy Nexus上面的代码大约需要750毫秒.在较旧的设备上,它可能会慢几倍.我可以加快速度吗?
(此时,你可能会输入类似"为什么需要将行加载到内存中?"这有点复杂但我可以尝试解释一下是否有人感兴趣.编辑:这是解释:https:// gist .github.com/fhucho/af355d56ae3145e3e30f)
我试图一次在android sqlite数据库中插入100000条记录.我正在使用以下两种不同的方法.
private void bulkInsertDataBySavePoint(final List<User> users) {
log.debug("bulkInsertDataBySavePoint()");
DatabaseConnection conn = null;
Savepoint savepoint = null;
try {
conn = userDao.startThreadConnection();
savepoint = conn.setSavePoint("bulk_insert");
for (User user : users) {
userDao.create(user);
}
} catch (SQLException e) {
log.error("Something went wrong in bulk Insert", e);
} finally {
if (conn != null) {
try {
conn.commit(savepoint);
userDao.endThreadConnection(conn);
} catch (SQLException e) {
log.error("Something went wrong in bulk Insert", e);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
和
private void bulkInsertDataByCallBatchTasks(final List<User> users) { …Run Code Online (Sandbox Code Playgroud) 我正在制作一个应用程序,我想保存用户的联系人详细信息.但每当我尝试插入或选择一些值我得到一个错误.
DataBasae代码
public class ContactsDatabase extends SQLiteOpenHelper {
private static final int dbVersion = 1;
private static final String dbName = "HSsuraksha";
private static final String tableName = "contactsDetails";
private static final String contactId = "contactId";
private static final String groupId = "groupId";
private static final String groupGroupId = "groupId";
private static final String groupTable = "groupDetails";
private static final String contactName = "contactName";
private static final String contactNumber = "contactNumber";
private static final String createTable = "Create Table " …Run Code Online (Sandbox Code Playgroud)
11-27 03:32:04.471: E/AndroidRuntime(23137): Caused by: android.database.sqlite.SQLiteException: near "order": syntax error (code 1): , while compiling: create table order (_id integer primary key autoincrement, origin text not null, quantity integer not null);
MyDatabase类:
public class MyDatabase extends SQLiteOpenHelper {
public static final String TABLE_NAME = "order";
public static final String TABLE_ID = "_id";
public static final String TABLE_ORIGIN = "origin";
public static final String TABLE_QUANTITY = "quantity";
private static final String DATABASE_NAME = "Appple.db";
private static final int DATABASE_VERSION = 1; …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我调用了一些Web服务来更新数据库。每个Web服务调用都是在特定线程中进行的,从而导致多个线程“一次”更新数据库对象。
在每个线程中,我都使用类似的事务:
Thread 1 (webservice 1)
beginTransaction()
insert a row in the table 1
update a row in the table 1
endTransaction()
Thread 2 (webservice 2)
beginTransaction()
update a row in the table 2
update a row in the table 2
endTransaction()
Run Code Online (Sandbox Code Playgroud)
但是我遇到一个问题,在谷歌搜索后我无法回答自己。由于事务是在不同的线程中处理的,它们是否彼此不同?换句话说,数据库使用的是单独的“声明堆栈”还是公共的?
从我的阅读中,我了解到事务在同一堆栈中,即在线程1中提交事务可能会提交表2上的更新。例如,我认为可能发生的DB语句堆栈:
beginTransaction() //Thread 1 begins a transaction
insert a row in the table 1
update a row in the table 1
beginTransaction() //Thread 2 begins a transaction
update a row in the table 2
update a row …Run Code Online (Sandbox Code Playgroud) 我正面临这个sqlite问题,我试图通过以下查询提取具有电话号码的联系人:
Cursor cursor = context.getContentResolver().
query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.PHOTO_URI
},
ContactsContract.Contacts.HAS_PHONE_NUMBER + ">?",
new String [] {"0"},
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"
);
Run Code Online (Sandbox Code Playgroud)
问题是,如果联系人有超过1个电话号码,结果将采用以下形式:
id: 451, name: Maria, photoUri: null, has_phone_number: 1, phone_number: 0700 000 000
id: 451, name: Maria, photoUri: null, has_phone_number: 1, phone_number: 0800 000 000
id: 451, name: Maria, photoUri: null, has_phone_number: 1, phone_number: 0900 000 000
Run Code Online (Sandbox Code Playgroud)
由于重复数据,这是不合需要的.
我想只对数据库进行一次查询,希望可以写入以返回结果,如下所示:
id: 451, name: Maria, photoUri: null, has_phone_number: 1, phone_number: 0700 000 000, …Run Code Online (Sandbox Code Playgroud) 我想检索系统中当前活动的所有地理围栏的列表。
我有一个列表视图,其中有一个滑块按钮可以打开和关闭每个Geofence
我的问题是,如果没有触发地理围栏并且过期时间已经过去,那么我就无法更新GUI。在调用setExpirationDuration()方法后android自动删除地理围栏时,有什么方法可以获取回调?
我尝试使用数据库来跟踪地理围栏的持续时间和状态(无论是否在系统中),但是当用户重新启动电话时,所有地理围栏都未注册,因此我的应用程序显示地理围栏已注册(因为我尚未注册)即使没有活动的地理围栏,也不会更新数据库。
我尝试在到期时间过去后安排更新GUI的作业,但是如果系统重新启动,此方法也会失败。
有什么办法可以在系统重新启动时运行一些代码,以便可以对数据库进行更改?
谢谢。
直到Android P一切都运行良好我的代码,但现在在Android P我在使用数据库时遇到了很多问题.
我有.db sqlite数据库文件存储在assets文件夹中.我正在将它们导入android的数据库空间,它工作正常,直到Android P.在android P中我得到了这个异常:SQLite: No Such Table Error
我在这里搜索并找到了这个,我试着应用接受的答案: Android P - 'SQLite:没有这样的表错误'从资产复制数据库后
问题是,现在我遇到了另一个问题,但仍然无效.现在我遇到的问题是,每当我尝试检查数据库是否已存在时,此代码始终返回true,因此我从不创建数据库.即使最近安装了应用程序,即使未创建数据库,也是如此:
private boolean checkIfDBExists() {
File dbFile = new File(DB_COMPLETE_PATH);
return dbFile.exists();
}
Run Code Online (Sandbox Code Playgroud)
我的源代码是之前引用的stackoverflow问题中接受的答案的源代码.
新的Android P需要获取数据库路径的方法:
public static String getDatabasePath(String fileNname){
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(ApplicationContextProvider.getContext(), fileNname);
SQLiteDatabase database = helper.getReadableDatabase();
String path = database.getPath();
database.close();
return path;
}
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
public MySQLiteOpenHelper(Context context, String databaseName) {
super(context, databaseName, null, 2);
}
@Override
public void onCreate(SQLiteDatabase db) …Run Code Online (Sandbox Code Playgroud) sqlite android android-sqlite android-database android-9.0-pie