36

我需要将一个字符串数组保存到数据库中,但它不会让我这样做。这就是我所拥有的:

 public long createEntry(String startTime, String endTime, String[] states) {
         ContentValues initialValues = new ContentValues();
         initialValues.put(START_KEY_TIME , startTime);
         initialValues.put(END_KEY_TIME , endTime);
         initialValues.put(KEY_STATE, states );

         return databaseConnect.insert(DATABASE_TABLE, null, initialValues);
}

但是如果我把string[]状态放进去,它会说内容值不能接受一个论点。我该如何解决?我在想我有 7 个州的东西,我可以有 7 个单独的字符串并在每个字符串中存储东西,然后将所有字符串放回字符串数组吗?或者那是不好的做法?

4

5 回答 5

88

您不能将字符串数组保存到数据库中。但是你可以使用这个技巧。

1)所以你必须使用convertArrayToString(String[] array)方法将它转换成简单的字符串。这将使用“逗号”连接字符串的所有元素。

2)当您从数据库中检索此字符串时,您可以使用方法将其转换回字符串数组convertStringToArray(String str)。此方法会将字符串从“逗号”中拆分出来,您将获得原始数组。

public static String strSeparator = "__,__";
public static String convertArrayToString(String[] array){
    String str = "";
    for (int i = 0;i<array.length; i++) {
        str = str+array[i];
        // Do not append comma at the end of last element
        if(i<array.length-1){
            str = str+strSeparator;
        }
    }
    return str;
}
public static String[] convertStringToArray(String str){
    String[] arr = str.split(strSeparator);
    return arr;
}
于 2012-01-29T14:15:10.020 回答
12

基于穆罕默德的回答,但处理ListsString而不是数组,并在值连接期间使用StringBuilder而不是分配许多s:String

private static final String LIST_SEPARATOR = "__,__";

public static String convertListToString(List<String> stringList) {
    StringBuilder stringBuilder = new StringBuffer();
    for (String str : stringList) {
        stringBuilder.append(str).append(LIST_SEPARATOR);
    }

    // Remove last separator
    stringBuilder.setLength(stringBuilder.length() - LIST_SEPARATOR.length());

    return stringBuilder.toString();
}

public static List<String> convertStringToList(String str) {
    return Arrays.asList(str.split(LIST_SEPARATOR));
}
于 2015-06-22T21:18:25.707 回答
9

将其转换为单个字符串以将其保存在 sqlite 中。稍后,从 sqlite 将其作为单个字符串检索回来,并将其转换回字符串数组。

String ARRAY_DIVIDER = "#a1r2ra5yd2iv1i9der";

public String serialize(String content[]){      
    return TextUtils.join(ARRAY_DIVIDER, content);
}

public String[] derialize(String content){
    return content.split(ARRAY_DIVIDER);
}
于 2014-10-12T21:44:02.337 回答
5

如果您将字符串数组转换为 JSONArray,然后使用 toString,然后通过首先解析为 JSONArray 然后将其转换为字符串数组来检索它会更容易

于 2015-08-29T17:24:08.360 回答
1

看起来您的数据库没有按应有的方式设计。如果要将布尔数据存储在 SQLite 数据库中,可以将布尔值存储为整数 0 (false) 和 1 (true)

于 2012-01-29T14:05:52.553 回答