是否可以使用行号和列号进行SQL更新?

时间:2013-03-03 07:32:27

标签: sql sqlite

我正在使用jquery datables / jedtiable传回ROW和COLUMN号以及新的VALUE,如下所示进行更新。这是POST到另一个JSP页面,该页面与sqlite DB有JDBC连接。

注意:我不想指定列名,只是基于我的其他页面的int POST的数字。希望这使我的问题更加清晰

行,值,列

  

2 No 4

在第2行第4列中更新“否”的SQL是什么?

更新 * ** * ** * **

目前正在使用rowid,但我仍然希望能够按列号使用。

     String value = request.getParameter("value");
     String row = request.getParameter("row_id");
     String column = request.getParameter("column");

UPDATE PROJECT SET DELIVERY_STREAM ='"+value+"' WHERE rowid = "+rowId+";

2 个答案:

答案 0 :(得分:1)

所有SQL命令都需要列名称,而不是数字。

此外,SQL表没有固有的顺序,其中行号是有意义的;记录只能通过一些唯一的字段值来识别。

所以,严格地说,你的问题的答案是“不”。


要按编号访问列,您需要知道哪个列具有哪个编号,以便您可以将编号映射回相应的名称:

String[] columnNames = new String[] {
    "NAME", "DELIVERY_STREAM", "NUMBER_OF_FEET", "RETICULATED", ...
};
int columnNumber = ...;

String sql = "UPDATE Project SET " + columnNames[columnNumber] + " = ? WHERE ...";

从行号到实际记录的映射要求您在某处存储具有这些记录键值的数组,但在使用多个JSP页面时这是不可行的。 而不是行号,只需使用原始表中的一些键值(主键或SQLite的rowid)来标识记录;这就是键的用途。

答案 1 :(得分:0)

让我们假设您的表中有一些唯一的订单字段(ord_field)。然后你可以做一些接近这个的事情:

UPDATE table SET value ='some value'
FROM (
SELECT *, (select COUNT(0) 
            from table t1 
            where t2.ord_field <= t1.ord_field 
            ) AS ord
FROM table t2
ORDER BY ord_field ASC) a WHERE table.ord_field = a.ord_field AND a.ord BETTWEN 2 and 4