Comment créer une table basée sur JDBC Jeu de résultats
Je suis la construction d'un outil de reporting et j'ai besoin pour exécuter des requêtes sur des bases de données distantes et de stocker le résultat dans ma propre base de données (car je n'ai pas la permission d'écrire sur des bases de données distantes et aussi j'ai besoin de mettre en cache les résultats afin de prévenir d'autres exécutions). De plus, j'ai besoin de cette fonctionnalité, afin que je puisse joindre les deux ensembles de résultats ensemble et de générer des résultats basés sur les résultats générés.
Maintenant, mon problème est que je ne sais pas comment faire pour CRÉER une TABLE basée sur jdbc ResultSet. Est-il open source outils ou des scripts qui gère cela?
Mon application est basée sur le Printemps 3.1.0 et utilise JDBC pour la requête locale et à distance des bases de données. Ma base de données locale que je veux stocker les résultats est MySQL 5.5.20. (Est-ce une bonne idée de stocker dans MySQL? Ne fournit pas les performances suffisantes?)
- En fait, j'ai aussi besoin d'insérer le résultat dans la table générée, après la création de la table.
- Double Possible de Comment puis-je utiliser JDBC pour copier le schéma d'une base de données à l'autre sans l'aide d'Apache DDLUtils?
Vous devez vous connecter pour publier un commentaire.
Nous pouvons extraire les plus proche de correspondance la structure dans le jeu de résultats et de construire un tableau.
Mais cela ne peut pas être la réplique exacte, en termes de nom de table, les clés, le type de moteur, si un champ est d'accepter les valeurs null ou pas, etc..
Extrait de code suivant vous permet de procéder de manière à obtenir un résultat approprié.
L'exécution avec au-dessus de la partie du code, imprimé chaîne suivante:
Laissez-moi espère que cela vous aide à aller plus loin.
Exemple similaire peut être trouvé à: Créer une table en utilisant le jeu de résultats ???
Mise à JOUR de 1:
Vous ne pouvez pas faire n'importe quoi lors de dépendre uniquement sur un jeu de résultats à côté client demande.
Il devrait toujours être le principale requête select qui sélectionne les données appropriées à partir d'un composite de type de données comme
geometry
,address
, etc.Exemple:
select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )
Pour donner un exemple de
geometry
type de données:MySQL a des définitions pour son Spatiales Support. Mais je ne suis pas sûr de savoir comment beaucoup ils sont bons par rapport à SQL Server de la mise en œuvre de la répartition Spatiale des Données.
geometry
est un composite de type de données et ne peut donc pas être récupérées par une requête directe.Vous avez besoin d'dépendant de la fonction(s) qui traite les données à partir de ces données de colonnes et de retour dans lisible, identifiables formats de données.
Exemple:
create table geom ( g geometry );
La conversion de jeu de résultats à partir
select g from geom
à l'aide de JAVA à une instruction create table entraînerait avec ununknwon
type de données pour la colonneg
.À l'aide de
x(g)
,y(g)
coordonner les fonctions sur la colonneg
sera de retour appropriée et acceptable types de données.Requête
select x(g), y(g) from geom
seront convertis enMise à JOUR 2:
Un jeu de résultats peut être générée dans la combinaison de plusieurs tables à l'aide des relations. Il ya aussi une chance que le jeu de résultats les champs sont composés d'expressions et de leurs alias. Par conséquent, les types de données de la colonne résultante des champs ou des alias de a décidé dynamique. Les métadonnées ne sont pas conscients de l'exacte des noms des tables, les noms de colonnes et leur origine/parent types de données à partir de la requête.
Donc, il n'est pas possible d'obtenir
Note: Cela s'applique également à tous les autres de la croix-base de données les types de données spécifiques, comme NVARCHAR, etc..
Mais, veuillez vous référer à cette annonce pour une alternative à NVARCHAR utilisation de MySQL.
Avant de tenter une telle dynamique de migration des données, il convient d'applications client la responsabilité de connaître l'équivalent des types de données et de les utiliser en conséquence.
Aussi, reportez-vous à types de Données et de plages de Microsoft Access, MySQL et SQL Server pour plus d'informations.
C'est peut-être un peu délicat, mais je pense que cela peut vous aider.
JDBC ResultSet les objets ont une
getMetaData()
méthode qui retourne unResultSetMetaData
objet qui contient, entre autres choses, les noms de colonnes et les types de colonne. Vous pourriez faire quelque chose comme ceci:Vous pouvez construire de cette façon valide SQL DML qui a les colonnes dont vous avez besoin. Après cela, tout ce qui reste est de remplir le tableau.
Espère que cela vous aide.
Vous avez probablement le jeu de résultats basée sur l'exécution d'une requête select.Maintenant, au lieu d'obtenir le jeu de résultats, puis itérer pour créer la table, nous pouvons également exécuter une requête unique pour la création de la table.
Votre requête d'origine:
select * from table_name
Au lieu d'exécution du présent et de l'itération, l'exécution de cette
create table new_table_name as (select * from table_name)
Comme sepcified ici vous pouvez le faire dans la plaine de SQL comme ceci:
Si vous voulez une solution générale à traiter avec des types de données qui sont différents entre les bases de données, mais même type en java, vous pouvez utiliser JDBCType.
Il suffit de prendre Ravinder Reddy solution et modifier cette ligne:
à
Espère que cela aide.