如何从游标中检索字符串数组

时间:2017-05-08 17:59:25

标签: java android cursor getstring

我有一个名为passableCursor的游标,包含多个字段,但是一个字段,成分,包含多个值,我无法从中获取所有值。

从名称

中检索的示例
Log.d("recipeName", passableCursor.getString(passableCursor.getColumnIndex("name")));

游标结构示例

name-> name1

description -> description1

ingredients -> ingredient1, ingredient2, ingredient3.

我一直在使用getString作为名称和说明字段。但是,我正在努力从成分中获取价值。似乎没有getStringArray方法。

1 个答案:

答案 0 :(得分:0)

这是一种方式:

    SQLiteDatabase db  =null;//Initialize this first
    Cursor cursor = db.rawQuery("your query", null);//Replace with your query(e.g. SELECT FROM table WHERE something=2)
    String preChanged = cursor.getString(cursor.getColumnIndex("row_name"));//Replace row name with your row name
    String[] finalR = preChanged.split(",");//Can be changed to parts
    //String[] finalR = new String[parts.length];
    //for(int i = 0; i < parts.length; i++){
    //    finalR[i] = parts[i];//This for-loop is if you have special needs. If you want to convert the String to a different type(integer, boolean, etc), or you want to make sure it contains/does not contain something.
    //}//Uncomment if needed

    //Now, this needs a special compression method, to ensure correct format;
    //raw is the raw array, continuing from up above we use finalR to make sure you as a reader understand the context

    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < finalR.length; i++) {
        if(i != finalR.length - 1)
            builder.append(finalR[i] + ",");
        else
            builder.append(finalR[i]);
    }

这也可以转换成一系列方法。

解释这是如何工作的:

1)获取原始数组输入(在本例中为String)

2)创建一个String,用,分隔不同的字符串。对于可能有逗号的较长字符串,您可能需要考虑在逗号中添加反斜杠,并在“\”处拆分(两个反斜杠使Java将其注册为实际反斜杠,而不是转义字符)

3)将字符串保存到数据库

4)加载字符串

5)它将字符串拆分为,,给你几件。这是数组,应该是(假设您已采取预防措施保护系统免受字符串逗号(,

6)OPTIONAL:优化String数组,删除内容,添加内容,添加对标记的支持(用HTML代码替换[link text](http://example.com)),更改类型(字符串 - &gt;整数),无论您需要什么。

这是基本草案。这允许您将基本数组保存到数据库,并在不必创建多行的情况下恢复它。如果您使用逗号保存在String数组文本中,或者可能尝试导致SQL注入的任何char,则可能需要进行优化。

这可以改进为与任何其他类型的数组一起使用,例如long,integer或boolean,但是保存是相同的(它必须压缩为字符串),但是你添加.parse[Type](input)将其转换为所需类型的数组