【问题标题】:com.microsoft.sqlserver.jdbc.SQLServerException: The "variant" data type is not supportedcom.microsoft.sqlserver.jdbc.SQLServerException:不支持“变体”数据类型
【发布时间】:2016-04-13 00:43:44
【问题描述】:

我想创建显示 MSSQL 服务器版本的简单 Java 代码:

public void testMSSQLVersion() throws Exception
    {
        System.out.println("\nTesting SQL query for MSSQL version\n");

        try
        {
            // Load the SQLServerDriver class, build the
            // connection string, and get a connection
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = "jdbc:sqlserver://localhost:1433;"
                + "database=master;"
                + "user=admin;"
                + "password=dss!Q;";
            Connection con = DriverManager.getConnection(connectionUrl);
            System.out.println("Connected.");

            // Create and execute an SQL statement that returns some data.
            String SQL = "SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY('productlevel'), SERVERPROPERTY('edition')";
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(SQL);

            // Iterate through the data in the result set and display it.
            while (rs.next())
            {
                System.out.println(rs.getString(1));
            }

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

但是当我运行代码时,我得到了这个错误:

com.microsoft.sqlserver.jdbc.SQLServerException: The "variant" data type is not supported.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
    at com.microsoft.sqlserver.jdbc.TypeInfo$Builder$16.apply(dtv.java:1996)
    at com.microsoft.sqlserver.jdbc.TypeInfo$Builder.build(dtv.java:2158)

这个问题有解决办法吗?

【问题讨论】:

    标签: java sql-server sql-server-2008


    【解决方案1】:
    SELECT ProductVersion = CAST(SERVERPROPERTY('ProductVersion') AS NVARCHAR(128)),
           ProductLevel = CAST(SERVERPROPERTY('ProductLevel') AS NVARCHAR(128)),
           Edition = CAST(SERVERPROPERTY('Edition') AS NVARCHAR(128))
    

    【讨论】:

    • 还有其他我可以使用的 SQL 查询吗?也没有列名?
    • SELECT @@version ?
    • 是的,但我想将结果分成几列
    • 在这种情况下使用SERVERPROPERTY
    • 关于此 SQL 返回什么信息或它如何回答问题的一些上下文会很好
    【解决方案2】:

    更简单的方法是从数据库端更改数据类型。

    进入表的设计,将列(productversion、productlevel & edition)的列数据类型更改为NVARCHAR(128)。

    我希望这对你有用。编码愉快!!!

    【讨论】:

      【解决方案3】:

      我只是通过更正sql server的连接器版本来解决:

          <dependency>
              <groupId>com.microsoft.sqlserver</groupId>
              <artifactId>mssql-jdbc</artifactId>
               <version>9.2.1.jre8</version>
              <scope>runtime</scope>
          </dependency>
      

      【讨论】:

        猜你喜欢
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        • 2021-07-13
        • 1970-01-01
        • 2020-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多