- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我整个早上都在 StackOverflow 上尝试自学如何在 Android 应用程序上对我上传的 SQLite 数据库进行查询。我尝试过原始查询和直接查询,但到目前为止都没有奏效。这是代码:
public Product getProduct(int id) {
db = this.getReadableDatabase();
// new String[] { COLUMN_ID, COLUMN_PRODUCT_NAME, COLUMN_SIZE, COLUMN_HP,
// COLUMN_CATEGORY, COLUMN_POWER_TYPE, COLUMN_EXP_PROOF, COLUMN_RPM,
// COLUMN_PSI, COLUMN_GPM, COLUMN_PRICE},
// Cursor cursor = db.query(
// TABLE_NAME,
// null,
// COLUMN_ID + " = ?",
// new String[] { Integer.toString(id)},
// null, null, null, null);
String strquery = "SELECT * FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + "=" + id;
Cursor cursor = db.rawQuery(strquery, null);
Product product = new Product();
if (cursor.moveToFirst()) {
product.setID(cursor.getInt(0));
product.setName(cursor.getString(1));
product.setSize(cursor.getDouble(2));
product.setHp(cursor.getDouble(3));
product.setCategory(cursor.getString(4));
product.setPowerType(cursor.getString(5));
product.setExplosionProof(cursor.getInt(6));
product.setRPM(cursor.getInt(7));
product.setBypassPSI(cursor.getInt(8));
product.setGPM(cursor.getInt(9));
product.setPrice(cursor.getDouble(10));
cursor.close();
}
db.close();
return product;
}
注释掉的字段是我之前尝试过的查询,但都不起作用。
这是我的常量:
private static final String TABLE_NAME = "Products";
private static final String COLUMN_ID = "'_id'";
/image/5YiZr.png^ 这是我正在使用的数据库屏幕截图的链接。
我调试它时的问题是它永远不会进入if循环,并且mCount始终为-1。我已经做了很多研究,但我仍然对此感到沮丧。谢谢
[编辑}
这是我的数据库代码
public class SQLiteHelper extends SQLiteOpenHelper {
private SQLiteHelper sInstance;
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "ProductList.db";
private SQLiteDatabase db;
private final Context myContext;
private String databasePath = "";
public SQLiteHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.myContext = context;
databasePath = context.getDatabasePath(DATABASE_NAME).getPath();
}
private static final String TABLE_NAME = "Products";
private static final String COLUMN_ID = "'_id'";
private static final String COLUMN_PRODUCT_NAME = "'Name'";
private static final String COLUMN_SIZE = "'Size'";
private static final String COLUMN_HP = "'HP'";
private static final String COLUMN_CATEGORY = "'Category'";
private static final String COLUMN_POWER_TYPE = "'PowerType'";
private static final String COLUMN_EXP_PROOF = "'ExpProof'";
private static final String COLUMN_RPM = "'RPM'";
private static final String COLUMN_PSI = "'PSI'";
private static final String COLUMN_GPM = "'GPM'";
private static final String COLUMN_PRICE = "'Price'";
public void createDataBase() throws IOException {
boolean dbExists = checkDataBase();
if (dbExists) {
} else {
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error making database");
}
}
}
private boolean checkDataBase() {
SQLiteDatabase check = null;
try {
String path = databasePath + DATABASE_NAME;
check = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
// database doesn't exist
}
if (check != null) {
check.close();
}
return check != null;
}
private void copyDataBase() throws IOException{
InputStream myInput = myContext.getAssets().open(DATABASE_NAME);
String outFileName = databasePath + DATABASE_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length=myInput.read(buffer))>0) {
myOutput.write(buffer, 0, length);
}
// close streams
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase() throws SQLException {
//Open the database
String myPath = databasePath;
db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
@Override
public synchronized void close() {
if(db != null)
db.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
最佳答案
请检查您的这部分代码。
public void openDataBase() throws SQLException {
//Open the database
String myPath = databasePath;
db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
这里您只是使用databasePath
,我发现您已将其设置为从构造函数中的context.getDabasePath
获得的值,但查看您拥有的其他方法看起来像是在创建新的数据库路径:
private void copyDataBase() throws IOException{
InputStream myInput = myContext.getAssets().open(DATABASE_NAME);
String outFileName = databasePath + DATABASE_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length=myInput.read(buffer))>0) {
myOutput.write(buffer, 0, length);
}
// close streams
myOutput.flush();
myOutput.close();
myInput.close();
}
不确定这是否是由于从源代码复制/粘贴造成的,但这看起来像是导致您丢失数据的原因。
关于java - (初学者)SQLite 查询不会使用 MoveToNext 进入 if-loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44438456/
我正在尝试将表中的所有列查询到一个长 TextView 和/或字符串中。我知道这可能不是做事的正确方法,但我必须这样做。如果我错了,请纠正我,我的印象是下一步会得到行中的下一列: Cursor c =
//row --> 2 int row = mCursor.getCount(); for (int i = 0; i < row; i++) { if (mCursor.moveToPositio
为什么我的 Android Cursor 没有一直走到原来“promise”的末尾?? 我的 cursor.getCount() 与我上一个 cursor.getPosition() 不同。检查我的
我偶尔会看到崩溃报告: Fatal Exception: java.lang.IllegalStateException: Couldn't read row 1127, col 0 from Cur
在 Android 应用程序中,您可以使用方法 ContentResolver.query()查询 URI。结果,你得到一个 Cursor 对象,然后你只需执行 Cursor.moveToNext()
由于这个异常,我遇到了几次崩溃,但无法在我自己的任何设备/模拟器上复制它。 来自 google play console 的堆栈跟踪 android.database.CursorWindowAl
boolean android.database.Cursor.moveToNext() 文档说: http://developer.android.com/reference/android/dat
下一段代码会按预期工作吗? Cursor c = db.query(tableName, requestedColumns, condition, conditionParams, n
以下语句 cursor.moveToNext() 始终为 false。我希望循环执行一次。我测试过查询实际上返回了数据。 谁知道这是怎么回事? String query ="SELECT(SE
创建标准 SQLite 游标后,我将使用以下方法遍历条目: while (cursor.moveToNext()) { } 所有行都被正确处理。我读过的所有文档都表明您需要发出 moveToFirst
我整个早上都在 StackOverflow 上尝试自学如何在 Android 应用程序上对我上传的 SQLite 数据库进行查询。我尝试过原始查询和直接查询,但到目前为止都没有奏效。这是代码: pub
我正在我的 Sqlite 数据库中运行查询.. 我将结果保存在我的 Cursor 中,我正在遍历它以获得所有结果.. allotugh 我正在检查并看到游标有超过 1 行,它只给我第一行,因为 mov
我想知道是否可以在 moveToNext() 之前调用 getType() 和 getColumnNames()。 基本上,我正在尝试编写以下辅助函数: public static int getC
我是一名优秀的程序员,十分优秀!