【问题标题】:Google Apps Script JDBC connection to Azure SQL db - type mapping problemGoogle Apps Script JDBC connection to Azure SQL db - 类型映射问题
【发布时间】:2020-07-12 23:36:56
【问题描述】:

我正在尝试使用 Apps Script JDBC ServiceGoogle Apps 脚本(现在用于测试的独立脚本)连接到我的 Azure SQL 数据库

// connection string (dbUrl): jdbc:sqlserver://...
var conn = Jdbc.getConnection(dbUrl, user, userPwd); 
var stmt = conn.createStatement();
var rst = stmt.executeQuery('SELECT [ID], [DatetimeColumn], [Datetime2Column], [DateColumn], [TimeColumn] FROM [gscript].[testTable]')
// etc.

我在某些(较新的?)SQL 服务器日期/时间数据类型中遇到类型映射问题datetime2datetime。这些在我的脚本 (rst.getObject) 中映射和获取为NVARCHAR,即作为字符串(也由结果集元数据确认,见下文)。

只有 datetime 有效 - 映射为 java.sql.Timestamp

检查数据库和结果集元数据时,得到:

结果集 - SQL Server 数据类型为datetime2datetime 的列:

getColumnClassName:java.lang.String,getColumnType:-9,getColumnTypeName:nvarchar

数据库 - 驱动信息:

getDriverName:Microsoft SQL Server JDBC 驱动程序 2.0 / getDriverVersion:2.0.1803.100 /getDriverMajorVersion:2 /getDriverMinorVersion:0 getJDBCMajorVersion: 4 / getJDBCMinorVersion: 0

有人可以帮忙吗?

驱动版本低有问题吗?能否以某种方式安装较新的驱动程序?

(我的 DBeaver 桌面应用程序显示 Microsoft JDBC Driver for SQL Server (MSSQL) 版本 7.4.1,同一张表没有类型映射问题。)

或者是否有必要避免提到的数据类型而只使用datetime

还是使用 NVARCHAR 并解析脚本中的数据是更好的做法?

编辑:

经过进一步研究,我在SQL Server T-SQL reference 中发现了这一点:“一些下层客户端不支持时间、日期、datetime2 和 datetimeoffset 数据类型...”正在描述我的问题。问题是,这可以在 Google Apps 脚本中以某种方式克服吗?

【问题讨论】:

    标签: sql-server google-apps-script jdbc azure-sql-database mssql-jdbc


    【解决方案1】:

    根据您的发现,Apps Script 的内置服务似乎仅限于 JDBC 2.0。

    如果是这种情况,它只能支持来自 JDBC 1.0/2.0 (see documentation) 的 DATETIMETIMESTAMP 数据类型。因此将不支持相对较新的 SQL Server 数据类型。

    有几种方法可以解决这个问题。

    您可以更改 MSSQL 表的日期/时间字段以使用更兼容的数据类型,但这可能意味着重构您的数据库和任何依赖它的现有代码。

    一种侵入性较小的方法是在数据库服务器上创建存储过程,将这些数据类型转换为 App Script 的 JDBC 服务可以处理和调用存储过程的格式,而不是直接查询表。

    或者,您也可以尝试使用the getter methods on the JdbcResultSet object 将传入数据强制转换为日期/时间类型(不确定这是否可行,但值得一试)。

    【讨论】:

    • 非常感谢。使用这种历史(超过 10 年?)版本的原因是什么?我不明白...
    • @Tom ¯\_(ツ)_/¯ 您必须向 Google 的 Apps 脚本开发团队询问。
    猜你喜欢
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多