Moh*_*hti 1 java mysql database jdbc resultset
我正在构建一个报告工具,我需要在远程数据库上执行查询并将结果集存储在我自己的数据库中(因为我没有远程数据库的写权限,我还需要缓存结果以防止进一步执行).此外,我需要此功能,因此我可以将两个结果集连接在一起,并根据生成的结果生成结果.
现在,我的问题是我不知道如何基于jdbc ResultSet创建表.是否有任何开源工具或脚本可以处理这个问题?
我的应用程序基于Spring 3.1.0并使用JDBC来查询本地和远程数据库.我想存储结果的本地数据库是MySQL 5.5.20.(这是一个存储在MySQL中的好主意吗?它是否提供了足够的性能?)
我们可以从结果集中提取最近的匹配结构并构造一个表.
但就表名,键,引擎类型,字段是否可为空等等而言,这不是精确的副本.
以下代码段可帮助您以获得适当结果的方式继续操作.
String sql = "select * from visitors";
ResultSet rs = stmt.executeQuery( sql );
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
String tableName = null;
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.getPrecision( i );
if ( precision != 0 ) {
sb.append( "( " ).append( precision ).append( " )" );
}
} // for columns
sb.append( " ) " );
System.out.println( sb.toString() );
Run Code Online (Sandbox Code Playgroud)
执行上面的部分代码,打印下面的字符串:
Create table visitors ( ip VARCHAR( 6 ), bro VARCHAR( 6 ) )
Run Code Online (Sandbox Code Playgroud)
让我希望这有助于您继续前进.
类似的例子可以在以下位置找到:使用ResultSet创建表???
更新1:
如何处理仅存在于一个数据库中而不存在于另一个数据库中的类型
仅依赖于客户端应用程序的结果集时,您无法执行任何操作.
它应始终是主要选择查询,从复合数据类型来选择适当的数据等geometry,address等
Examle:select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )
举一个geometry数据类型的例子:
MySQL有空间支持的定义.但我不确定它们与SQL Server的空间数据实现相比有多好.
geometry是复合数据类型,因此无法通过直接查询检索.
您需要依赖函数来解析来自此类数据列的数据,并以可读,可识别的数据格式返回.
示例:create table geom ( g geometry );
将ResultSet从select g from geom使用JAVA转换为create table语句将导致unknwon列的数据类型g.
Create table geom ( g UNKNOWN )
Run Code Online (Sandbox Code Playgroud)
在列上使用x(g),y(g)协调函数g将返回正确且可接受的数据类型.
查询select x(g), y(g) from geom将转换为
Create table ( x(g) DOUBLE( 23, 31 ), y(g) DOUBLE( 23, 31 ) )
Run Code Online (Sandbox Code Playgroud)
更新2:
可以使用关系组合多个表生成结果集.结果集字段也有可能由表达式及其别名组成.因此,生成的列字段或别名的数据类型是动态决定的.元数据不知道查询中的表,列名及其原始/父数据类型的确切名称.
所以,这是不可能的
注意:这也适用于所有其他跨数据库特定的数据类型,如NVARCHAR等.但是,请参阅此帖子,以替代MySQL中的NVARCHAR用法.
在尝试这种动态数据迁移之前,客户端应用程序应该知道相应的数据类型并相应地使用它们.
另外,有关详细信息,请参阅Microsoft Access,MySQL和SQL Server的数据类型和范围.
| 归档时间: |
|
| 查看次数: |
14489 次 |
| 最近记录: |