Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1851 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Applet -> Connexion SQL Server

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Applet -> Connexion SQL Server

n°166942
BiOxyde
Posté le 27-06-2002 à 10:31:32  profilanswer
 

Je dois me connecter à une Base de Donnée MS SQL server présente sur le réseau local via un applet.
1- Est ce que l'applet doit OBLIGATOIREMENT se trouver sur le même serveur que la Base de donnée,à cause de ses fonctionnalités limitées et restrictions d'accès?
2-Si non, quel est le script de connexion à cette base de donnée?
 
Pour info, voici mon code:
 
import java.net.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
 
 
public class JdbcConn extends Applet
{
    Choice raid;
    Choice customerid;
    Connection connection;
    Statement statement;
     
 public void init()
 {
        raid = new Choice();
        customerid = new Choice();
  try
        {
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver" );
         DriverManager.registerDriver (new sun.jdbc.odbc.JdbcOdbcDriver());
            connection = DriverManager.getConnection("jdbc:odbc:le_nom_de_ma_dsn","mon_login","mon_password" );
   statement = connection.createStatement();
            String SQL = "select ...";
   ResultSet resultset = statement.executeQuery(SQL);
   while(resultset.next())
   {
    raid.addItem(resultset.getString("toto" ));
    customerid.addItem(resultset.getString("tata" ));
    System.out.println(resultset.getString("toto" ));
    System.out.println(resultset.getString("tata" ));
   }
   add(toto);
      add(tata);
  }
  catch(Exception e)
  {
   System.out.println(e);
  }
 }
 
 
 public void paint(Graphics g)
 {
 }
}


Message édité par BiOxyde le 27-06-2002 à 10:31:58
mood
Publicité
Posté le 27-06-2002 à 10:31:32  profilanswer
 

n°166953
darklord
You're welcome
Posté le 27-06-2002 à 10:39:57  profilanswer
 

réponse 1 - Non  
réponse 2 - Comme n'importe quel applis Java qui se connecte à une BD (si ce n'est que tu dois changer les drivers oracle mais ca c'est un autre problème)
 
Pour 1 tu dois signer ton applet avec JARSigner en lui filant les droits dont elle a besoin (ici visiblement se connecter en TCP sur le host X port 1521).
 
Pour un intranet ce n'est pas très restrectif et je connais plus d'une boite qui procède de la sorte.
 
Mais bon je cherche toujours un BON tuto pour signer une applet pour ce genre de problèmes. Toujours pas trouvé :(


---------------
Just because you feel good does not make you right
n°166961
BiOxyde
Posté le 27-06-2002 à 10:46:17  profilanswer
 

Citation :

dois changer les drivers oracle mais


C'est à dire?
Pour l'applet je dois la faire certifier pour l'utiliser en local, c'est ca que tu veut dire? sinon je n'aurai pas les droits d'accès?

n°166975
darklord
You're welcome
Posté le 27-06-2002 à 10:56:47  profilanswer
 

Bioxyde a écrit a écrit :

Citation :

dois changer les drivers oracle mais


C'est à dire?
Pour l'applet je dois la faire certifier pour l'utiliser en local, c'est ca que tu veut dire? sinon je n'aurai pas les droits d'accès?




 
je n'ai plus les spec en tête mais il me semble que pour une applet il te faut un driver de type 4. Oracle les fournit. Pour la signature tu dois simplement ajouter une police spéciale qui donne accès à ton applet pour le host machin chose. Ensuite tu signes avec jarsigner
 
lorsque tes clients voient ton applet pour la première fois, il ont un certificat de sécurité (un peu comme les activeX ou autre) et si ils acceptent ton applet récupère le droit que tu as défini dnas ton fichier policy.
 
Une autre solution est d'éditer le ficher java.policy qu'il y a dans la home directory de tes users et donner le droit de connection à ta classe mais bon si tu as 500 machines dans ton intranet ...


---------------
Just because you feel good does not make you right
n°167052
El Scorcho
Posté le 27-06-2002 à 11:31:37  profilanswer
 

Sinon tu peux toujours passer par une servlet se trouvant sur le même serveur que l'applet (si moteur de servlet il y a). Et tu lis ce que renvoie ta servlet (c elle qui s'occupe des requêtes) comme si tu lisais un simple fichier texte, en utilisant new URL(adresse_servlet).openStream(), etc...
Je l'ai déjà fait, ça marche bien... Et ça enlève pas mal de pbs de sécurité.

n°167110
BiOxyde
Posté le 27-06-2002 à 11:59:16  profilanswer
 

To DarkLord
Je commence a mieux comprendre.
C bien un driver de type IV qu'il faut pour utilise l'applet. Le problème c que ces drivers sont payants:
http://industry.java.sun.com/products/jdbc/drivers
Du moins j'ai pas trouvé de drivers de type IV pour SQL Server gratuit. Ce driver JDBC ne serait t il pas fourni sur le CD de MS SQL Server?
 
To el scorcho
Pour le servlet ca peut être une bonne solution de repli. T'as un exemple, un bon tuto sous la main?
 
Merci

n°168809
BiOxyde
Posté le 01-07-2002 à 11:27:22  profilanswer
 

Voila ou j'en suis:
j'ai recup les drivers de type 4 de MS SQL Server 2000, j'ai mis mon class et les rep du driver jdbc dans un cab que j'ai signé numériquement (+ certificat).
Le problème c'est que quand je lance ma page web, j ai une erreur du type:
 
######################
 
ava.util.zip.ZipException: ZIP file must have at least one entry
 
 at java.util.zip.ZipOutputStream.finish(ZipOutputStream.java:292)
 
 at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:134)
 
 at java.util.zip.ZipOutputStream.close(ZipOutputStream.java:310)
 
 at sun.plugin.cache.CachedJarLoader.decompress(CachedJarLoader.java:442)
 
 at sun.plugin.cache.CachedJarLoader.access$500(CachedJarLoader.java:56)
 
 at sun.plugin.cache.CachedJarLoader$5.run(CachedJarLoader.java:344)
 
 at java.security.AccessController.doPrivileged(Native Method)
 
 at sun.plugin.cache.Cache.privileged(Cache.java:230)
 
 at sun.plugin.cache.CachedJarLoader.download(CachedJarLoader.java:329)
 
 at sun.plugin.cache.CachedJarLoader.load(CachedJarLoader.java:131)
 
 at sun.plugin.cache.JarCache.get(JarCache.java:177)
 
 at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(CachedJarURLConnection.java:71)
 
 at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(CachedJarURLConnection.java:56)
 
 at sun.misc.URLClassPath$JarLoader.getJarFile(URLClassPath.java:498)
 
 at sun.misc.URLClassPath$JarLoader.<init>(URLClassPath.java:459)
 
 at sun.misc.URLClassPath$2.run(URLClassPath.java:255)
 
 at java.security.AccessController.doPrivileged(Native Method)
 
 at sun.misc.URLClassPath.getLoader(URLClassPath.java:244)
 
 at sun.misc.URLClassPath.getLoader(URLClassPath.java:221)
 
 at sun.misc.URLClassPath.getResource(URLClassPath.java:134)
 
 at java.net.URLClassLoader$1.run(URLClassLoader.java:190)
 
 at java.security.AccessController.doPrivileged(Native Method)
 
 at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
 
 at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:132)
 
 at sun.plugin.security.PluginClassLoader.findClass(PluginClassLoader.java:189)
 
 at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
 
 at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:112)
 
 at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
 
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
 
 at java.lang.Class.forName0(Native Method)
 
 at java.lang.Class.forName(Class.java:130)
 
 at Jdbc.init(Jdbc.java:22)
 
 at sun.applet.AppletPanel.run(AppletPanel.java:341)
 
 at java.lang.Thread.run(Thread.java:536)
 
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
 
######################
 
1-Il me dit donc que je dois au moins avoir un point d'entrée dans mon fichier cab. C quoi un point d'entrée? est ce que je dois mettre tous les .class du driver JDBC SQL Server au même niveau que mon fichier principal class ou je dois les laisser dans leur répertoires respectifs?
2-Conséquence du 1: il ne trouve pas le driver JDBC SQL Server.
 
Merci de votre aide
 

n°168812
darklord
You're welcome
Posté le 01-07-2002 à 11:28:34  profilanswer
 

ton fichier zip est vide ou un des fichiers contenus dans ton jar est un fichier zip et il est vide. Vérifie tes jars avec winzip


---------------
Just because you feel good does not make you right
n°168848
BiOxyde
Posté le 01-07-2002 à 11:55:07  profilanswer
 

Ok j'ai trouvé l'erreur  du 1, c du a des guillemets en trop.
J'avais mis ca:
<APPLET CODE=Jdbc.class ARCHIVE="Jdbc.cab" WIDTH=500 HEIGHT=500></APPLET>
 
au lieu de ca:
<APPLET CODE=Jdbc.class ARCHIVE=Jdbc.cab WIDTH=500 HEIGHT=500></APPLET>
 
Mais il ne trouve tjrs pas le driver SQL Server . Dois je mettre tous les class au meme niveau que Jdbc.class?

n°168851
darklord
You're welcome
Posté le 01-07-2002 à 11:55:52  profilanswer
 

mais c quoi ce machin cab là ? et ton fichier Jdbc.class n'est pas dans un package ?
 
c'est des drivers officiels ?
 


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le 01-07-2002 à 11:55:52  profilanswer
 

n°168855
BiOxyde
Posté le 01-07-2002 à 12:04:35  profilanswer
 

Pour pouvoir utiliser le driver de type 4 de SQL Server dan une archi 3tier, je suis obligé de signée mon applet. Or pour signer une applet pour IE ,il faut utiliser Signcode et une arrchive de type CAB (cabinet Windows) et non JAR.
Concernant les drivers, c les drivers JDBC officiels de MS pour SQL Server 2000. Moi j'aurais besoin de ceux pour SQL Server 7.0 mais je les trouve pas, ou du moins je pense qu'ils existent pas.

n°168935
darklord
You're welcome
Posté le 01-07-2002 à 14:14:24  profilanswer
 

Jdbc.class c'est le main de ton applet ?


---------------
Just because you feel good does not make you right
n°168961
BiOxyde
Posté le 01-07-2002 à 14:39:34  profilanswer
 

oui

n°168970
darklord
You're welcome
Posté le 01-07-2002 à 14:46:50  profilanswer
 

et il n'est pas un package? Et c'est quoi la trace de l'erreur exactement?


---------------
Just because you feel good does not make you right
n°168975
BiOxyde
Posté le 01-07-2002 à 14:58:33  profilanswer
 

Il ne fait pas partie d'u package.
et l'erreur est: java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
Voici mon source:
 
import java.net.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
 
 
public class Jdbc extends Applet
{
 Choice raid;
    Choice customerid;
    Connection conn;
    Statement state;
 
 public void init()
 {
        raid = new Choice();
        customerid = new Choice();
  try
        {
       
         Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver" );  
   Connection conn = DriverManager.getConnection ("jdbc:microsoft:sqlserver://xxxxx:1433;User=xxx;Password=xxx;DatabaseName=xxx" );  
         
               
   state = conn.createStatement();
            String SQL = "select raid,customerid from ra where raid=30128";
            ResultSet rs = state.executeQuery(SQL);
   while(rs.next())
   {
    raid.addItem(rs.getString("raid" ));
    customerid.addItem(rs.getString("customerid" ));
    System.out.println(rs.getString("raid" ));
    System.out.println(rs.getString("customerid" ));
   }
  }
  catch(Exception e)
  {
   System.out.println(e);
  }
  add(raid);
        add(customerid);
 }
 
 public void paint(Graphics g)
 {
 }
}


Message édité par BiOxyde le 01-07-2002 à 14:59:21
n°168977
darklord
You're welcome
Posté le 01-07-2002 à 15:01:30  profilanswer
 

bin l'erreur est claire non? Il y a un répoertoire com dans ton cab ?


---------------
Just because you feel good does not make you right
n°169093
BiOxyde
Posté le 01-07-2002 à 17:08:57  profilanswer
 

oui y a com/microsoft/sqlserver/SQLServerDriver.class
et tous les autres fichiers et rep.
Donc pour résumer la situation:
Voici le code de ma page HTML qui loade Jdbc.class qui est à la racine du Jdbc.cab:
 
<HTML>
 
<HEAD>
</HEAD>
 
<BODY BGCOLOR="000000">
<CENTER>
<APPLET CODE=Jdbc.class ARCHIVE=Jdbc.cab WIDTH=500 HEIGHT=500></APPLET>
</CENTER>
</BODY>
 
</HTML>
 
Voici le contenu de l'alias de IIS:
Jdbc.html
Jdbc.cab
 
et voici le code erreur
 
java.util.zip.ZipException: ZIP file must have at least one entry
 
 at java.util.zip.ZipOutputStream.finish(ZipOutputStream.java:292)
|
|
|
 
 at java.lang.Thread.run(Thread.java:536)
 
charger : classe Jdbc.class introuvable.
 
java.lang.ClassNotFoundException: Jdbc.class
 
 at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:151)
|
|
|
 at java.lang.Thread.run(Thread.java:536)
 
Caused by: java.io.IOException: open HTTP connection failed.
 
 at sun.applet.AppletClassLoader.getBytes(AppletClassLoader.java:224)
 
|
|
|
 at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:138)
 
 ... 10 more


Message édité par BiOxyde le 01-07-2002 à 17:15:08
n°170281
BiOxyde
Posté le 03-07-2002 à 10:04:49  profilanswer
 

Bon j y suis arrivé.
Mais pour arriver au résultat désespérant que le driver JDBC SQL SERVER 2000 ne tourne pas pour la version 7.0
Je vais essayer d'utiliser le driver jdbc.odbc de type 1 pour voir si ca peut tourner. Mais pour ca faut signer mon applet. Y a t'il un moyen que quand l'user ouvre la page html pour la première fois, ca lui ouvre le certificat pour qu'il puisse valider les droits de l'applet. C pour un intranet, et je veut pas le faire signer par Verisign.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Applet -> Connexion SQL Server

 

Sujets relatifs
[PHP,MySQL] Connexion persistante ou non ?[VBA] -> Procedures stockées SQL Server
[SQL] MySQL ne sait pas calculer ?[SQL]server SQL gratuit ?
[PHP/SQL] Afficher IMAGES prise dans une table sur 2 COLONNESPHP + SQL = GALERE LoL
Conversion fichier Excel vers SQL[SQL] Commande sql pour changer la valeur de certain champ
Plus de sujets relatifs à : Applet -> Connexion SQL Server


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR