当前位置: 首页 > 面试题库 >

通过JDBC发送DEFAULT占位符?

祁修平
2023-03-14
问题内容

有没有办法通过JDBCDEFAULT显式发送占位符,如in INSERT INTO sometables VALUES (blah, DEFAULT)?(我几乎可以肯定答案是“否”,但是我正在寻找JDBC专家确认)。

假设您有一个PreparedStatement赞:

INSERT INTO mytable(a, b) VALUES (?, ?)

对于表:

CREATE TABLE mytable (
    a integer,
    b integer default some_function()
);

并且您想在一批执行中使用数据库集DEFAULT,而mytable.b在其他执行中则不使用。

在常规SQL中,您将编写:

INSERT INTO mytable(a, b) VALUES (1, 42)
INSERT INTO mytable(a, b) VALUES (2, DEFAULT);
...

或当然:

INSERT INTO mytable(a, b) VALUES (1, 42)
INSERT INTO mytable(a) VALUES (2);

…但是您不能通过JDBC做到这一点。setString("DEFAULT")当然,不会发送DEFAULT关键字,而只会发送string-
literal 'DEFAULT'

有没有一种方法可以设置占位符参数,这DEFAULT在任何广泛使用的驱动程序中都意味着?

我看不到使用标准API和规范执行此操作的方法。

我在想像这样的东西:

pstmt.setObject(2, Postgresql.DEFAULT, Types.OTHER);

其中Postgresql.DEFAULT是一个特殊的占位符实例,因为似乎没有用于的setDefault()方法PreparedStatement

现有的驱动程序是否支持此功能


问题答案:

没有标准的方法可以做到这一点。据我所知,SQL标准不支持声明使用DEFAULT直通参数的机制。SQL标准似乎假定每个对象INSERT都是为特定目的而设计的。因此,声明DEFAULT只能在insert语句本身中进行,而不能作为参数的值进行。在这些决策中,JDBC规范通常遵循SQL标准。

当前唯一的方法是在JDBC驱动程序中创建特定于供应商的方法,例如您在问题本身中指定的方法,但是您还可以想到以下内容:

需要澄清的是:下面是一个驱动程序实现如何解决它的示例,它实际上并不是这样工作的。

使用 setNull(int, int)

setNull(idx, PostgresTypes.DEFAULT_VALUE)

或使用 setNull(int, int, String)

setNull(idx, Types.<correct-field-type>, Postgres.DEFAULT_VALUE_MARKER)

但是,这是假设PostgreSQL实际上有一种DEFAULT通过参数指定的方法,或者驱动程序实现将为每个接收到的参数集解析并重新创建语句,以便它可以声明文字DEFAULT

我不知道当前是否有任何驱动程序支持这种解决方法。



 类似资料:
  • 如何通过Azure从我的UWP-App向不同设备上的应用程序的其他实例发送推送通知? 以下是注册设备以接收推送的说明。(这是可行的)第二部分是关于如何在控制台应用程序上发送推送(这也是可行的)https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-star

  • 我想在登录时向特定用户发送通知,我使用Firebase消息,我可以通过控制台发送通知,但我想使用发送到主题和request以Swift代码发送此通知。当我在postman中运行代码时,我无法实现http请求以发送通知。我有以下错误: 请求缺少身份验证密钥(FCM令牌)。请参阅FCM文档的“认证”部分,网址为https://firebase.google.com/docs/cloud-messagi

  • 问题内容: 我正在尝试从控制器更改输入占位符的值,但无法完全弄清楚该如何做。 有没有办法修改模型的元素属性? 问题答案: 您可以在控制器中绑定变量: 在控制器中:

  • 问题内容: 大家好,我正尝试通过websockets发送javascript对象: faye-websockets文档说: send(message) 接受字符串或缓冲区,并通过连接向另一对等方发送文本或二进制消息。 服务器端我正在使用node和faye。 客户端: 我的错误是什么?谢谢 问题答案: WebSockets支持发送和接收:字符串,类型数组(ArrayBuffer)和Blob。发送之前

  • 问题内容: 我定义一个类,然后设置该类类型的对象。我想将此对象透明地发送到在另一台计算机上运行的另一个Java应用程序。什么是实现这一目标的最佳技术? 问题答案: 您可以使用Java API创建对象流并发送任何可序列化的对象。但您必须注意,这些内容不会通过网络进行加密: 在发送方方面: 在接收端:

  • 问题内容: 我有一个内置的javascript,它可以执行以下操作:通过ajax-> php-> sql获取内容,并在单击内容后在index.php上显示它,将显示新内容。 现在,我想拥有一个在将内容单击到php之后发送数据的函数,该函数将在db中执行某些操作。如何创建将发送数据的功能?谢谢! 这是我的显示内容的代码: }); }` 问题答案: 您可以通过在jQuery.ajax 设置中包含值,将