如何使用jdbc在teradata上获取表创建脚本?

如何使用jdbc在teradata上获取表创建脚本?,jdbc,metadata,resultset,teradata,Jdbc,Metadata,Resultset,Teradata,我想用jdbc在teradata上创建表脚本。 我使用了在stackoverflow上找到的代码: StringBuilder sb = new StringBuilder( 1024 ); if ( columnCount > 0 ) { sb.append( "Create table ").append( rsmd.getTableName( 1 ) ).append( " ( " );

我想用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( " ) " );
StringBuilder sb=新的StringBuilder(1024);
如果(columnCount>0){
sb.append(“创建表”).append(rsmd.getTableName(1)).append(“”);
}
对于(inti=1;i1)sb.追加(“,”;
String columnName=rsmd.getColumnLabel(i);
String columnType=rsmd.getColumnTypeName(i);
sb.append(columnName).append(“”).append(columnType);
int precision=rsmd_ddl.getPrecision(i);
如果(精度!=0){
sb.append(“”)。append(precision)。append(“”);
}
}//对于列
某人加上(“)”;
但问题是:当类型为
VARCHAR
时,精度为
0
,但在teradata中,列为
VARCHAR(100)
,但如何查找
100


谢谢。

getPrecision表示小数,您应该使用getColumnDisplaySize表示字符

Teradata JDBC参考资料中有很多示例:


示例T20100JD显示了如何提取元数据。

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

Teradata JDBC参考资料中有很多示例:

示例T20100JD显示了如何提取元数据


getPrecision表示小数,您应该使用getColumnDisplaySize表示字符

Teradata在其JDBC驱动程序实现中存在一个缺陷/bug,因为它们没有正确实现接口契约

接口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()


getPrecision表示小数,您应该使用getColumnDisplaySize表示字符

Teradata在其JDBC驱动程序实现中存在一个缺陷/bug,因为它们没有正确实现接口契约

接口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()