Autore Topic: JDBC connector per app android in grado di prendere dati da un db remoto  (Letto 2878 volte)

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Ciao a tutti, girando per il web trovo solo metodi per creare applicazioni android che prendono i dati da un db remoto  attraverso un pagina php! Il mio professore mi ha chiesto di creare un app senza l'ausilio di php, cioe devo fare un collegamento diretto!! Alla fine ho trovato questi codici, che pero richiedono l utilizzo di un jdbc connector e di una web app java. Qualcuno conosce un metodo piu facile?? se non ci sono mi potreste aiutare con questo codice, che alla fine sul telefono funziona ma quando premo login, l app crasha!! grazie mille! comunque vi metto il link della pagina in cui ho trovato le informazioni Android Login activity with MySQL database connection | Code On Cloud

Codice (Java): [Seleziona]
package com.userlogin.ws;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
public class Login {
 public String authentication(String userName,String password){
   
  String retrievedUserName = "";
  String retrievedPassword = "";
  String status = "";
  try{
   
   Class.forName("com.mysql.jdbc.Driver");
   Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/androidlogin","root","chathura");
   PreparedStatement statement =  con.prepareStatement("SELECT * FROM user WHERE username = '"+userName+"'");
   ResultSet result = statement.executeQuery();
   
   while(result.next()){
    retrievedUserName = result.getString("username");
    retrievedPassword = result.getString("password");
    }
   
   if(retrievedUserName.equals(userName)&&retrievedPassword.equals(password)){
    status = "Success!";
   }
   
   else{
    status = "Login fail!!!";
   }
   
  }
  catch(Exception e){
   e.printStackTrace();
  }
  return status;
 
 }
 
}

Codice (Java): [Seleziona]
package com.androidlogin.ws;
 
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class AndroidLoginExampleActivity extends Activity {
 private final String NAMESPACE = "http://ws.userlogin.com";
    private final String URL = "http://111.223.128.10:8085/AndroidLogin/services/Login?wsdl";
    private final String SOAP_ACTION = "http://ws.userlogin.com/authentication";
    private final String METHOD_NAME = "authentication";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button login = (Button) findViewById(R.id.btn_login);
        login.setOnClickListener(new View.OnClickListener() {
   
   public void onClick(View arg0) {
    loginAction();
     
   }
  });
    }
     
    private void loginAction(){
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
     
        EditText userName = (EditText) findViewById(R.id.tf_userName);
        String user_Name = userName.getText().toString();
        EditText userPassword = (EditText) findViewById(R.id.tf_password);
        String user_Password = userPassword.getText().toString();
         
      //Pass value for userName variable of the web service
        PropertyInfo unameProp =new PropertyInfo();
        unameProp.setName("userName");//Define the variable name in the web service method
        unameProp.setValue(user_Name);//set value for userName variable
        unameProp.setType(String.class);//Define the type of the variable
        request.addProperty(unameProp);//Pass properties to the variable
       
      //Pass value for Password variable of the web service
        PropertyInfo passwordProp =new PropertyInfo();
        passwordProp.setName("password");
        passwordProp.setValue(user_Password);
        passwordProp.setType(String.class);
        request.addProperty(passwordProp);
           
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
         
        try{
            androidHttpTransport.call(SOAP_ACTION, envelope);
               SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
                 
               TextView result = (TextView) findViewById(R.id.tv_status);
               result.setText(response.toString());
           
        }
        catch(Exception e){
           
        }
       }
     
}
« Ultima modifica: 01 Marzo 2013, 22:50:20 CET da alex93 »

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:JDBC connector per app android in grado di prendere dati da un db remoto
« Risposta #1 il: 02 Marzo 2013, 10:56:46 CET »
0
Ciao a tutti, girando per il web trovo solo metodi per creare applicazioni android che prendono i dati da un db remoto  attraverso un pagina php! Il mio professore mi ha chiesto di creare un app senza l'ausilio di php, cioe devo fare un collegamento diretto!!

Se è davvero quello che ti ha chiesto il tuo professore è un malato mentale e va internato...

Aldilà di questa considerazione personale, se l'app crasha forse sarebbe il caso che ci alleghi anche il logcat del crash.
« Ultima modifica: 02 Marzo 2013, 10:58:33 CET da Sakazaki »

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:JDBC connector per app android in grado di prendere dati da un db remoto
« Risposta #2 il: 02 Marzo 2013, 15:13:15 CET »
0
Questo è il logcat, comunque dalla tua risposta ho capito che è veramnete impossibile collegarsi direttamente a un database !! Conosci un metodo migliore per collegarmi al database??, a me basta creare un activity di login(utente e password)  e una volta loggato  visualizzare i dati contenuti nel database(nel mio caso il nome degli studenti), non deve fare nulla di piu e nulla di meno. Io non ho problemi con il codice android ma con il collegamento al database, mi basterebbe solo questo( con php è facilissimo, ma purtroppo non posso usarlo)
Codice: [Seleziona]
03-02 13:56:09.737: ERROR/Zygote(32): setreuid() failed. errno: 2
03-02 13:56:23.847: ERROR/Zygote(32): setreuid() failed. errno: 17
03-02 13:56:26.529: ERROR/BatteryService(69): usbOnlinePath not found
03-02 13:56:26.529: ERROR/BatteryService(69): batteryVoltagePath not found
03-02 13:56:26.537: ERROR/BatteryService(69): batteryTemperaturePath not found
03-02 13:56:26.587: ERROR/SurfaceFlinger(69): Couldn't open /sys/power/wait_for_fb_sleep or /sys/power/wait_for_fb_wake
03-02 13:56:27.047: ERROR/SensorService(69): couldn't open device for module sensors (Invalid argument)
03-02 13:56:35.737: ERROR/System(69): Failure starting core service
03-02 13:56:35.737: ERROR/System(69): java.lang.SecurityException
03-02 13:56:35.737: ERROR/System(69):     at android.os.BinderProxy.transact(Native Method)
03-02 13:56:35.737: ERROR/System(69):     at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:146)
03-02 13:56:35.737: ERROR/System(69):     at android.os.ServiceManager.addService(ServiceManager.java:72)
03-02 13:56:35.737: ERROR/System(69):     at com.android.server.ServerThread.run(SystemServer.java:206)
03-02 13:56:35.837: ERROR/EventHub(69): could not get driver version for /dev/input/mouse0, Not a typewriter
03-02 13:56:35.837: ERROR/EventHub(69): could not get driver version for /dev/input/mice, Not a typewriter
03-02 13:56:36.917: ERROR/SoundPool(69): error loading /system/media/audio/ui/Effect_Tick.ogg
03-02 13:56:36.939: ERROR/SoundPool(69): error loading /system/media/audio/ui/KeypressStandard.ogg
03-02 13:56:37.007: ERROR/SoundPool(69): error loading /system/media/audio/ui/KeypressSpacebar.ogg
03-02 13:56:37.007: ERROR/SoundPool(69): error loading /system/media/audio/ui/KeypressDelete.ogg
03-02 13:56:37.007: ERROR/SoundPool(69): error loading /system/media/audio/ui/KeypressReturn.ogg
03-02 13:56:37.317: ERROR/UsbObserver(69): java.lang.NullPointerException
03-02 13:56:37.317: ERROR/UsbObserver(69):     at com.android.server.UsbObserver.init(UsbObserver.java:131)
03-02 13:56:37.317: ERROR/UsbObserver(69):     at com.android.server.UsbObserver.<init>(UsbObserver.java:65)
03-02 13:56:37.317: ERROR/UsbObserver(69):     at com.android.server.ServerThread.run(SystemServer.java:402)
03-02 13:56:38.917: ERROR/ThrottleService(69): Could not open GPS configuration file /etc/gps.conf
03-02 13:56:40.607: ERROR/logwrapper(152): executing /system/bin/tc failed: No such file or directory
03-02 13:56:40.727: ERROR/logwrapper(153): executing /system/bin/tc failed: No such file or directory
03-02 13:56:40.867: ERROR/logwrapper(154): executing /system/bin/tc failed: No such file or directory
03-02 13:57:23.826: ERROR/dalvikvm(329): Could not find class 'org.ksoap2.serialization.SoapObject', referenced from method com.androidlogin.ws.AndroidLoginExampleActivity.loginAction
03-02 13:59:44.597: ERROR/AndroidRuntime(329): FATAL EXCEPTION: main
03-02 13:59:44.597: ERROR/AndroidRuntime(329): java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at com.androidlogin.ws.AndroidLoginExampleActivity.loginAction(AndroidLoginExampleActivity.java:37)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at com.androidlogin.ws.AndroidLoginExampleActivity.access$0(AndroidLoginExampleActivity.java:36)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at com.androidlogin.ws.AndroidLoginExampleActivity$1.onClick(AndroidLoginExampleActivity.java:30)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at android.view.View.performClick(View.java:2485)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at android.view.View$PerformClick.run(View.java:9080)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at android.os.Handler.handleCallback(Handler.java:587)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at android.os.Looper.loop(Looper.java:123)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at android.app.ActivityThread.main(ActivityThread.java:3683)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at java.lang.reflect.Method.invokeNative(Native Method)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at java.lang.reflect.Method.invoke(Method.java:507)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-02 13:59:44.597: ERROR/AndroidRuntime(329):     at dalvik.system.NativeStart.main(Native Method)
03-02 14:04:44.856: ERROR/InputDispatcher(69): channel '406e67c8 com.androidlogin.ws/com.androidlogin.ws.AndroidLoginExampleActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
03-02 14:04:44.856: ERROR/InputDispatcher(69): channel '406e67c8 com.androidlogin.ws/com.androidlogin.ws.AndroidLoginExampleActivity (server)' ~ Channel is unrecoverably broken and will be disposed!


Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:JDBC connector per app android in grado di prendere dati da un db remoto
« Risposta #3 il: 04 Marzo 2013, 16:17:48 CET »
0
per favore qualcuno che mi aiuti! non ignorate il topic!! potrebbe essere di aiuto anche per molti altri utenti!!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:JDBC connector per app android in grado di prendere dati da un db remoto
« Risposta #4 il: 04 Marzo 2013, 16:44:41 CET »
0
per favore qualcuno che mi aiuti! non ignorate il topic!! potrebbe essere di aiuto anche per molti altri utenti!!

Fatti aiutare dal tuo prof. genio della lampada no? :D

Comunque per quell'errore, assicurati di aver messo il jar della libreria kSoap dentro la cartella libs.
« Ultima modifica: 04 Marzo 2013, 16:56:02 CET da Ricky` »

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:JDBC connector per app android in grado di prendere dati da un db remoto
« Risposta #5 il: 04 Marzo 2013, 18:39:37 CET »
0
non mi aiuta perche non sa poco android e so piu cose io che lui!! inoltre chiedo anche se questo che sto usando è il metodo giusto o no?? se ne esistono altri di metodi??

Post unito: 06 Marzo 2013, 17:06:01 CET
Allora, rispiego meglio la mia applicazione cosi da chiarire meglio quello che devo fare:
Io sto cercando di creare un applicazione che prende dei dati da un database e li visualizza sul tablet(per il momento deve fare solo questo). Navigando per il web ho visto che molti utilizzano php come intermediaro tra android e mysql. Il mio obbiettivo è non utilizzare php, quindi qualcuno potrebbe consigliarmi un metodo efficace??? qualche consiglio?? almeno per iniziare!!

Post unito: 06 Marzo 2013, 17:13:54 CET
uppp
« Ultima modifica: 06 Marzo 2013, 17:13:54 CET da alex93, Reason: Merged DoublePost »

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
jdbc connection in un progetto android!!
« Risposta #6 il: 06 Marzo 2013, 21:49:06 CET »
0
Qualcuno conosce qualche piccolo esempio di applicazione android che si connette al database remoto, utilizzando il jdbc?? navigando su internet non si trova niente(solo web seervices e php) a me basterebbe solo un piccolo aiuto per riuscire a connettere l applicazione al database remoto!!!

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:JDBC connector per app android in grado di prendere dati da un db remoto
« Risposta #7 il: 06 Marzo 2013, 21:56:16 CET »
0
ok ho capito non esiste modo, chi riesce a farlo diventa richissimo perche riesce a fare un codice innovativo non presente in rete!!

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:JDBC connector per app android in grado di prendere dati da un db remoto
« Risposta #8 il: 07 Marzo 2013, 08:31:02 CET »
0
ok ho capito non esiste modo, chi riesce a farlo diventa richissimo perche riesce a fare un codice innovativo non presente in rete!!
No, si farà solo deridere dal mondo intero.
Collegarsi da un dispositivo direttamente su un db remoto via driver JDBC (necessariamente di tipo 3 e 4 100% java tra l'altro, perché ci stanno pure quelli di tipo 2 che essendo ibridi voglio proprio vedere come fanno a girare su android) è la cosa più stupida che si possa anche solo concepire.
Prova a pensarci: un driver jdbc apre una sessione su un database, se la tua app che si collega in questo modo avesse 100'000 installazioni e fosse così di successo che tutti la usano quotidianamente (e ce ne sono con numeri anche più alti) quante sessioni verrebbero aperte sul database? Hai idea di che stress verrebbe scaricato sul db in termini di interrogazioni e transazioni aperte? Di che dimensionamento dovrebbe avere per riuscire a gestire un simile numero di cursori aperti? E di che numero di sessioni zombie si ritroverebbe perché i dispositivi "perdono il segnale"?

Se nessuno lo fa, ne prende nemmeno lontanamente in considerazione di farlo, un motivo c'è: è inefficiente e dispendioso.

Il sistema cardine in simili scenari è sempre passare attraverso un server intermedio che si fa carico di collegarsi al database, dialogando con l'app sul dispositivo in modo più leggero (via json? via soap? c'è l'imbarazzo della scelta). Non vuoi usare php/jsp + json? (perché no poi davvero non lo capisco...) fatti dei web service sul server da invocare e parserizzati l'xml di ritorno.


Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:JDBC connector per app android in grado di prendere dati da un db remoto
« Risposta #9 il: 07 Marzo 2013, 12:02:08 CET »
0
Ma oltre all'efficienza c'è anche un discorso di sicurezza perchè dovresti cablare nell'app le credenziali per accedere al db.
Per conferire permessi diversi a utenti diversi, cosa faresti? crei un utente su db per ogni utente??

Comunque alex93, non sarebbe niente di innovativo e niente con cui arricchirsi. Se cerchi bene su google (cosa che probabilmente non hai fatto), troverai anche che qualcuno ci è effettivamente riuscito ;)

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:JDBC connector per app android in grado di prendere dati da un db remoto
« Risposta #10 il: 07 Marzo 2013, 12:12:10 CET »
0
Ma oltre all'efficienza c'è anche un discorso di sicurezza perchè dovresti cablare nell'app le credenziali per accedere al db.
Per conferire permessi diversi a utenti diversi, cosa faresti? crei un utente su db per ogni utente??
Per carità, partivo dal presupposto che ci fosse una credenziale unica... già così mi sembrava abbastanza!  ;-)

Citazione da: Ricky`
Comunque alex93, non sarebbe niente di innovativo e niente con cui arricchirsi. Se cerchi bene su google (cosa che probabilmente non hai fatto), troverai anche che qualcuno ci è effettivamente riuscito ;)
E il fatto che non risponde al nome di Kim DotCom la dice lunga su quanto c'ha guadagnato sopra :-P

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:JDBC connector per app android in grado di prendere dati da un db remoto
« Risposta #11 il: 09 Marzo 2013, 16:49:25 CET »
0
Allora se vi chiedete perche non uso php è perche mi è stato vietato!! cmq su internet ho cercato e nessuno ha trovato una soluzione (tutti so felici fi aver scoperto php)!! poi penso che a un esame di 5 superiore portare cm tesina un progetto in android cn in mezzo php non è il massimo!! se voi sapete un modo migliore soap o web services, aiutatemia trovare una guida o mi consigliate voi, è impossibile iniziare da zero!!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:JDBC connector per app android in grado di prendere dati da un db remoto
« Risposta #12 il: 09 Marzo 2013, 19:05:43 CET »
0
Allora se vi chiedete perche non uso php è perche mi è stato vietato!! cmq su internet ho cercato e nessuno ha trovato una soluzione (tutti so felici fi aver scoperto php)!! poi penso che a un esame di 5 superiore portare cm tesina un progetto in android cn in mezzo php non è il massimo!! se voi sapete un modo migliore soap o web services, aiutatemia trovare una guida o mi consigliate voi, è impossibile iniziare da zero!!

C'è poco da arrabbiarsi, se qualcuno avesse saputo come fare, te lo avrebbe spiegato.

Il fatto che in rete non si trovino soluzioni, dovrebbe farti capire che molto probabilmente è la via sbagliata da seguire.

Il php che dovresti mettere "nella tesina" non ha niente a che vedere con android, sta sul server e ti permette di accedere al database. E' php ma potrebbe essere qualsiasi linguaggio server side, ciò non cambia in niente la tua applicazione android.

(tra l'altro non ho capito questo astio verso il php)

Quello che, secondo me, potresti fare è andare da chi ti ha vietato il php, spiegare che un accesso "diretto" da android ad un database su un server non è generalmente usato e nemmeno consigliato, per cui se proprio php non è permesso, ci sono diverse altre strade analoghe, per esempio fatti un account app-engine e usa python nello stesso modo in cui useresti php.

Dimenticavo... se vuoi un esempio con un webservice, ti posto il primo risultato che ho trovato sul web. C'è un'unico problema... è un web service fatto in php.
Connect Android to MySQL Database Tutorial
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store