Spanish Conexión "fácil" a MS SQL Server

Una vez más, gracias por vuestro tiempo.

Os cuento cómo voy con jRCD2, a ver si me podéis ayudar. He realizado todos los pasos del tutorial y a la hora de ejecutar el test desde el browser (Chrome en mi caso) obtengo esto:

1.png


En la ventana de depuración de B4J, cuando ejecuto el programa, obtengo esto:

2.png


... y esto cuando ejecuto el test desde Chrome (copio y pego):

oct 07, 2020 10:24:25 AM com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource
INFORMACIÓN: 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 -> 1hge14cadlkzjb1nytqj4|63d4e2ba, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> net.sourceforge.jtds.jdbc.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 1hge14cadlkzjb1nytqj4|63d4e2ba, idleConnectionTestPeriod -> 600, initialPoolSize -> 3, jdbcUrl -> null, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 1800, maxIdleTimeExcessConnections -> 0, maxPoo...
oct 07, 2020 10:24:55 AM com.mchange.v2.resourcepool.BasicResourcePool
ADVERTENCIA: com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@4c05fd97 -- 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: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:315)
at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:285)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
oct 07, 2020 10:24:55 AM com.mchange.v2.resourcepool.BasicResourcePool
ADVERTENCIA: Having failed to acquire a resource, com.mchange.v2.resourcepool.BasicResourcePool@704d6e83 is interrupting all Threads waiting on a resource to check out. Will try again in response to new client requests.
oct 07, 2020 10:24:55 AM com.mchange.v2.resourcepool.BasicResourcePool
ADVERTENCIA: com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@2c895909 -- 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: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:315)
at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:285)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
oct 07, 2020 10:24:55 AM com.mchange.v2.resourcepool.BasicResourcePool
ADVERTENCIA: Having failed to acquire a resource, com.mchange.v2.resourcepool.BasicResourcePool@704d6e83 is interrupting all Threads waiting on a resource to check out. Will try again in response to new client requests.
oct 07, 2020 10:24:55 AM com.mchange.v2.resourcepool.BasicResourcePool
ADVERTENCIA: com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@1d6f13c5 -- 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: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:315)
at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:285)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
oct 07, 2020 10:24:55 AM com.mchange.v2.resourcepool.BasicResourcePool

ADVERTENCIA: Having failed to acquire a resource, com.mchange.v2.resourcepool.BasicResourcePool@704d6e83 is interrupting all Threads waiting on a resource to check out. Will try again in response to new client requests.


... ¿me podéis decir qué me falta o qué estoy haciendo mal?

Mil gracias.
 

josejad

Expert
Licensed User
Longtime User
Pega tu archivo config de jrdc2
 
#Lines starting with '#' are comments.
#Backslash character at the end of line means that the command continues in the next line.

#DATABASE CONFIGURATION
DriverClass=net.sourceforge.jtds.jdbc.Driver
#JdbcUrl=jdbc:jtds:sqlserver://192.168.1.44/TestSQLServer
User=sa
Password=(editado)
#Java server port
ServerPort=17178

#example of MS SQL Server configuration:
#DriverClass=net.sourceforge.jtds.jdbc.Driver
#JdbcUrl=jdbc:jtds:sqlserver://192.168.1.44/TestSQLServer

#example of postegres configuration:
#JdbcUrl=jdbc:postgresql://localhost/test
#DriverClass=org.postgresql.Driver

#SQL COMMANDS
sql.create_table=CREATE TABLE IF NOT EXISTS animals (\
id INTEGER PRIMARY KEY AUTO_INCREMENT,\
name CHAR(30) NOT NULL,\
image BLOB)
sql.insert_animal=INSERT INTO animals VALUES (null, ?,?)
sql.select_animal=SELECT name, image, id FROM animals WHERE id = ?;
sql.create_table=CREATE TABLE article (col1 numeric(10,4) ,col2 text);
sql.select=select * from article
sql.insert=INSERT INTO article VALUES(?, ?)
 

josejad

Expert
Licensed User
Longtime User
No has des comentado la segunda línea?
Es esa la ip de tu servidor ms sql? Admite conexiones externas?
#JdbcUrl=jdbc:jtds:sqlserver://192.168.1.44/TestSQLServer
 
¡Ups! Cierto; no me había dado cuenta.

Perfecto; ahora me dice que ya establece la conexión; con lo cual entiendo que el jRDC2 ya lo tengo operativo. En cuanto pueda continuo con la parte de B4A y os planteo dudas que seguro que me saldrán.

Gracias otra vez.
 
¡Buenos días! Aquí sigo con mis pruebas. Al ejecutar la app que aparece en el tutorial para B4A, me aparece este error:

ResponseError. Reason: java.net.UnknownServiceException: CLEARTEXT communication to 192.168.1.44 not permitted by network security policy, Response:
ERROR: java.net.UnknownServiceException: CLEARTEXT communication to 192.168.1.44 not permitted by network security policy


Comentar que en el Process_Globals he modificado esta línea:

Private const rdcLink As String = "http://192.168.0.102/:17178/rdc"

... para cambiar la IP de mi PC, donde está el SQL Server:

Private const rdcLink As String = "http://192.168.1.44/:17178/rdc"

¿Sabéis a qué puede ser debido este error? El puerto 1433 ya lo tenía abierto y, aunque no sé muy bien para qué es, por si acaso he abierto también el 17178.

Gracias de antemano
 

josejad

Expert
Licensed User
Longtime User
Hola Alex, usa el buscador, verás que es muy potente.
Con solo poner CLEARTEXT salen muchos resultados.
Añade al manifest lo que indica aeric en este post

 
La verdad es que me estoy desanimando... veo bastante complicada una simple lectura a una base de datos.

He hecho los cambios en el Manifest, y ahora el error que obtengo es este:

ResponseError. Reason: java.net.SocketTimeoutException: failed to connect to /192.168.1.44 (port 80) from /192.168.1.46 (port 38760) after 30000ms, Response:
ERROR: java.net.SocketTimeoutException: failed to connect to /192.168.1.44 (port 80) from /192.168.1.46 (port 38760) after 30000ms


Disculpadme si pregunto cosas muy básicas, pero soy muy muy principiante en este entorno. Espero "doblegar la curva" de mi aprendizaje muy pronto :)

Saludos.
 

TILogistic

Expert
Licensed User
Longtime User
La verdad es que me estoy desanimando... veo bastante complicada una simple lectura a una base de datos.

He hecho los cambios en el Manifest, y ahora el error que obtengo es este:

ResponseError. Reason: java.net.SocketTimeoutException: failed to connect to /192.168.1.44 (port 80) from /192.168.1.46 (port 38760) after 30000ms, Response:
ERROR: java.net.SocketTimeoutException: failed to connect to /192.168.1.44 (port 80) from /192.168.1.46 (port 38760) after 30000ms


Disculpadme si pregunto cosas muy básicas, pero soy muy muy principiante en este entorno. Espero "doblegar la curva" de mi aprendizaje muy pronto :)

Saludos.

Tu JRDC2 funciona, el problema es que no logra conectarse a 192.168.1.44 (port 80) desde /192.168.1.46, y expira el tiempo de espera de conexión 30000ms.

Para ayudarte mejor sube un ejemplo de tu proyecto para indicarte donde esta problema.

Saludos,
 
A ver... como he estado haciendo pruebas y cambiado cosas, he "vuelto a empezar"; os cuento lo que he hecho:
  1. He vuelto a bajar el programa que viene con el tutorial
  2. Cambio la IP para que coincida con la de mi servidor
  3. Y añado la línea CreateResourceFromFile(Macro, Core.NetworkClearText) al Manifest
Como no me deja adjuntar el archivo al post (me dice que es muy grande), lo subo aquí.

Ahora el error que me aparece es este:

Registro conectado a: Xiaomi MI 9
--------- beginning of system
--------- beginning of main
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Pause, UserClosed = false **
Error occurred on line: 35 (DBRequestManager)
java.lang.Exception: array not expected...
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
*** Service (httputils2service) Create ***
** Service (httputils2service) Start **
ResponseError. Reason: java.sql.SQLException: Invalid parameter index 1., Response: <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 java.sql.SQLException: Invalid parameter index 1.</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /rdc. Reason:
<pre> java.sql.SQLException: Invalid parameter index 1.</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a><hr/>
</body>
</html>
ERROR: <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 java.sql.SQLException: Invalid parameter index 1.</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /rdc. Reason:
<pre> java.sql.SQLException: Invalid parameter index 1.</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a><hr/>
</body>
</html>
** Activity (main) Pause, UserClosed = false **
** Service (starter) Destroy (ignored)**
** Service (httputils2service) Destroy **
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
*** Service (httputils2service) Create ***
** Service (httputils2service) Start **
ResponseError. Reason: java.sql.SQLException: Invalid parameter index 1., Response: <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 java.sql.SQLException: Invalid parameter index 1.</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /rdc. Reason:
<pre> java.sql.SQLException: Invalid parameter index 1.</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a><hr/>
</body>
</html>
ERROR: <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 java.sql.SQLException: Invalid parameter index 1.</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /rdc. Reason:
<pre> java.sql.SQLException: Invalid parameter index 1.</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a><hr/>
</body>
</html>
** Activity (main) Pause, UserClosed = false **



Espero no ser muy pesado :)
 

Bladimir Silva Toro

Active Member
Licensed User
Longtime User
Hola

Acabo de ver tu proyecto en B4A y miro tu error: ResponseError. Reason: java.sql.SQLException: Invalid parameter index 1., Response: <html>

1602272332237.png


Y cuando miro tus consultas SQL en archivo Config del jRDC2 no veo ninguna que diga select_employees, mira tus consultas SQL

sql.insert_animal=INSERT INTO animals VALUES (null, ?,?)
sql.select_animal=SELECT name, image, id FROM animals WHERE id = ?;
sql.create_table=CREATE TABLE article (col1 numeric(10,4) ,col2 text);
sql.select=select * from article
sql.insert=INSERT INTO article VALUES(?, ?)

Y si vas al tutorial en la ultima pagina en el punto 6 te das cuenta que debes hacer una consulta SQL en el archivo Config del jRDC2 y compilar ambos proyectos (B4J y B4A) hasta de colores lo hice para una mejor comprensión, descarga también el ejemplo del jRDC2 que deje aquí: https://www.b4x.com/android/forum/t...-android-to-ms-sql-server-using-jrdc2.114856/

1602271689866.png


Tu dices: La verdad es que me estoy desanimando... veo bastante complicada una simple lectura a una base de datos. Yo te respondo has cometido muchos errores en las configuraciones y no pones cuidado en los detalles

Cuídate y animo no todo en la vida es fácil y el primer paso es el mas duro por eso como dicen en mi tierra "Métele verraquera"
 
Buenos días:

Antes que nada, agradezco el tiempo que has empleado en mi problema. Como bien has dicho, mi error estaba en que no tenía definida la consulta en el config.properties pero no fue debido a "no cuidar los detalles" (créeme que los cuido ;)) sino que en primera instancia había tecleado todo el proyecto B4J y luego me di cuenta de que estaba subido aquí; lo bajé y se me despistó cambiar esto. Y, como soy novato aquí, el error que me lanzaba no me dio ninguna pista sobre lo que estaba pasando.

Por curiosidad... ¿cómo te diste cuenta, si solo subí el proyecto B4A y no mi jRDC2?

Bueno; corregido esto, ya he conseguido ejecutar la consulta y me ha funcionado perfectamente.

En cuanto a que el método es complicado... pues todo en la vida es relativo, pero entre tener que estar corriendo un proyecto que escuche las peticiones al SQL, y además tener que escribir allí las consultas y compilarlo cada vez "versus" hacer referencia a una librería y poder escribir libremente las consultas en mi proyecto B4A, pues sinceramente prefiero lo segundo. Pero si, como dijisteis, la conexión directa falla mucho, pues tendré que tirar por aquí.

Con lo cual, me asaltan nuevas dudas, más que de programación, de organización, que os planteo aquí para ver cómo las resolvéis vosotros:

  • Tengo como diez BBDDs de SQL Server de diez clientes diferentes en mi PC. ¿Tengo que tener diez proyectos jRCD2 diferentes y ejecutar el que toque según con qué cliente esté trabajando? ¿O tenéis algún "truco" para simplificar esto?
  • Para cuando algún usuario se conecte desde fuera de su oficina... ¿es suficiente con conectarse a la IP pública y redirigir en el router el puerto 1433 a la IP local del servidor o necesitaré alguna configuración extra en el jRDC2?
  • ¿Conocéis alguna librería que pueda utilizar para crear controles que muestren datos provenientes de consultas? Por ejemplo, que muestren resultados encolumnados de una consulta y que el usuario pueda visualizar, hacer scroll... etc.

De nuevo, gracias por vuestra inestimable ayuda.
 

josejad

Expert
Licensed User
Longtime User
Por curiosidad... ¿cómo te diste cuenta, si solo subí el proyecto B4A y no mi jRDC2?
Hola Álex, con permiso de Bladimir, contesto yo a esto.
Pusiste tu proyecto B4A, en el que hacías la consulta "select_employees" y pusiste tu archivo config en el que no había ninguna consulta llamada así.

hacer referencia a una librería y poder escribir libremente las consultas en mi proyecto B4A, pues sinceramente prefiero lo segundo
Si te fijas (y si no me equivoco, no tengo mucha experiencia con otros entornos), no suelen hacerse conexiones directas a la bbdd desde android, por lo que vi en su día en Android Studio y en Flutter hablan de hacerlo desde API's en PHP o algún otro lenguaje. Necesitas saber ese otro lenguaje o tener alguna herramienta que te genere esa API, mientras que jRDC2 lo escribes también en B4X sin tener que aprender otro lenguaje, y ya tienes el proyecto medio hecho. Si tienes alguna web alojada en tu servidor que acceda a tu base de datos, puedes escribir también una API que te sirva los datos en jSON.

En cuanto a la conexión directa con jdbc, como indica Erel en el post, tiene varias desventajas: (traduzdo literalmente)
- Inseguro: sería simple para un hacker averiguar el usuario y contraseña y acceder directamente a la base de datos.
- Difícil de mantener: los cambios en el diseño de la base de base de datos requerirán actualizar la app
- Problemas de rendimiento: los drivers no están optimizados para uso en móviles.
- Problemas de confiabilidad debidos a una conexión inestable.
No recomienda usarla en una app para clientes, pero puede ser una buena opción en una pequeña app "casera".

Tengo como diez BBDDs de SQL Server de diez clientes diferentes en mi PC. ¿Tengo que tener diez proyectos jRCD2 diferentes y ejecutar el que toque según con qué cliente esté trabajando? ¿O tenéis algún "truco" para simplificar esto?
Una posible solución es tener distintos servidores jRDC2 escuchando en diferentes puertos, sin embargo, con un sólo servidor jRDC2, también puedes acceder a distintas bases de datos. Yo al menos lo he hecho en mysql, no sé si habrá alguna diferencia con mssql:
Para cuando algún usuario se conecte desde fuera de su oficina... ¿es suficiente con conectarse a la IP pública y redirigir en el router el puerto 1433 a la IP local del servidor o necesitaré alguna configuración extra en el jRDC2?
Necesitarás redirigir el puerto que tengas configurado en jRDC2 (creo que tienes el 17178) al puerto 17178 de la ip local del servidor.
¿Conocéis alguna librería que pueda utilizar para crear controles que muestren datos provenientes de consultas? Por ejemplo, que muestren resultados encolumnados de una consulta y que el usuario pueda visualizar, hacer scroll... etc.
B4XTable
 
De nuevo mil gracias; es sorprendente las ganas que tenéis de ayudar y el tiempo que empleáis en ello; espero poder estar haciéndolo yo muy pronto.

Pusiste tu proyecto B4A, en el que hacías la consulta "select_employees" y pusiste tu archivo config en el que no había ninguna consulta llamada así.
Cierto; yo estaba pensando en el ZIP que subí con el proyecto B4A, pero veo que más arriba pegué los valores de config.properties en otro post. Mis disculpas.

En cuanto a la conexión directa con jdbc, como indica Erel en el post, tiene varias desventajas: (traduzdo literalmente)
- Inseguro: sería simple para un hacker averiguar el usuario y contraseña y acceder directamente a la base de datos.
- Difícil de mantener: los cambios en el diseño de la base de base de datos requerirán actualizar la app
- Problemas de rendimiento: los drivers no están optimizados para uso en móviles.
- Problemas de confiabilidad debidos a una conexión inestable.
No recomienda usarla en una app para clientes, pero puede ser una buena opción en una pequeña app "casera".
Creo que ninguna de las tres primeras desventajas me afectaría:

  • No tengo pensado hacer aplicaciones para colgarlas en el Play Store, lo que pretendo es complementar aplicaciones que ya tengo sobre Windows con ciertas funcionalidades en Android sobre las BBDDs de SQL Server que ya tienen mis clientes actualmente. Quiero decir que las APKs se las instalarán solo los usuarios de la empresa; la idea de que un hacker pudiera averiguar la contraseña la puedo obviar.
  • No sería problema actualizar las APKs cuando hubieran cambios en la BBDD.
  • Sobre el rendimiento; la cantidad de datos a consultar desde las apps sería reducida; entiendo que sería asumible la velocidad de lectura.
  • ... pero sí que me preocupa lo que comentas de la fiabilidad si la conexión se vuelve inestable. Sobre esto tendría que hacer pruebas a ver si son asumibles.

Con estas premisas que os planteo... ¿veis factible la idea de usar jdbc? Igual soy un poco repetitivo, pero es muy importante para mí tomar el rumbo correcto en esto, y vuestra gran experiencia tiene muchísimo valor.

Un saludo.
 

josejad

Expert
Licensed User
Longtime User

TILogistic

Expert
Licensed User
Longtime User
lo que pretendo es complementar aplicaciones que ya tengo sobre Windows con ciertas funcionalidades en Android sobre las BBDDs de SQL Server que ya tienen mis clientes actualmente.

En que lenguaje de programación esta desarrollado tu aplicación en Windows??
 

Bladimir Silva Toro

Active Member
Licensed User
Longtime User
Hola aquí te doy respuesta a tus interrogantes que algún día también fueron los míos

  • Tengo como diez BBDDs de SQL Server de diez clientes diferentes en mi PC. ¿Tengo que tener diez proyectos jRCD2 diferentes y ejecutar el que toque según con qué cliente esté trabajando? ¿O tenéis algún "truco" para simplificar esto? R/ Usa un solo jRDC2 para cada base de datos seria lo más lógico y ordenado a menos que sea la misma base de datos con el mismo nombre y sean las mismas consultas SQL
  • Para cuando algún usuario se conecte desde fuera de su oficina... ¿es suficiente con conectarse a la IP pública y redirigir en el router el puerto 1433 a la IP local del servidor o necesitaré alguna configuración extra en el jRDC2? R/ Si señor es correcto además en tu firewall también permita la conexión al puerto de jRDC2
  • ¿Conocéis alguna librería que pueda utilizar para crear controles que muestren datos provenientes de consultas? Por ejemplo, que muestren resultados encolumnados de una consulta y que el usuario pueda visualizar, hacer scroll... etc. R/ se llama B4XTable parecido a un DataGridView de Net enlace: https://www.b4x.com/android/forum/t...searchable-customizable-table.102322/#content
 
Hola,

Pues justo ayer hice pruebas con jdbc usando el ejemplo de este enlace que propuso el compañero Aguilar, y la verdad es que fue espectacularmente fácil. En cinco minutos estaba conectado a mi BBDD, lanzando consultas y obteniendo resultados, tanto desde la red local como desde fuera con el puerto redirigido.

Con lo cual de momento voy a tirar por ahí porque para la primera aplicación que quiero armar creo que me sirve, aun teniendo en cuenta las desventajas que habéis comentado, y dado que acabo de aterrizar en este entorno, ahora mismo para mí la sencillez es fundamental.

Pero no pierdo de vista jRDC2, que seguro que en un futuro, ya con más experiencia, volveré a "atacar".

Gracias a todos por vuestra ayuda.
 

Wilkinw91

New Member
Necisto ayuda help quiero crear un servidor jRDC2 en firebird por favor o explicarme por que es el error de java.response.socket.timeout cualquiera de los dos son nuevo en esto
 
Top