1

我想用 jdbc 在 teradata 上获取表创建脚本。我使用了在 stackoverflow 上找到的这段代码:

   StringBuilder sb = new StringBuilder( 1024 );
                if ( columnCount > 0 ) { 
                    sb.append( "Create table ").append( rsmd.getTableName( 1 )  ).append( " ( " );
                }
                for ( int i = 1; i <= columnCount; i ++ ) {
                    if ( i > 1 ) sb.append( ", " );
                    String columnName = rsmd.getColumnLabel( i );
                    String columnType = rsmd.getColumnTypeName( i );

                    sb.append( columnName ).append( " " ).append( columnType );

                    int precision = rsmd_ddl.getPrecision( i );
                    if ( precision != 0 ) {
                        sb.append( "( " ).append( precision  ).append( " )" );
                    }
                } // for columns
                sb.append( " ) " );

但问题是:当类型是VARCHAR精度时,0但在 teradata 中,列是VARCHAR(100),但我怎么能找到100

谢谢。

4

2 回答 2

3

getPrecision 用于小数,您应该将 getColumnDisplaySize 用于字符。

Teradata JDBC 参考中有很多示例:http: //developer.teradata.com/doc/connectivity/jdbc/reference/current/frameset.html

样本 T20100JD 展示了如何提取元数据。

于 2013-07-15T14:29:16.420 回答
2

getPrecision 用于小数,您应该将 getColumnDisplaySize 用于字符

Teradata 在他们的 JDBC 驱动程序实现中存在缺陷/错误,因为他们没有正确实现接口的契约。

接口 java.sql.ResultSetMetaData 的 Java API 文档明确定义了具有不同数据类型的 getPrecision() 方法的预期行为:


int getPrecision(int column)
                 throws SQLException

Get the designated column's specified column size. 
For numeric data, this is the maximum precision. 
For character data, this is the length in characters. 
...

为 VARCHAR 列调用 getPrecision() 时,Teradata JDBC 驱动程序错误地返回 0。因此,在使用 Teradata JDBC 时,必须使用 getColumnDisplaySize()。

于 2016-10-18T19:56:09.587 回答