java - 从另一个表填充 SQL 表列

标签 java sql sql-server jqgrid free-jqgrid

我有一个 jqGrid(最新免费 jqGrid 版本)表,其中使用 Java REST 服务填充来自数据库(MS SQL)的数据。 jqGrid 列之一是一个包含 6 个选项的下拉列表。

我的任务是创建另一个包含下拉列表值的数据库表,并使用外键/主键自动填充第一个表 DDL 值。

我无法理解其背后的逻辑。有人可以向我解释一下吗?我怎样才能做到这一点。我是否只从 jqGrid 发送一个 ID,并根据该 ID(1,2,..,6) 选择在 table#1 DDL 列中设置的内容(将发送的 id 与包含 DDL 值的表的 ID 进行比较)?

我感觉我没有很好地表达自己......希望你们理解我。

最佳答案

我们可以从数据库表开始。它可能看起来像

CREATE TABLE dbo.OrderStatus (
    Id int IDENTITY NOT NULL,
    Name nvarchar(100) NOT NULL,
    CONSTRAINT PK_LT_OrderStatus PRIMARY KEY CLUSTERED (Id),
    CONSTRAINT UC_LT_OrderStatus_Name UNIQUE NONCLUSTERED (Name)
)

它允许通过IdName来寻址此类OrderStatus表的任何项目。 UNIQUE CONSTRAINT 不允许添加名称重复项。另一个表Order可以有列

CREATE TABLE dbo.Order (
    Id int IDENTITY NOT NULL,
    OrderStatusId int NOT NULL,
    ...
)

ALTER TABLE dbo.Order  WITH CHECK ADD  CONSTRAINT FK_Order_OrderStatus
FOREIGN KEY(OrderStatusId) REFERENCES dbo.OrderStatus (Id)

在用数据填充网格期间,您有两个主要选项:在数据中使用 OrderStatusId 或使用 dbo.OrderStatus 中相应的 Name:

SELECT Id,OrderStatusId, ...  FROM dbo.Order

SELECT Id,os.Name AS OrderStatus, ...
FROM dbo.Order AS o
    INNER JOIN dbo.OrderStatus AS os ON os.Id=o.OrderStatusId

如果您决定使用 ID(OrderStatusId 值)填充网格,则必须使用 formatter: "select" 在相应列中显示文本(参见 here )。它要求您必须使用 editoptions.value 填充来自 dbo.OrderStatus 的所有不同值。实现此目的的最佳方法是扩展服务器的响应,以使用自定义数据填充网格,并使用 beforeProcessing 设置 editoptions.value。我在 the answer 中描述了该场景。我会在下面提醒您。

让我们看到服务器的响应如下

{
    "rows": [{...}, {...}]
}

如果返回的数据看起来像这样

[{...}, {...}]

那么你应该包括包装。我建议你做

SELECT Id,Name FROM dbo.OrderStatus

此外dbo.Order 中进行主要选择 (SELECT * FROM dbo.Order) 并放置两者 服务器响应结果:

{
    "orderStatus": [{"id":1, "name":"Pending"}, ...],
    "rows": [{...}, {...}]
}

要处理 orderStatus,您需要添加以下 beforeProcessing,它读取 orderStatus 并设置 editoptions.value网格的 orderStatus 列:

beforeProcessing: function (response) {
    var $self = $(this), orderStatus = response.orderStatus, i, values = "";
    if (orderStatus != null && orderStatus.length > 0) {
        for (i = 0; i < orderStatus.length; i++) {
            if (values.length > 0) {
                values += ";";
            }
            values += orderStatus[i].id + ":" + orderStatus[i].name;
        }
        $self.jqGrid("setColProp", "orderStatus", {
            editoptions {
                value: values
            }
        });
        if (this.ftoolbar) { // filter toolbar exist
            $self.jqGrid("destroyFilterToolbar");
            $self.jqGrid("filterToolbar");
        }
    }
}

上面的代码未经测试,但我希望从中可以清楚主要思想。

关于java - 从另一个表填充 SQL 表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34839678/

相关文章:

使用任何命令行参数进行 exec 调用时出现 Java IOException

java - toast 出现两次

c# - 检索SQL语句的输出参数

c# - 使用单个 ado.net 查询查询多个数据库

java - 可以对 spring rest 调用进行 junit 测试吗?

java - 延迟将对象移动到另一个对象

sql - 我可以在同一个表中有 2 个唯一列吗?

php - 使用 PHP 快速将 SQL 查询中的所有数据放入数组中

sql - 无需表扫描即可获取标识列的最大值

mysql - 编写存储过程,标记 MySQL 中逗号分隔字段中的重复值