我有一个包含字段名称和jdbc类型代码的数组.(你可以找到的那些int代码
http://download.oracle.com/javase/1.4.2/docs/api/constant-values.html#java.sql.Types.BIT
我使用4级驱动程序.
我无法弄清楚如何向驱动程序询问相应的SQL(DDL)类型名称.它在jdbc和原生方言中很有用.
我有
(CustomerId,1)(客户名称,-8)
而且我要
(customerId,INT)(customerId,VARCHAR(200))
我在哪里可以找到帮助我的功能?我通过zxJDBC在jython中使用jdbc,所以我可以使用所有java和python DB API 2.0功能.
Kar*_*thi 37
具体回答"从java.sql.Type代码获取SQL类型名称",如果你使用的是Java版本,可以做反思,这里是一个小的实用方法几乎做同样的事情:
public Map<Integer, String> getAllJdbcTypeNames() {
Map<Integer, String> result = new HashMap<Integer, String>();
for (Field field : Types.class.getFields()) {
result.put((Integer)field.get(null), field.getName());
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
添加import java.lang.reflect.Field;到导入声明.完成后,只需按如下方式使用:
...
Map<Integer, String> jdbcMappings = getAllJdbcTypeNames();
String typeName = jdbcMappings.get(-5); // now that will return BIGINT
...
Run Code Online (Sandbox Code Playgroud)
YoY*_*oYo 29
JDBCType&SQLType随着API的改进,从Java 8和JDBC 4.2开始,我们已经JDBCType和SQLType,并且与其他一些示例一样,可以简单地使用如下:
String typeName = JDBCType.valueOf(-5).getName();
Run Code Online (Sandbox Code Playgroud)
但当然,为什么要使用数字类型开头.养成习惯,并从数字切换到以下enum定义的常量JDBCType:
String typeName = JDBCType.BIGINT.getName();
Run Code Online (Sandbox Code Playgroud)
etvoilà!
但是,这可能不足以在DDL中使用足够好的东西......您可能需要实现供应商特定的翻译.例如,在Oracle的情况下,您可能需要考虑转换VARCHAR为VARCHAR2.
小智 12
public static String getSqlTypeName(int type) {
switch (type) {
case Types.BIT:
return "BIT";
case Types.TINYINT:
return "TINYINT";
case Types.SMALLINT:
return "SMALLINT";
case Types.INTEGER:
return "INTEGER";
case Types.BIGINT:
return "BIGINT";
case Types.FLOAT:
return "FLOAT";
case Types.REAL:
return "REAL";
case Types.DOUBLE:
return "DOUBLE";
case Types.NUMERIC:
return "NUMERIC";
case Types.DECIMAL:
return "DECIMAL";
case Types.CHAR:
return "CHAR";
case Types.VARCHAR:
return "VARCHAR";
case Types.LONGVARCHAR:
return "LONGVARCHAR";
case Types.DATE:
return "DATE";
case Types.TIME:
return "TIME";
case Types.TIMESTAMP:
return "TIMESTAMP";
case Types.BINARY:
return "BINARY";
case Types.VARBINARY:
return "VARBINARY";
case Types.LONGVARBINARY:
return "LONGVARBINARY";
case Types.NULL:
return "NULL";
case Types.OTHER:
return "OTHER";
case Types.JAVA_OBJECT:
return "JAVA_OBJECT";
case Types.DISTINCT:
return "DISTINCT";
case Types.STRUCT:
return "STRUCT";
case Types.ARRAY:
return "ARRAY";
case Types.BLOB:
return "BLOB";
case Types.CLOB:
return "CLOB";
case Types.REF:
return "REF";
case Types.DATALINK:
return "DATALINK";
case Types.BOOLEAN:
return "BOOLEAN";
case Types.ROWID:
return "ROWID";
case Types.NCHAR:
return "NCHAR";
case Types.NVARCHAR:
return "NVARCHAR";
case Types.LONGNVARCHAR:
return "LONGNVARCHAR";
case Types.NCLOB:
return "NCLOB";
case Types.SQLXML:
return "SQLXML";
}
return "?";
}
Run Code Online (Sandbox Code Playgroud)
你需要ResultSetMetaData当前的对象ResultSet.你可以得到它getMetaData().迭代列并调用foreach列方法
你的ResultSetMetaData.
i 表示列号(从1开始).
joo*_*ten -1
您似乎正在使用一些尚未发布的 JDBC 元数据方法。我相信您看到的是列的名称以及 JDBC类型常量,您可以从中派生列类型。查看java.sql API以了解有关如何获取更多元数据的更多信息。
| 归档时间: |
|
| 查看次数: |
37022 次 |
| 最近记录: |