- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Java 新手,只是尝试创建一个数据库。我设法创建了一个数据库,但是当我想读取这些值时,它似乎出现了错误。
这是我的设置 Activity 代码(要求设置值并将它们添加到特定 ID 的数据库中)
public class Settings extends Activity{
Button Save;
static Switch SwitchCalculations;
public static String bool;
public static List<Integer> list_id = new ArrayList<Integer>();
public static List<String> list_idname = new ArrayList<String>();
public static List<String> list_kind = new ArrayList<String>();
public static List<String> list_value = new ArrayList<String>();
static Integer[] arr_id;
static String[] arr_idname;
static String[] arr_kind;
static String[] arr_value;
public static final String TAG = "Settings";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
Save = (Button) findViewById(R.id.btnSave);
SwitchCalculations = (Switch) findViewById(R.id.switchCalcOnOff);
readData();
Save.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
writeData();
//Toast.makeText(this, "Data has been saved.", Toast.LENGTH_SHORT).show();
readData();
Save.setText("Opgeslagen");
}
});
}
public void writeData() {
int id = 1;
String idname = "switchCalcOnOff";
String kind = "switch";
boolean val = SwitchCalculations.isChecked();
String value = new Boolean(val).toString();
dbHelper_Settings dbh = new dbHelper_Settings(this);
SQLiteDatabase db = dbh.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(dbh.C_ID, id);
cv.put(dbh.C_IDNAME, idname);
cv.put(dbh.C_KIND, kind);
cv.put(dbh.C_VALUE, value);
if (dbh.C_ID.isEmpty() == true) {
db.insert(dbh.TABLE, null, cv);
Log.d(TAG, "Insert: Data has been saved.");
} else if (dbh.C_ID.isEmpty() == false) {
db.update(dbh.TABLE, cv, "n_id='1'", null);
Log.d(TAG, "Update: Data has been saved.");
} else {
Log.d(TAG, "gefaald");
}
db.close();
}
public void readData() {
dbHelper_Settings dbh = new dbHelper_Settings(this);
SQLiteDatabase db = dbh.getWritableDatabase();
List<String> list_value = new ArrayList<String>();
String[] arr_value;
list_value.clear();
Cursor cursor = db.rawQuery("SELECT " + dbh.C_VALUE + " FROM " + dbh.TABLE + ";", null);
if (cursor.moveToFirst()) {
do {
list_value.add(cursor.getString(0));
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()){
cursor.close();
}
db.close();
arr_value = new String[list_value.size()];
for (int i = 0; i < list_value.size(); i++){
arr_value[i] = list_value.get(i);
}
}
}
然后我的 dbHelper Activity 如下所示:
package com.amd.nutrixilium;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class dbHelper_Settings extends SQLiteOpenHelper{
private static final String TAG="dbHelper_Settings";
public static final String DB_NAME = "settings.db";
public static final int DB_VERSION = 10;
public final String TABLE = "settings";
public final String C_ID = "n_id"; // Special for id
public final String C_IDNAME = "n_idname";
public final String C_KIND = "n_kind";
public final String C_VALUE = "n_value";
Context context;
public dbHelper_Settings(Context context) {
super(context, DB_NAME, null, DB_VERSION);
this.context = context;
}
// oncreate wordt maar 1malig uitgevoerd per user voor aanmaken van database
@Override
public void onCreate(SQLiteDatabase db) {
String sql = String.format("create table %s (%s int primary key, %s TEXT, %s TEXT, %s TEXT)", TABLE, C_ID, C_IDNAME, C_KIND, C_VALUE);
Log.d(TAG, "onCreate sql: " + sql);
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + TABLE); // wist een oudere database versie
Log.d(TAG, "onUpgrate dropped table " + TABLE);
this.onCreate(db);
}
}
奇怪的是我在这里没有收到任何错误消息。但我使用 Log.d(TAG, text)
来检查脚本被跳过的位置,即 cursor.moveToFirst()
。
有人可以帮我解决这个问题吗?
最佳答案
在这里,与您似乎期望的相反,您实际上检查文本常量是否不为空:
if (dbh.C_ID.isEmpty() == true) {
事实并非如此:它总是包含“n_id”
我认为您的 Intent 是查找具有该 id 的记录,并根据结果插入或更新。
您应该这样做:尝试通过助手进行选择,然后按照上面的代码插入或更新。
编辑:
向你的助手添加如下内容:
public boolean someRowsExist(SQLiteDatabase db) {
Cursor cursor = db.rawQuery("select EXISTS ( select 1 from " + TABLE + " )", new String[] {});
cursor.moveToFirst();
boolean exists = (cursor.getInt(0) == 1);
cursor.close();
return exists;
}
并用它来检查数据库中是否有任何行:
if (dbh.someRowsExist(db)) { // instead of (dbh.C_ID.isEmpty() == true) {
关于java - cursor.moveToFirst 似乎被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12535203/
我正在使用 Cursor 来获取存储在我的 SQLite 数据库中的一些数据。当我的光标有数据库中的一些数据时,代码可以正常工作。但是,当 Cursor 不包含任何数据时,我在 Cursor.move
我是 Java 新手,只是尝试创建一个数据库。我设法创建了一个数据库,但是当我想读取这些值时,它似乎出现了错误。 这是我的设置 Activity 代码(要求设置值并将它们添加到特定 ID 的数据库中)
我正在尝试优化我的应用程序。我注意到 cursor.movetofirst() 方法以某种方式降低了我的代码的性能。 Cursor cursor = myDbHelper.getDayInfo(new
实现时onLoadFinished() , 它需要 moveToFirst()运行良好,但为什么在实现 bindView() 时不需要这样做?对于 CursorAdapter ?以及何时使用它? on
条件 if(C.moveToFirst()) 返回给我 false 但我不知道为什么。 void Serch(View v, Layout layout){ Uri Contacts = andr
我最近在 Play 商店中收到了一份崩溃报告,如下所示: java.lang.NullPointerException at android.database.sqlite.SQLiteCur
我总是使用下面的代码来获取所有信息 但我有疑问 c.movetoNext 导致跳过结果集的第一行 请告诉我表面背后到底发生了什么,以便我能完全理解 SQLiteDatabase db;
我正在学习 android 中的 sqlite。今天我遇到了一个代码,用于在数据库中查找特定条目并将其返回(用于显示给用户)。我对代码中发生的事情有点困惑。程序员首先调用查询方法,然后将光标移动到第一
我在这里搜索了一段时间,但没有任何帮助。我想这很简单,我在做一些愚蠢的事情。所以,我让这个 DataBaseHelper 创建一个表并在上面放两个值: public class DatabaseHel
无论在何处使用 cursor.moveToFirst(),它都会抛出以下错误,这仅发生在 小米手机 Caused by: java.lang.IllegalStateException: Proces
我是一个编程新手我在互联网上找到了这段代码,它工作正常 Cursor c=db.query(DataBase.TB_NAME, new String[] {DataBase.KEY_ROWID,Dat
我正在对数据库进行选择,cursor.moveToFirst 始终返回 false,我已经在寻找答案但一无所获。这是我的数据库函数 public List buscarListaMapa(String
下一段代码会按预期工作吗? Cursor c = db.query(tableName, requestedColumns, condition, conditionParams, n
创建标准 SQLite 游标后,我将使用以下方法遍历条目: while (cursor.moveToNext()) { } 所有行都被正确处理。我读过的所有文档都表明您需要发出 moveToFirst
我已经苦苦挣扎了几个小时,试图调试为什么即使在完全相同的数据库上完全相同的查询在 Firefox 的 SQLite 管理器中运行良好,以下删除查询实际上并没有删除任何内容: String delete
如果 cursor.moveToFirst() 返回 false,我还需要关闭它吗?因为它在光标为空时返回 false。 我怀疑正确的方法: if (cursor != null && cursor.
我正在使用 SQLite 开发一个项目。 我前一段时间确实创建了我的数据库等等,但昨天我从手机上卸载了我的应用程序并尝试通过 eclipse 再次运行它,似乎从那一刻起,它就不再工作了。 首先是代码:
这个问题在这里已经有了答案: What is a NullPointerException, and how do I fix it? (12 个答案) 关闭 5 年前。 我正在创建一个列出我手机中
我是一名优秀的程序员,十分优秀!