在Android中将数组插入SQLite数据库

8
我想要在数据库中保存工作日,所以考虑为每一天分配一个整数值来存储,即1表示选中,0表示未选中。例如:
周一 = 0/1
周二 = 0/1
...
周日 = 0/1
但是这样会在数据库中创建7个列。所以我在想是否可以将其存储在单个数组中,并检索值以供进一步使用。我在网上阅读了一些示例,但没有轻松理解。

1
如果您想将数组存储在一列中,则将所有日期值放入JSON数组中并将其存储到数据库中。 - Dhaval Parmar
4个回答

10

要在一列中插入7个值,您可以使用逗号分隔符,如下所示:

其中Total_Score_P1是一个字符串数组

//字符串数组

String[]  Total_Score =  new String[] { p1e1,p1e2,p1e3,p1e4,p1e5,p1e6 };


// Convderting it into a single string 

String result_ScoreP1 = ("" + Arrays.asList(Total_Score_P1)).
             replaceAll("(^.|.$)", "  ").replace(", ", "  , " );

result_ScoreP1将是:

//这个的输出

result_ScoreP1 = "p1e1,p1e2,p1e3,p1e4,p1e5,p1e6";

将其作为单个字符串插入数据库中,再次检索时将其分解成部分,例如:
//一个字符串数组列表
//查询被触发
public ArrayList<String> rulTable(String id) {
        // TODO Auto-generated method stub
        ArrayList<String> Ruleob = new ArrayList<String>();

        Cursor c_rule;

        try
        {
            c_rule = db.query(NameTable, new String[]{
                    columns1        
            },
            Rule_COurseID + "=" + id ,
                              null, null, 
                              null, null, null);

            c_rule.moveToFirst();

            // if there is data available after the cursor's pointer, add
            // it to the ArrayList that will be returned by the method.
            if (!c_rule.isAfterLast())
            {
                do
                {

                    Ruleob.add(c_rule.getString(0));

                }
                while (c_rule.moveToNext());
            }

            // let java know that you are through with the cursor.
            c_rule.close();
        }
        catch(Exception e)
        {


        }
        return Ruleob;


    }


//list to get elements 

 ArrayList<String>  ListOne = new ArrayList<String>();

ArrayList<String> row ;

    try{
// received values
        row = db.TheTable(id);
        String r1 = row .get(0);

}

catch(Exception e)

{

}


 StringTokenizer st2 = new StringTokenizer(r1, "||");

            while(st2.hasMoreTokens()) {
            String Desc = st2.nextToken();
               System.out.println(Desc+ "\t" ); 
            ListOne.add(Desc); 

//   
            }

5
你可以使用二进制整数1=选中,0=未选中(1111111)(0000000)
一周总共七天,所以索引0=星期一,1=星期二,2=星期三,3=星期四,4=星期五,5=星期六,6=星期日......以此类推。
在这里,1111111意味着全天都被选中,0000000表示全天都未被选中,0001000仅表示星期四被选中。

是的,我知道,但这和我现在做的事情一样,有什么想法吗?如果我必须使用那些日期设置我的应用程序中的闹钟,我们是否可以在数据库中使用数组/数组列表? - Harpreet
你可以通过这个概念设置闹钟,没什么大不了的。 - Mohammed Azharuddin Shaikh

3
我发现了一种方法,即将所谓的值转换为 JSON 数组,然后将完整的 JSON 字符串 存储到数据库的实体/字段中。这有助于轻松高效地提供值。

2

创建另一个表格,每天都有一列布尔值。通过整数ID(使用外键)将其与此表关联。这是解决问题的关系型方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接