【问题标题】:Inserting values to multiple columns in single row sql server [closed]将值插入单行sql server中的多列[关闭]
【发布时间】:2020-06-09 11:48:17
【问题描述】:

我可以使用 JDBC 驱动程序访问用于 android 应用程序的 SQL SERVER。将值插入一列可以正常工作。但我想在该单行中插入具有单个查询的多列的值。

这是我尝试过的

public void insertValues(String number, Long caller_id) {
    Statement statement = connect.createStatement();
    String queryID = "INSERT INTO Phone(PhoneNumber, CallerID) VALUES ('" + number + "'),('" + caller_id + "')";
    statement.execute(queryID);
}

如果我尝试按如下方式仅插入一列,则效果很好。

public void insertValues(String number) {
    Statement statement = connect.createStatement();
    String queryID = "INSERT INTO Phone(PhoneNumber) VALUES ('" + number + "')";
    statement.execute(queryID);
}

多个输入项我缺少什么?

【问题讨论】:

  • 非常 强烈建议您学习参数化。这是非常可以注入的。至于INSERT如何为多列取值,那basic syntax的文档你没看懂,我们可以尝试详述。
  • @Larnu 我遵循了基本的 INSERT 结构。单项工作正常。但不知何故,多列似乎不起作用。
  • 在第一个示例中,您有Phone(PhoneNumber,ID) VALUES(Phonenumber), (ID),您在两行中都定义了一列。再看一下文档。然后堵住你那里的巨大安全漏洞。
  • 您是手动处理 id 还是数据库表中的 UNIQUEIDENTIFIERs?在后一种情况下,不要尝试自己插入,数据库会处理它们...是的,使用PreparedStatements 安全地设置变量值。
  • @deHaar ID 可能具有误导性,它是 caller_id - 我从另一个表中获取自动生成的密钥。

标签: java android sql-server


【解决方案1】:

您需要将所有值放在同一组括号中:

INSERT INTO Phone(PhoneNumber, CallerID) VALUES ('0321316768', 'Jeff')

VALUES 部分中有两组括号。

(另外,不要只在 SQL 语句中使用变量。它非常不安全!使用PreparedStatement

【讨论】:

  • 我已经使用准备好的语句从上一个表中获取自动生成的密钥。
【解决方案2】:

忘记 JDBC 并直接针对 SQL Server 编写查询,您会发现问题(提示:语法不正确)。

直接来自Microsoft documentation的示例

C.插入与表列顺序不同的数据

以下示例使用列列表显式指定插入每列的值。 AdventureWorks2012数据库中Production.UnitMeasure表中的列顺序为UnitMeasureCodeNameModifiedDate;但是,column_list 中的列并未按此顺序列出。

INSERT INTO Production.UnitMeasure (Name, UnitMeasureCode, ModifiedDate)  
VALUES (N'Square Yards', N'Y2', GETDATE());  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多