在android的SQLite数据库中插入数组

Posted

技术标签:

【中文标题】在android的SQLite数据库中插入数组【英文标题】:Insert Array in SQLite Database in android 【发布时间】:2012-05-27 22:21:41 【问题描述】:

我想在数据库中保存工作日,所以我想通过为每一天分配 int 值来存储它。即

1 -> 已选择,0 -> 未选择。

星期一 = 0/1

星期二 = 0/1

。 . . . .

星期日 = 0/1。

但这会在 DB 中创建 7 列。所以我在想是否有人可以帮助我解决这个问题,如果我应该将它存储在一个数组中并检索值以供进一步使用。我在互联网上阅读了一些示例,但没有以简单的方式获得。

【问题讨论】:

如果您想将数组存储在一列中,然后将您的所有天值放入 json 数组并将其存储到数据库中。 【参考方案1】:

要在一列中插入 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); 

//   
            

【讨论】:

【参考方案2】:

您可以使用二进制整数 1= 已选择 0 =未选择 (1111111) (0000000)

总共 7 天,因此索引 0=周一、1=周二、2=周三、3=周四、4=周五、5=周六、6=周日……以此类推。

这里 1111111 表示全天选择,0000000 全天不选择,0001000 仅选择星期四。

【讨论】:

是的,我知道,但这和我现在做的一样,知道我们是否可以在数据库中使用数组/数组列表,因为我必须使用那些日子来设置警报在我的应用中。 你可以通过这个概念设置闹钟,没什么大不了的。【参考方案3】:

我还发现了一种方法,即将您所谓的值转换为 JSON 数组,然后将完整的 JSON 字符串 存储到数据库中的实体/字段中。 p>

它有助于轻松有效地服务于价值观。

【讨论】:

【参考方案4】:

创建另一个表,其中包含每天的一列布尔值。通过整数 id 与该表建立关联(使用外键)这是解决问题的关系方式。

【讨论】:

以上是关于在android的SQLite数据库中插入数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中将arraylist或vector插入SQLite数据库?

在 Android 中插入 datetime.now SQLite

无法在 SQLite 数据库 Android 上插入数据

Android Q:范围存储中的 SQLite 数据库

如何通过 switch compact 将值 1 插入 sq-lite 中的列

如何使用 android 中的 SQLite 扩展类在数据库中插入值?