2

我有一个通过 JDBC 连接到 Google Cloud SQL 实例的 Google Apps 脚本。我正在使用准备好的语句,并且在尝试设置 NULL 值时遇到了麻烦。要设置任何其他类型的值,您只需执行以下操作:

 preparedStatement.setFloat(3, myFloatVar);

但我无法让 setNull() 工作。它应该采用 Java 数据类型作为参数。 文档链接

我尝试了以下方法:

    preparedStatement.setNull(4,"java.sql.Types.DECIMAL");
    preparedStatement.setNull(4,java.sql.Types.DECIMAL);  <-- This is how you would do it in Java, I believe
    preparedStatement.setNull(4);
    preparedStatement.setNull(4,null);
    preparedStatement.setNull(4,"null");

它会给我一个“发生服务器错误,请稍后再试”,或者类似于“找不到方法(类)(类)setNull(数字,null)”,具体取决于我的尝试。

所以我一直在通过将事物设置为 0 而不是 null 来解决它,但如果有这个选项会很好!

4

2 回答 2

0

根据我从文档中了解到的情况,预期的第二个参数是一个整数。JDBC 服务应该有一个“ENUM”来列出选项,就像其他服务一样,如图表内容服务。

我想这是一个很好的问题报告候选人。如果您确实在Apps Script 问题跟踪器上打开了一个,请在评论中分享链接。

现在,由于缺少正确的 ENUM,您应该在那里尝试不同的整数。我想你会幸运的尝试几次。例如

preparedStatement.setNull(4, 1);
//or preparedStatement.setNull(4, 2); //and so on..
于 2013-06-22T18:09:23.623 回答
0

我在这篇文章中找到了解决方案:https ://stackoverflow.com/a/46501699/3294762

preparedStatement.setNull(col_index, 0); // 0 = java.sql.Types.NULL
preparedStatement.setNull(col_index, 3); // 3 = java.sql.Types.DECIMAL
preparedStatement.setNull(col_index, 4); // 4 = java.sql.Types.INTEGER
preparedStatement.setNull(col_index, 6); // 6 = java.sql.Types.FLOAT
于 2020-07-06T14:36:03.347 回答