我正在开发一个小型Android应用程序,该应用程序维护着一个小工具数据库,并将其借给其他人。
作为应用程序的一部分,我正在整合一个sqllite数据库,在执行查询后执行查询和使用游标时遇到了一些麻烦。
有问题的代码如下:
String COLUMN_NAME = "toolName";
String[] columns = { COLUMN_NAME };
String selection = COLUMN_NAME + " =?";
String[] selectionArgs = {tool};
Cursor cursor = mToolDb.query(ToolStatisticContract.ToolStatisticEntry.TABLE_NAME, columns,
selection, selectionArgs, null, null, null, null);
return Integer.parseInt(cursor.getString(3));
数据库的合同如下:
public class ToolStatisticContract {
public static final class ToolStatisticEntry implements BaseColumns {
public static final String TABLE_NAME = "tooltable";
public static final String COLUMN_TOOL_NAME = "toolName";
public static final String COLUMN_LIFESPAN = "lifespan";
public static final String COLUMN_USAGE = "usageTime";
}
}
我基本上试图从COLUMN_USAGE中提取出值,这似乎在将值解析为整数时会产生错误。 COLUMN中的值实际上是一个整数,类型为前一段代码中的String,所以我很确定错误包含在上面的代码片段中。
再次感谢您的帮助!
答案 0 :(得分:1)
有问题的代码如下
net SQL语句类似于:
private void Form1_Load(object sender, EventArgs e)
{
listBox1.DrawMode = DrawMode.OwnerDrawFixed;
}
并且没有索引为3的列,因为您只返回1列。
你需要:
ul {
display: flex;
justify-content: space-between
}
(SELECT toolName FROM tooltable WHERE toolName = ?
)usageTime
移至有效行(因为它最初位于第一行之前)COLUMNS
对齐的值Cursor
传递给getInteger()
答案 1 :(得分:0)
您可以使用以下内容。这使用 null
而不是列,这将获得所有列(即解析为SELECT * FROM table
)。它会检查是否已返回一行,然后才会尝试获取数据。它还会关闭光标(完成后应该关闭光标)。它使用cursor.getInt()
来获取整数值,而不是将其从字符串转换为int。它假设您只获得1行(如果没有行则返回0 )。
int returnvalue = 0;
String COLUMN_NAME = "toolName";
String[] columns = { COLUMN_NAME };
String selection = COLUMN_NAME + " =?";
String[] selectionArgs = {tool};
Cursor cursor = mToolDb.query(ToolStatisticContract.ToolStatisticEntry.TABLE_NAME, null,
selection, selectionArgs, null, null, null, null);
if (cursor.getCount() > 0) {
cursor.moveToFirst();
returnvalue = cursor.getInt(2);
//or returnvalue = Integer.parseInt(cursor.getString(2));
}
cursor.close();
return returnvalue;
注意!我没有检查过这只是从内存中编码,所以为这个奇怪的错误道歉。
要使用特定列执行上述操作,您可以使用: -
String COLUMN_NAME = "toolName";
String[] columns = { COLUMN_USAGE };
String selection = COLUMN_NAME + " =?";
String[] selectionArgs = {tool};
Cursor cursor = mToolDb.query(ToolStatisticContract.ToolStatisticEntry.TABLE_NAME, columns,
selection, selectionArgs, null, null, null, null);
在这种情况下,列索引将为0(即索引是根据游标中的列)。但是,使用它可能更好,下面根据列的名称获取列索引: -
cursor.getInt(cursor.getColumnIndex(COLUMN_USAGE);
答案 2 :(得分:0)
从数据库中读取单个值的最简单方法是使用helper function,以避免必须处理游标对象:
String query = "SELECT usageTime FROM tooltable WHERE toolName = ?";
String[] selectionArgs = { tool };
long returnvalue = DatabaseUtils.longForQuery(mToolDb, query, selectionArgs);