如何从游标中检索字符串数组
How to retrieve a string array from a cursor
我有一个名为 passableCursor 的游标,它包含多个字段,但是一个字段 ingredients 包含多个值,我无法从中获取所有值。
从姓名中检索的示例
Log.d("recipeName", passableCursor.getString(passableCursor.getColumnIndex("name")));
游标结构示例
name-> name1
description -> description1
ingredients -> ingredient1, ingredient2, ingredient3.
我一直在使用 getString
作为名称和描述字段。但是,我正在努力从成分中获取价值。似乎没有 getStringArray
方法。
这是一种方法:
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) 获取原始数组输入(本例中为字符串)
2) 创建一个字符串,用 ,
分隔不同的字符串。对于可能有逗号的较长字符串,您可能需要考虑向逗号添加反斜杠,并在“\,”处拆分(两个反斜杠使 Java 将其注册为实际反斜杠,而不是转义符字符)
3) 将字符串保存到您的数据库
4) 加载字符串
5) 它在 ,
处拆分字符串,给你几个部分。这是数组,应该是(假设您已采取预防措施保护系统免受字符串内逗号(,
)
6) 可选:通过删除某些内容、添加某些内容、添加对标记的支持(将 [link text](http://example.com)
替换为 HTML 代码)、更改类型(字符串 -> 整数)来优化字符串数组, 无论你需要什么。
注意
这是基本草稿。这允许您将基本数组保存到数据库中,并且无需创建多行即可恢复它。它可能需要精炼,如果你用逗号或任何可能试图导致 SQL 注入的字符保存在字符串数组文本中。
这可以改进以与任何其他类型的数组一起使用,例如 long、integer 或 boolean,但保存是相同的(必须压缩为字符串),但您添加 .parse[Type](input)
将其转换为所需类型的数组
我有一个名为 passableCursor 的游标,它包含多个字段,但是一个字段 ingredients 包含多个值,我无法从中获取所有值。
从姓名中检索的示例
Log.d("recipeName", passableCursor.getString(passableCursor.getColumnIndex("name")));
游标结构示例
name-> name1
description -> description1
ingredients -> ingredient1, ingredient2, ingredient3.
我一直在使用 getString
作为名称和描述字段。但是,我正在努力从成分中获取价值。似乎没有 getStringArray
方法。
这是一种方法:
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) 获取原始数组输入(本例中为字符串)
2) 创建一个字符串,用 ,
分隔不同的字符串。对于可能有逗号的较长字符串,您可能需要考虑向逗号添加反斜杠,并在“\,”处拆分(两个反斜杠使 Java 将其注册为实际反斜杠,而不是转义符字符)
3) 将字符串保存到您的数据库
4) 加载字符串
5) 它在 ,
处拆分字符串,给你几个部分。这是数组,应该是(假设您已采取预防措施保护系统免受字符串内逗号(,
)
6) 可选:通过删除某些内容、添加某些内容、添加对标记的支持(将 [link text](http://example.com)
替换为 HTML 代码)、更改类型(字符串 -> 整数)来优化字符串数组, 无论你需要什么。
注意
这是基本草稿。这允许您将基本数组保存到数据库中,并且无需创建多行即可恢复它。它可能需要精炼,如果你用逗号或任何可能试图导致 SQL 注入的字符保存在字符串数组文本中。
这可以改进以与任何其他类型的数组一起使用,例如 long、integer 或 boolean,但保存是相同的(必须压缩为字符串),但您添加 .parse[Type](input)
将其转换为所需类型的数组