Italian B4J : MySql & Aruba

MARCO C.

Active Member
Licensed User
Buongiorno Ragazzi,
ultimamente utilizzo B4J e Mysql su un db presente su Hosting Web gratuito della Netsons.org.
Ftp e MySql ... tutto OK.
Per il MySql utilizzavo il seguente codice

B4X:
#Region Project Attributes
    #MainFormWidth: 900
    #MainFormHeight: 600
    #AdditionalJar: mysql-connector-java-5.1.39.jar
#End Region

Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form
    
    Dim  SQLCon As SQL

    'Impostazioni per Accesso Diretto al Database
    Type MyDirectDatabase (dbhost As String, _
              dbport As String, _
              dbname As String, _
              dbusername As String , _
              dbpassword As String)
    Dim dbMySQL As MyDirectDatabase
    
    
  dbMySQL.dbhost ="webapp3.netsons.net" 
  dbMySQL.dbport = 3306 '
 dbMySQL.dbname ="yqfgqahvs_xxx"
  dbMySQL.dbusername ="xxxyyyttt"
 dbMySQL.dbpassword = "password"

per la connessione il seguente codice

B4X:
Sub ConnectDatabase
    '    MySQL Connection Attempt
    Try
        'SQLCon.Initialize2("com.mysql.jdbc.Driver", "jdbc:mysql://" & dbMySQL.dbhost & ":" & dbMySQL.dbport & "/" & dbMySQL.dbname & "?characterEncoding=utf8",dbMySQL.dbusername,dbMySQL.dbpassword)
        SQLCon.InitializeAsync("SQLCon" ,"com.mysql.jdbc.Driver", "jdbc:mysql://" & dbMySQL.dbhost & ":" & dbMySQL.dbport & "/" & dbMySQL.dbname & "?characterEncoding=utf8",dbMySQL.dbusername,dbMySQL.dbpassword)

    Catch
        ' handle Error, like
        Log("ERROR: " & LastException.Message)
    End Try

End Sub

Ora ho la necessità di accedere ad un DB MySql fornito da Aruba e
pensavo semplicemente di modificare i dati di accessi con quelli che mi ha fornito Aruba ...esempio:

dbMySQL.dbhost ="65.159.151.120"
dbMySQL.dbport = "3306" "
dbMySQL.dbname ="sql990779_2"
dbMySQL.dbusername ="sql990779"
dbMySQL.dbpassword = "e991c99e"
'

Ma mi segnala mancata connessione :(
Qualcuno ha mai lavorato con Aruba ??

Grazie in anticipo
 

MARCO C.

Active Member
Licensed User
Scusate , il log dell'errore è il seguente :


Waiting for debugger to connect...
Program started.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:988)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:341)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2251)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at anywheresoftware.b4j.objects.SQL.Initialize2(SQL.java:57)
at anywheresoftware.b4j.objects.SQL$1.call(SQL.java:98)
at anywheresoftware.b4j.objects.SQL$1.call(SQL.java:1)
at anywheresoftware.b4a.BA$4.run(BA.java:272)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)
... 23 more
 

udg

Expert
Licensed User
Longtime User
In genere, per motivi di sicurezza, non è concesso raggiungere direttamente il DBMS (in questo caso mySQL sulla porta standard 3306).
In pratica devi provare a verificare se l'utente con cui cerchi di connetterti è abilitato all'accesso remoto sul DB.
Poi che non siano attivi filtri o altro, ad esempio un firewall che blocchi quella porta.
 

MARCO C.

Active Member
Licensed User
ne avevamo già discusso tempo fa ed avevo scritto uno script in PHP per fare proprio questo, eccoti il link alla discussione:
https://www.b4x.com/android/forum/threads/mysql-su-aruba.62942/

Per qualsiasi cosa chiedi pure, probabilmente lo script in PHP è da aggiornare se utilizzi PHP 7.0

Sergio
Grazie Sergio ,
Ma se non sbaglio avevo già fatto un test con questa tecnica mista in Php e B4A , e se non ricordo male avevo auto dei problemi nel caso di select che mi restituisce troppo risultati .... Se non ricordo male troncava qualcosa .
Comunque , mi metto sotto, ora però con B4J e ti dico.
Grazie ancora
 
Top