Hola a todos.
Siguiendo el tutotal de José Aguilar (https://www.b4x.com/android/forum/threads/tutorial-acceder-a-base-de-datos-con-jrdc2.130278/), he conseguido hacer funcionar el ejemplo con mis consultas desde B4A a un servidor sql server a través de B4J. Hasta aquí todo bien.
El problema viene cuando creo el 'paquete autónomo':
Cuando lanzo la consulta desde la app, en el servidor aparece:
Y cuando se produce el time out:
Por lo que leo, entiendo que el problema está en la codificación de la respuesta de sql server, que en este caso es Cp1252.
En diferentes ejemplos, he visto dos maneras de indicarla:
Aun así, el error es el mismo.
Buscando la solución, veo que el fichero Charsets.properies contiene las equivalencias necesarias, así que añado:
El fichero se copia en la carpeta build\bin, pero sigue igual.
Cuando estás empezando, es muy frustrante estos errores sin sentido, ya que el programa funciona correctamente desde el IDE pero no desde el paquete autónomo.
Gracias de antemano.
Un saludo desde Murcia.
Siguiendo el tutotal de José Aguilar (https://www.b4x.com/android/forum/threads/tutorial-acceder-a-base-de-datos-con-jrdc2.130278/), he conseguido hacer funcionar el ejemplo con mis consultas desde B4A a un servidor sql server a través de B4J. Hasta aquí todo bien.
El problema viene cuando creo el 'paquete autónomo':
- si ejecuto el .exe (doble click), se abre y se cierra.
- si ejecuto el exe como administrador, se ejecuta y escucha el puerto, aunque cuando hago la consulta, se produce un error.
- si ejecuto el .bat, se ejecuta en modo depuración, se comporta igual (escucha y error al recibir la consulta)
Cuando lanzo la consulta desde la app, en el servidor aparece:
log:
Feb 26, 2023 1:24:18 PM com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource
INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 20000, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 1hgeby9au13b6pej1k2q8df|7e0e6aa2, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> net.sourceforge.jtds.jdbc.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 1hgeby9au13b6pej1k2q8df|7e0e6aa2, idleConnectionTestPeriod -> 600, initialPoolSize -> 3, jdbcUrl -> jdbc:jtds:sqlserver://./ExitERP;instance=SQLSERVER;namedPipe=true;appname=zeta_conecta_db;charset=Cp1252;characterEncoding=Cp1252;, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 1800, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 150, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {password=******, user=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> true, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
(TimeoutException) com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@629b2d02 -- timeout at awaitAvailable()
Command: , took: 20050ms, client=192.168.1.10
Y cuando se produce el time out:
time out:
Feb 26, 2023 1:25:03 PM com.mchange.v2.resourcepool.BasicResourcePool
WARNING: com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@3dfe9fde -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
java.sql.SQLException: Could not find a Java charset equivalent to DB charset Cp1252.
at b4j/net.sourceforge.jtds.jdbc.JtdsConnection.loadCharset(Unknown Source)
at b4j/net.sourceforge.jtds.jdbc.JtdsConnection.<init>(Unknown Source)
at b4j/net.sourceforge.jtds.jdbc.Driver.connect(Unknown Source)
at b4j/com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(Unknown Source)
at b4j/com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(Unknown Source)
at b4j/com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(Unknown Source)
at b4j/com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(Unknown Source)
at b4j/com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(Unknown Source)
at b4j/com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(Unknown Source)
at b4j/com.mchange.v2.resourcepool.BasicResourcePool.access$700(Unknown Source)
at b4j/com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(Unknown Source)
at b4j/com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(Unknown Source)
Por lo que leo, entiendo que el problema está en la codificación de la respuesta de sql server, que en este caso es Cp1252.
error:
java.sql.SQLException: Could not find a Java charset equivalent to DB charset Cp1252.
En diferentes ejemplos, he visto dos maneras de indicarla:
- charset=Cp1252
- characterEncoding=Cp1252
B4X:
JdbcUrl=jdbc:jtds:sqlserver://./nombre_de_mi_base_datos;instance=SQLSERVER;namedPipe=true;appname=nombre_mi_app;charset=Cp1252;characterEncoding=Cp1252;
Aun así, el error es el mismo.
Buscando la solución, veo que el fichero Charsets.properies contiene las equivalencias necesarias, así que añado:
B4X:
#CustomBuildAction: After Packager, %WINDIR%\System32\robocopy.exe, ..\ temp\build\bin\ Charsets.properties
El fichero se copia en la carpeta build\bin, pero sigue igual.
Cuando estás empezando, es muy frustrante estos errores sin sentido, ya que el programa funciona correctamente desde el IDE pero no desde el paquete autónomo.
Gracias de antemano.
Un saludo desde Murcia.
Last edited: