当前位置: 首页 > 面试题库 >

在Android上无法从sqlite db获取任何数据

尹承业
2023-03-14
问题内容

我有一个执行此功能的数据库助手:

public Cursor getCourseNames() throws SQLException {
    mDb = mDbHelper.getReadableDatabase();

    return mDb.query("Course",null, COURSE_ROWID, null, null, null, null, null); 
}

它从中提取的表如下所示:

private static final String COURSE_ID = "CourseID";
private static final String COURSE_NAME = "Name";
private static final String COURSE_CODE = "CourseCode";
private static final String COURSE_ROWID = "_id";


private static final String COURSE_CREATE =
    "create table " +
    "Course" + " ( " + 
    COURSE_ROWID + " integer primary key autoincrement, " +
    COURSE_ID + "integer not null," +
    COURSE_NAME + "text not null, " +
    COURSE_CODE + "text not null" + ");";

在我的主要活动中,我尝试这样做并得到一个空指针…

public void buildCoursetoChapterList(){

    Cursor cursor = dbHelper.getCourseNames();
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(MainActivity.this, android.R.layout.simple_list_item_1, cursor, null, null);

    ListView listView = (ListView) findViewById(R.id.list);

    listView.setAdapter(adapter);
}

有人知道我的问题是什么吗?我在较早的时候将数据放入数据库:

if(dbHelper.checkCourseForData() !=null)
{
    setContentView(R.layout.classlist);
}
else
{
    dbHelper.addFirstClassToDb(course_code, name, course_id);
    Log.d+i("Course added to DB", course_code + " " + name + " " + course_id);
}

尝试了一下,仍然没有,我想选择“课程”中的所有“名称”值。没头绪…失去希望。

public Cursor checkCourseForData() throws SQLException {
    String[] values = {COURSE_NAME};
    Cursor mCursor = mDb.query("Course",values,COURSE_ROWID + "=" + "Name", null, null, null, null, null); 
    if (mCursor != null) { mCursor.moveToFirst(); }

    return mCursor;

}

问题答案:

应该是这个

public Cursor getCourseNames() throws SQLException {
    String[] values = {COURSE_NAME};
    mDb = mDbHelper.getReadableDatabase();

    return mDb.query("Course",values,COURSE_ROWID, null, null, null, null, null); 
}

说明:

api中的方法已定义为

公共游标查询(字符串表,字符串[]列,字符串选择,字符串[] selectionArgs,字符串groupBy,具有字符串,字符串orderBy)

因此,您需要相应地传递字符串。

用户以我的示例为参考,它对我有用

    private String name;
private String Events_Table = "events";
private String[] Columns = {"_id", "Name", "Date", "Time_Slot", "Venue", "Details", "EHName", "EHNumber"} ;
private String WhereClause = Columns[1]+"=?" ;

    Cursor cursor = db.query(Events_Table, Columns, WhereClause, new String[] {name}, null, null, null);

考虑阅读此

参量

table 用于编译查询的表名。

返回哪些 的列表。传递null将返回所有列,不建议这样做,以防止从不会使用的存储中读取数据。

选择 声明返回哪些行的过滤器,格式为SQL WHERE子句(不包括WHERE本身)。传递null将返回给定表的所有行。

selectionArgs 您可以在选择中包括?s,这些值将被selectionArgs中的值替换,以便它们出现在选择中。这些值将绑定为字符串。

groupBy 声明如何对行进行分组的过滤器,格式为SQL GROUP BY子句(不包括GROUP
BY本身)。传递null将导致行不被分组。具有过滤器,以声明要包含在游标中的行组(如果正在使用行分组),其格式设置为SQL
HAVING子句(不包括HAVING本身)。传递null将导致包括所有行组,并且在不使用行分组时是必需的。

orderBy 如何对行进行排序,格式为SQL ORDER BY子句(不包括ORDER
BY本身)。传递null将使用默认的排序顺序,该顺序可能是无序的。



 类似资料:
  • 我使用spring boot,带有jpa和hibernate 原因:org.hibernate.QueryException:查询指定的联接提取,但提取的关联的所有者不在选择列表[FromElement{explicit,not a collection join,fetch join,fetch non-lazy属性,ClassAlias=sp,Role=Com.lcm.Model.Sample

  • 我一直在尝试使用nativescript创建一个android应用程序。我正在使用fetch模块从服务器获取响应。当我试图从httpbin获得响应时。org/get,没关系。但当我试图从本地服务器获取响应时,网络请求失败。错误 发送到httpbin。组织/获取- 发送到本地主机:8000/api- 当我尝试从纯节点中的localhost:8000/api获取响应时。js通过请求模块。它工作得很好。

  • 问题内容: 每个人,我都试图制作一个音乐应用程序,为此,我在自己的作品中创建了一个Horizo​​ntal ,而我的Horizo​​ntal 正在获取带有艺术家姓名的图像。 但是单击后,我加载了另一个活动。在我的其他活动,我试图在从火力加载SongsData 用。 但是问题是我没有从Firebase获取数据,而是返回了空数据。我在下面提供了我的代码,这是我的Firebase数据库的屏幕截图:-Sc

  • 我正在React中的useEffect()内尝试从axios获取数据。我测试了后端,它工作正常,但在前端,我得到了一个错误401(未经授权) 反应代码: 后端代码: 服务器.js 项目路线.js 我得到的错误是: 如果有人能帮我找出错误,我会很高兴的

  • 这是我收到的错误: 请求的资源上不存在“< code > Access-Control-Allow-Origin ”标头。因此,不允许访问源“https://s.codepen.io”。如果不透明响应满足您的需要,请将请求的模式设置为' < code>no-cors ',以便在禁用cors的情况下获取资源。 我将模式设置为但仍然没有运气。

  • 问题内容: 在Android中,是否有任何方法可以获取静态方式的应用程序上下文?例如,从后台线程检索它。 谢谢 问题答案: 最简单(也是正确的)方法是: 定义一个新类 然后,在清单中需要将此类添加到“应用程序”选项卡的“名称”字段中。或编辑xml并放入 然后可以从任何地方打电话 希望能帮助到你