-1

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

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;

}
4

1 回答 1

0

应该是这个

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中的方法已定义为

公共游标查询(字符串表、字符串 [] 列、字符串选择、字符串 [] 选择参数、字符串 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 要编译查询的表名。

columns 要返回的列的列表。传递 null 将返回所有列,不鼓励这样做以防止从存储中读取不会使用的数据。

selection 一个过滤器,声明要返回哪些行,格式化为 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 将使用默认排序顺序,可能是无序的。

于 2013-05-17T16:51:23.663 回答