Android 如何在SQL数据库中放置字符串列表?

Android 如何在SQL数据库中放置字符串列表?,android,sqlite,Android,Sqlite,我有一个edittext,允许用户输入最多10个数字 我希望能够将这些数字作为字符串列表保存到SQLite数据库中 SQL允许这样做吗?如果是,怎么做 比如 字符串[]列表={102030030310203030010102003020} 您可以这样做,但您将违反规范化规则 如果将该数组持久化为单个字符串(逗号分隔?),则必须对其进行解析以查看各个值。这不是个好主意 规范化模式将在两个表之间使用一对多关系。一个是父级,另一个是每个值有一行且主键/外键关系的子级。您将使用联接返回值 如果您非常想这

我有一个edittext,允许用户输入最多10个数字

我希望能够将这些数字作为字符串列表保存到SQLite数据库中

SQL允许这样做吗?如果是,怎么做

比如
字符串[]列表={102030030310203030010102003020}

您可以这样做,但您将违反规范化规则

如果将该数组持久化为单个字符串(逗号分隔?),则必须对其进行解析以查看各个值。这不是个好主意

规范化模式将在两个表之间使用一对多关系。一个是父级,另一个是每个值有一行且主键/外键关系的子级。您将使用联接返回值

如果您非常想这样做,那么您必须将数组中的所有字符串连接成一个字符串,并在它们之间插入一些分隔符,您可以确定这些分隔符永远不会出现在您要组合的任何字符串中。拥有单个分隔字符串后,将其插入SQLite数据库表中的字符串类型列中

由于您坚持要查看一些代码,下面是Java中的代码:

String [] list = { "1020300303", "1020303001", "0102003020" };
StringBuilder concatenatedList = new StringBuilder();
for (String s : list) {
    concatenatedList.append(s).append('~'); // Any delimiter will do.
}
PreparedStatement ps = connection.prepareStatement("INSERT INTO MySQLiteTable(stringColumnName) VALUES(?)";
ps.setString(1, concatenatedList.toString());
int numRowsAffected = ps.executeUpdate();

我不会这样写——没有清理,没有错误处理,没有良好的封装。但它显示了您想要去的地方。

您可以这样做,但您将违反规范化规则

如果将该数组持久化为单个字符串(逗号分隔?),则必须对其进行解析以查看各个值。这不是个好主意

规范化模式将在两个表之间使用一对多关系。一个是父级,另一个是每个值有一行且主键/外键关系的子级。您将使用联接返回值

如果您非常想这样做,那么您必须将数组中的所有字符串连接成一个字符串,并在它们之间插入一些分隔符,您可以确定这些分隔符永远不会出现在您要组合的任何字符串中。拥有单个分隔字符串后,将其插入SQLite数据库表中的字符串类型列中

由于您坚持要查看一些代码,下面是Java中的代码:

String [] list = { "1020300303", "1020303001", "0102003020" };
StringBuilder concatenatedList = new StringBuilder();
for (String s : list) {
    concatenatedList.append(s).append('~'); // Any delimiter will do.
}
PreparedStatement ps = connection.prepareStatement("INSERT INTO MySQLiteTable(stringColumnName) VALUES(?)";
ps.setString(1, concatenatedList.toString());
int numRowsAffected = ps.executeUpdate();

我不会这样写——没有清理,没有错误处理,没有良好的封装。但是它显示了您想要去的地方。

您能用代码解释一下吗?如果我有10列,像数字1,数字2,等等。然后像那样提取数字?因为用户限制为10个数字?或者这会是过度杀戮吗?我认为上面的方法是最有效的。或者除了SQLITE之外,我还有其他方法可以做到这一点。如果他们的数量少于10个呢?你有兴趣知道他们输入了多少数字吗?一个简单的计数查询会告诉您这一点。您的方法将意味着查询字符串,将其拆分为一个数组,并获得数组的长度。如果它们只删除一个值呢?你的方式是b!tch;规范化方法只是从VALUE=(removed VALUE)的子级中删除行。我的建议适用于所有关系数据库,而不仅仅是SQLite。。。。我所要做的就是把字符串[]放入数据库..然后在需要时拉出列表..那么继续吧..什么阻止了你?将字符串连接成一个字符串,在字符串之间加上一些分隔符,然后插入。这是你的葬礼,你能用密码解释一下吗?如果我有10列,像数字1,数字2,等等。然后像那样提取数字?因为用户限制为10个数字?或者这会是过度杀戮吗?我认为上面的方法是最有效的。或者除了SQLITE之外,我还有其他方法可以做到这一点。如果他们的数量少于10个呢?你有兴趣知道他们输入了多少数字吗?一个简单的计数查询会告诉您这一点。您的方法将意味着查询字符串,将其拆分为一个数组,并获得数组的长度。如果它们只删除一个值呢?你的方式是b!tch;规范化方法只是从VALUE=(removed VALUE)的子级中删除行。我的建议适用于所有关系数据库,而不仅仅是SQLite。。。。我所要做的就是把字符串[]放入数据库..然后在需要时拉出列表..那么继续吧..什么阻止了你?将字符串连接成一个字符串,在字符串之间加上一些分隔符,然后插入。这是你的葬礼。