Affichage des articles dont le libellé est conversion. Afficher tous les articles
Affichage des articles dont le libellé est conversion. Afficher tous les articles

lundi 24 mai 2010

Installer SQL Server et tester les types java jdbc


Objectif

Installer SQL Server express 2005 et copier le schéma Scott d’Oracle

Introduction

Utiliser une vraie base de données chez Microsoft, c’est possible : SQL Server ( ex Sybase pour ceux qui connaissent l’histoire (http://en.wikipedia.org/wiki/Microsoft_SQL_Server de codename yukon ;) pour la version 2005 donc ).
Autant essayer cette dernière avec le driver jdbc fourni par Microsoft ( il y en a autre chez sourceforge (http://jtds.sourceforge.net/ )

Installer « sql server express 2005 »

Pour ce faire, aller sur le site de Microsoft, télécharger la base de données et toutes les dépendances nécessaires ( i.e. mdac ). Je conseille fortement l’installation de SSMSEE « sql server management studio express edition » pour gérer la base de données installée, l’utilisation de la base de données « adventureWorks » étant pour le moins hasardeuse sans configuration.
Pour jdbc, il faut télécharger « sqljdbc_1.2.2828.100_fra.exe » qui est en fait un zip à décompresser. Récupérer le jar ( sqljdbc.jar ) et placer le fichier « sqljdbc_auth.dll » dans le répertoire [win]/system32 … Un peu de configuration sur les connexions réseau et redémarrez, cela pourrait fonctionner correctement.

Lister les types de données compatibles java

Lister les types de données pour les bases installées permet de voir plusieurs choses :

  • Il existe un type de données sql_variant qui rappelle fortement le type variant utilisé avec VB.
  • Parmi les types dates, SQL Serveur ne reconnaît que le type « timestamp », pas les types « date » et « time » ( voir plus loin pour les problèmes liés )
  • Le type long binaire s’appelle « image »


Essayer de copier le schéma Scott

Pour ce faire, l’outil que j’ai développé va très bien ( en théorie ),
Choisir la base en entrée, celle en sortie ( l’outil affiche les tables liées, on peut facilement supprimer des tables existantes ) et cliquer sur « copier »
Trois tables sont copiées ( « account », « bonus » et « dept » ), l’outil stoppe sur le problème de conversion du format « date » de la colonne « hiredate » de la table « emp ».

Résolution du problème

Pour résoudre le problème, il faut forcer une conversion du type 91 oracle « date » dans le type 93 Sql Server « timestamp », ce qui avait déjà été fait pour la gestion des types numériques dans les bases Dbase ( type 8 = java Double )

Pour approfondir les sujets





mardi 11 mai 2010

transcodage de données inter-bases


Objectif

Transcoder des types de données de bases de données à base de données.

Introduction

Ces derniers temps, je m’occupe à un projet auquel je pense depuis une bonne dizaine d’années : un convertisseur de bases de données multi-bases en java. Sql Server utilise un produit spécifique dénommé DTS pour migrer des bases.
Parler de l’application et de ses fonctionnalités fera l’objet d’un autre commentaire, mais pour l’instant, regardons le seul problème qui me reste à gérer : les transcodages de données inter-bases.

Les types de données jdbc / sql / java

Depuis l’élaboration de jdbc v 1.0, il y a correspondance entre la plupart des types de données java et leurs types SQL ( ou jdbc ) correspondants. Le problème tient au fait que les types de données jdbc/sql ne portent pas le même nom, ni le même format.
Problème 1 : le type jdbc n° 8 : le DOUBLE, NUMERIC sous DBASE, FLOAT avec Oracle et REAL [(m,d)] sous MySql. L’exploration des méta-données permet de récupérer les éventuels paramètres. Pour gérer le transcodage, il suffit de connaître la correspondance des types de champs entre la base source et la base destination.
Problème 2 : les types n’existant pas dans certains SGBD comme les LOB avec l’antique base de données fichier mono-table DBASE.
Etc.

Image illustrant le problème

L’image ci-dessous reprend les types de données présents ( donc pas forcément tous représentés ) dans l’éventuel schéma utilisateur.
Cet exemple affiche les colonnes dataType jdbc, type java, sous Access, sous DBase, sous MySQL, et sous Oracle.

Images illustrant la solution

Utiliser un PreparedStatement en java serait illusoire, étant donné que la définition de la table n’est pas hard-codée en java, néanmoins, l’utilisation des ordres DDL SQL standards fonctionne très bien comme l’illustre les ordres ci-dessous avec une des tables du schema Scott des bases de données Oracle :
CREATE TABLE EMP ( EMPNO DECIMAL(4,0) ,  ENAME char(10) ,  JOB char(9) ,  MGR DECIMAL(4,0) ,  HIREDATE DATETIME ,  SAL DECIMAL(7,2) ,  COMM DECIMAL(7,2) ,  DEPTNO DECIMAL(2,0) , primary key ( EMPNO ) )
Et
insert into EMP values ('7369' , 'SMITH' , 'CLERK' , '7902' , '1980-12-17 00:00:00.0' , '800.00' ,  null  , '20' )


Pour approfondir les sujets