我有一个数组从数据库中的列获取值。
String sql1 = "SELECT COUNT(DISTINCT Total) AS Rank FROM class1 s1 JOIN
class1 s2 ON (s1.Total <= s2.Total) GROUP BY s1.ID ORDER BY s1.Name ASC";
pst = conn.prepareStatement(sql1);
rs = pst.executeQuery();
ArrayList<String> marks = new ArrayList<>();
while (rs.next()) {
marks.add(rs.getString(1));
}
String[] order = new String[marks.listIterator().nextIndex()];
order = marks.toArray(order);
这会对“总列数”中的值进行排名,并在计算列“排名”中显示结果。
然后将计算列中的值存储在名为“order”的数组中。
所以例如:order = [1,2,3],这是计算列排名中的所有3行...
我想做的是使用arraylist中的值更新表中的列Position
,这样我的结果就像:
| NAME | SCORE 1 | SCORE 2 | TOTAL | POSITION |
+-------+---------+---------+-------+----------+
| james | 10.0 | 24.0 | 34.0 | 1 |
| jimmy | 10.0 | 20.0 | 30.0 | 2 |
| josh | 10.0 | 19.0 | 29.0 | 3 |
但是当我尝试时,这就是我的表格的样子:
| NAME | SCORE 1 | SCORE 2 | TOTAL | POSITION |
--------+---------+---------+--------+-----------+
| james | 10.0 | 24.0 | 34.0 | [1,2,3] |
| jimmy | 10.0 | 20.0 | 30.0 | [1,2,3] |
| josh | 10.0 | 19.0 | 29.0 | [1,2,3] |
这是我用数组来更新“位置列”的代码..
String sql1="SELECT COUNT(DISTINCT Total)AS Rank from class1 s1 JOIN class1
s2 on(s1.Total<=s2.Total) GROUP BY s1.ID order by s1.Name ASC";
pst = conn.prepareStatement(sql1);
rs = pst.executeQuery();
ArrayList<String> marks = new ArrayList<>();
while (rs.next()) {
marks.add(rs.getString(1));
}
String[] order = new String[marks.listIterator().nextIndex()];
order = marks.toArray(order);
String sql = "update class1 set Position ='"+Arrays.toString(order)+"'";
pst = conn.prepareStatement(sql);
pst.execute();
请非常感谢任何帮助。谢谢。
答案 0 :(得分:1)
您想为不同的行设置单独的值,但声明
String sql = "update class1 set Position ='"+Arrays.toString(order)+"'";
将为所有行的Position列设置相同的值,此处Arrays.toString(order)
将给出值[1,2,3]
,因此表的最终结果具有值{{的所有行1}}用于列位置。
要正确更新单个行,我们需要为每行传递唯一标识符以更新位置。
伪代码:
[1,2,3]
答案 1 :(得分:0)
非常感谢Clement Amarnath ......你的解决方案是正确的......我只需要将更新语句中的值从1更改为2,从0更改为1。 最初的一个是:
String sql = "update class1 set Position ='"+rs.getString(1)+"'"+"WHERE unique_id="+rs.getString(0);
pst = conn.prepareStatement(sql);
pst.execute();
似乎sqlite3有一种不同的方式来索引它们的默认行..所以我改变了这种方式......
String sql = "update class1 set Position ='"+rs.getString(2)+"'"+"WHERE unique_id="+rs.getString(1);
pst = conn.prepareStatement(sql);
pst.execute();
非常感谢你。愿你保持幸福..