2012-06-05 5 views
1

J'essaie de connecter mon Android à mon serveur as400. Malheureusement, lorsque je clique sur le bouton Ma Connexion, le pilote n'est pas chargé et je ne sais pas pourquoi.Application Android se connectant à une base de données as400

Voici mon est le code:

package hello.world; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 


public class HelloworldActivity extends Activity { 
    /** Called when the activity is first created. */ 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 


    public void Connexion(View view) throws SQLException { 
     System.out.println("Tentative de connexion à la base de donnée."); //Connexion 
     String driver = "com.ibm.as400.access.AS400JDBCDriver"; 

     String url = "jdbc:as400://BEAUFIX;transaction isolation=read uncommitted;date format=iso;naming=system;libraries=*LIBL"; 
     Connection conn = null; 
     String userName = "GMAOBD60"; 
     String password = "GMAOBD60"; 

     try { 
      Class.forName(driver).newInstance(); 
      conn = DriverManager.getConnection(url,userName,password); 
      System.out.println("Connected to the database"); 
      conn.close(); 
      System.out.println("Disconnected from database"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println("ERROR"); 

} 
} 
} 

Voici mon code XMD:

<Button android:id="@+id/Connexion" android:layout_width="196dp" android:layout_height="wrap_content" android:layout_marginLeft="50dp" android:layout_marginTop="100dp" android:text="@string/Connexion" android:layerType="hardware" android:onClick="Connexion" />

Et voici mon journal d'erreur:

06-05 07:18:56.100: W/System.err(564): java.lang.ClassNotFoundException: com.ibm.as400.access.AS400JDBCDriver 
06-05 07:18:56.155: W/System.err(564): at java.lang.Class.classForName(Native Method) 
06-05 07:18:56.180: W/System.err(564): at java.lang.Class.forName(Class.java:217) 
06-05 07:18:56.212: W/System.err(564): at java.lang.Class.forName(Class.java:172) 
06-05 07:18:56.241: W/System.err(564): at hello.world.HelloworldActivity.Connexion(HelloworldActivity.java:33) 
06-05 07:18:56.271: W/System.err(564): at java.lang.reflect.Method.invokeNative(Native Method) 
06-05 07:18:56.290: W/System.err(564): at java.lang.reflect.Method.invoke(Method.java:511) 
06-05 07:18:56.321: W/System.err(564): at android.view.View$1.onClick(View.java:3039) 
06-05 07:18:56.340: W/System.err(564): at android.view.View.performClick(View.java:3511) 
06-05 07:18:56.371: W/System.err(564): at android.view.View$PerformClick.run(View.java:14105) 
06-05 07:18:56.371: W/System.err(564): at android.os.Handler.handleCallback(Handler.java:605) 
06-05 07:18:56.380: W/System.err(564): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-05 07:18:56.391: W/System.err(564): at android.os.Looper.loop(Looper.java:137) 
06-05 07:18:56.391: W/System.err(564): at android.app.ActivityThread.main(ActivityThread.java:4424) 
06-05 07:18:56.401: W/System.err(564): at java.lang.reflect.Method.invokeNative(Native Method) 
06-05 07:18:56.410: W/System.err(564): at java.lang.reflect.Method.invoke(Method.java:511) 
06-05 07:18:56.421: W/System.err(564): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-05 07:18:56.431: W/System.err(564): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-05 07:18:56.431: W/System.err(564): at dalvik.system.NativeStart.main(Native Method) 
06-05 07:18:56.441: W/System.err(564): Caused by: java.lang.NoClassDefFoundError: com/ibm/as400/access/AS400JDBCDriver 
06-05 07:18:56.460: W/System.err(564): ... 18 more 
06-05 07:18:56.460: W/System.err(564): Caused by: java.lang.ClassNotFoundException: com.ibm.as400.access.AS400JDBCDriver 
06-05 07:18:56.481: W/System.err(564): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
06-05 07:18:56.492: W/System.err(564): at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
06-05 07:18:56.492: W/System.err(564): at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
06-05 07:18:56.500: W/System.err(564): ... 18 more 

Aussi j'ai essayé beaucoup de choses mais je suis toujours arrivé à une erreur. Aidez-moi s'il vous plaît, je veux que cela fonctionne :(

Et non, je ne l'ai pas oublié d'importer mon jt400.jar qui est le « com.ibm.as400.access.AS400JDBCDriver »

Je vous remercie à l'avance, Aurelian

+0

Je suis sur le point d'essayer ça. D'après ce que je comprends, vous n'avez pas besoin d'une licence DB2 Connect pour l'utiliser, mais vous en avez besoin si vous voulez utiliser le fournisseur .NET dans un client de bureau. J'ai réussi à me connecter à SQL Server, Oracle et MySQL en utilisant JDBC sur Android. – Monstieur

Répondre

1

J'ai personnellement pas essayé, mais la boîte à outils IBM pour Java (de jt400.jar) peut ne pas être compatible avec la machine virtuelle Java Dalvik. Dalvik est pas une implémentation compatible à 100% de la machine virtuelle Java.

Êtes-vous sûr que vous voulez les implications de poids et de sécurité d'une bibliothèque comme la boîte à outils distribuée sur un appareil mobile? Je recommanderais comme erver (AS/400) application pour fournir des services aux clients mobiles tout en gérant la sécurité, la mise en cache, etc.

Un cadre comme Grails qui peut être déployé nativement sur l'AS/400 rend l'application serveur un jeu d'enfant. Et traiter avec des services XML ou JSON via HTTP rendra l'application mobile beaucoup plus facile, plus robuste et plus facile à maintenir.

J'ai une application similaire en production supportant plus d'une centaine de clients Windows CE/Mobile (Motorola/Symbol handhelds). Je suis impatient de porter le client sur Android une fois le matériel disponible.

Questions connexes