Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将SQLite查询结果存储在字符串数组中_Android_Sql_Sqlite_Listview_Android Sqlite - Fatal编程技术网

Android 将SQLite查询结果存储在字符串数组中

Android 将SQLite查询结果存储在字符串数组中,android,sql,sqlite,listview,android-sqlite,Android,Sql,Sqlite,Listview,Android Sqlite,如何将查询结果保存在字符串数组中? 查询很简单,只有一列,即: SELECT NAME FROM MYTABLE 我想要的是将ID存储在字符串数组中,这样我就可以在列表视图中将它们显示为可单击的项 String selectQuery = "SELECT * FROM table"; try { Cursor cursor = db.rawQuery(selectQuery, null); ArrayList<String

如何将查询结果保存在字符串数组中?
查询很简单,只有一列,即:

SELECT NAME FROM MYTABLE
我想要的是将ID存储在字符串数组中,这样我就可以在
列表视图中将它们显示为可单击的项

String selectQuery = "SELECT  * FROM table";
        try {
            Cursor cursor = db.rawQuery(selectQuery, null);
            ArrayList<String> ids = new ArrayList<>();
            // looping through all rows and adding to list
            if (cursor.moveToFirst()) {
                do {
                    String id = cursor.getString(cursor.getColumnIndex(KEY_ID));
                    ids.add(id);
                } while (cursor.moveToNext());
            }
            cursor.close();
        } catch (Exception e) {
            e.printStackTrace();

        }
String selectQuery=“从表中选择*”;
试一试{
Cursor Cursor=db.rawQuery(selectQuery,null);
ArrayList ID=新的ArrayList();
//循环遍历所有行并添加到列表
if(cursor.moveToFirst()){
做{
字符串id=cursor.getString(cursor.getColumnIndex(KEY_id));
添加(id);
}while(cursor.moveToNext());
}
cursor.close();
}捕获(例外e){
e、 printStackTrace();
}

假设您已经对一个对象执行了查询,并收到了一个返回值,您可以遍历光标并将每一行的值保存到
字符串[]
数组中,如下所示:

String[] names;
if (cursor.moveToFirst()) {
    names = new String[cursor.getCount()];
    int colIndex = cursor.getColumnIndex("NAME");
    do {
        names[cursor.getPosition()] = cursor.getString(colIndex);
    } while (cursor.moveToNext());
}

请记住,如果没有返回任何行,
names
null
,因此请确保执行空检查。

在SQLiteOpenHelper类中创建以下方法

public List<String> getAllNames() {
    List<String> retData = new ArrayList<String>();
    String selectQuery = "SELECT NAME FROM MYTABLE";
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {
            retData.add(cursor.getString(0));
        } while (cursor.moveToNext());
    }
    return retData;
}
public List getAllNames(){
List retData=new ArrayList();
String selectQuery=“从MYTABLE中选择名称”;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
做{
retData.add(cursor.getString(0));
}while(cursor.moveToNext());
}
返回数据;
}

然后将返回的列表分配给适配器。列表id的问题是,它们对最终用户来说往往没有意义。确实,您希望显示用户有意义的数据,例如名称,但随后能够访问相应的id,从而有效地对显示给用户的列表中的选择进行操作

使用ArrayList通常会导致很多挫折,因为该列表显示了所需的内容,但在尝试使用列表时,除了显示数据之外,它几乎没有什么用处,例如,选择一个项目,然后执行诸如删除或更新之类的操作(如果该值在数据库中是唯一的,则可以使用它)

因此,
ArrayList
而不是
ArrayList
通常更适合作为列表的源;游标适配器也可以用作从基础行轻松获取数据的工具

但是,在使用ArrayList时存在一个问题,除非使用自定义数组适配器,
ArrayAdapter
类使用对象的
toString
方法检索显示的数据。简单的解决方法是在对象中提供一个合适的
toString
方法,如果您不这样做,您将在
的行中得到一些长的东西。”SomeType@2f92e0f4“

示例显示了所有3个 在以下工作示例中:-

  • 数据库(mydb)有一个名为mytable的表,该表有两列\u id(注意对于游标适配器,必须是\u id

  • 有3种方法可获取3种类型的列表(相应命名):-

  • GetAllassTringrayList(获取数组列表)
  • getAllAsMyTableObjectArrayList(获取ArrayList)。注释使用MyTableObject类(请参见类中的注释重新覆盖默认的toString方法)
  • getAllAsCursor

    • 应用程序运行时将有3个列表,左侧基于第一个ArrayList,中间基于ArrayList,最后一个基于光标

    • 单击任何列表中的项目都会显示相应的名称,并尝试获取id

    • ArrayList左侧列表在这方面失败,因为它只能获取位置(即,传递给侦听器的第四个参数的值与位置相同)

    • 从对象(通过适配器的getItem(position)方法检索)获取id时,ArrayList中间列表成功检索到正确的id,第四个参数与位置相同,不应使用

    • 光标右列表通过光标和第四个参数检索正确的id

代码

MyTableObject.java:-

public class MyTableObject {
    private long id;
    private String name;

    public MyTableObject(long id, String name) {
        this.id = id;
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    /*
        NOTE toString method returns just the name
     */
    @Override
    public String toString() {
        return name;
    }
}
public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DBNAME = "mydb";
    public static final int DBVERSION = 1;
    public static final String TB_MYTABLE = "mytable";
    public static final String COl_MYTABLE_ID = BaseColumns._ID; //<<<< use standard android id column name
    public static final String COL_MYTABLE_NAME = "_name";

    private static final String mytable_crtsql =
            "CREATE TABLE IF NOT EXISTS " + TB_MYTABLE +
                    "(" +
                    COl_MYTABLE_ID + " INTEGER PRIMARY KEY, " +
                    COL_MYTABLE_NAME + " TEXT " +
                    ")";

    SQLiteDatabase mDB;

    public DatabaseHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
        mDB = this.getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(mytable_crtsql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

    public long addRow(String name) {
        ContentValues cv = new ContentValues();
        cv.put(COL_MYTABLE_NAME,name);
        return mDB.insert(TB_MYTABLE,null,cv);
    }

    public ArrayList<String> getAllAsStringArrayList() {
        ArrayList<String> rv = new ArrayList<>();
        Cursor csr = mDB.query(
                TB_MYTABLE,
                null,
                null,
                null,
                null,
                null,
                null
        );
        while (csr.moveToNext()) {
            rv.add(csr.getString(csr.getColumnIndex(COL_MYTABLE_NAME)));
        }
        csr.close();
        return rv;
    }

    public ArrayList<MyTableObject> getAllAsMyTableObjectArrayList() {
        ArrayList<MyTableObject> rv = new ArrayList<>();
        Cursor csr = mDB.query(
                TB_MYTABLE,
                null,
                null,
                null,
                null,
                null,
                null
        );
        while (csr.moveToNext()) {
            rv.add(new MyTableObject(
                    csr.getLong(csr.getColumnIndex(COl_MYTABLE_ID)),
                    csr.getString(csr.getColumnIndex(COL_MYTABLE_NAME))
                    )
            );
        }
        csr.close();
        return rv;
    }

    public Cursor getAllAsCursor() {
        return mDB.query(
                TB_MYTABLE,
                null,
                null,
                null,
                null,
                null,
                null
        );
    }
}
DatabaseHelper.java:-

public class MyTableObject {
    private long id;
    private String name;

    public MyTableObject(long id, String name) {
        this.id = id;
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    /*
        NOTE toString method returns just the name
     */
    @Override
    public String toString() {
        return name;
    }
}
public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DBNAME = "mydb";
    public static final int DBVERSION = 1;
    public static final String TB_MYTABLE = "mytable";
    public static final String COl_MYTABLE_ID = BaseColumns._ID; //<<<< use standard android id column name
    public static final String COL_MYTABLE_NAME = "_name";

    private static final String mytable_crtsql =
            "CREATE TABLE IF NOT EXISTS " + TB_MYTABLE +
                    "(" +
                    COl_MYTABLE_ID + " INTEGER PRIMARY KEY, " +
                    COL_MYTABLE_NAME + " TEXT " +
                    ")";

    SQLiteDatabase mDB;

    public DatabaseHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
        mDB = this.getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(mytable_crtsql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

    public long addRow(String name) {
        ContentValues cv = new ContentValues();
        cv.put(COL_MYTABLE_NAME,name);
        return mDB.insert(TB_MYTABLE,null,cv);
    }

    public ArrayList<String> getAllAsStringArrayList() {
        ArrayList<String> rv = new ArrayList<>();
        Cursor csr = mDB.query(
                TB_MYTABLE,
                null,
                null,
                null,
                null,
                null,
                null
        );
        while (csr.moveToNext()) {
            rv.add(csr.getString(csr.getColumnIndex(COL_MYTABLE_NAME)));
        }
        csr.close();
        return rv;
    }

    public ArrayList<MyTableObject> getAllAsMyTableObjectArrayList() {
        ArrayList<MyTableObject> rv = new ArrayList<>();
        Cursor csr = mDB.query(
                TB_MYTABLE,
                null,
                null,
                null,
                null,
                null,
                null
        );
        while (csr.moveToNext()) {
            rv.add(new MyTableObject(
                    csr.getLong(csr.getColumnIndex(COl_MYTABLE_ID)),
                    csr.getString(csr.getColumnIndex(COL_MYTABLE_NAME))
                    )
            );
        }
        csr.close();
        return rv;
    }

    public Cursor getAllAsCursor() {
        return mDB.query(
                TB_MYTABLE,
                null,
                null,
                null,
                null,
                null,
                null
        );
    }
}
public类DatabaseHelper扩展了SQLiteOpenHelper{
公共静态最终字符串DBNAME=“mydb”;
公共静态最终int DBVERSION=1;
公共静态最终字符串TB_MYTABLE=“MYTABLE”;
公共静态最终字符串COl\u MYTABLE\u ID=BaseColumns.\u ID//