Quizás debería estar durmiendo a estas horas de la madrugada, o quizás viendo una película o pasando el rato navegando..., quizás, pero no, en lugar de eso estoy aquí picando algo de código y me pasó por la mente "Hey, si de escribir código se trata, porque no hacerlo para un tutorial, al fin y al cabo le debes un tiempo al blog", y me respondí "Cierto, pero antes de pasar a cosas interesantes, empecemos con algo sencillo que nos servirá para calentar motores", así que adelante... (la falta de sueño causa más daño de lo que creí)
Con este tutorial lograrán conectar cualquier aplicación android con una base de datos SQL Server tanto local como remotamente de una manera sencilla, tal y como si se tratara de una aplicación java común y corriente, y esto gracias al driver jTDS de JDBC.
Descargar el driver jTDS
Entonces lo primero que haremos será ir a la página oficial y descargarnos el driver. NOTA: El driver que utilizaré será el 1.2.7 y android 4.2.
Creando el proyecto y añadiendo el driver
Una vez descargado, abrimos nuestro IDE(en mi caso eclipse) y creamos una nueva aplicación de android.
Una vez creado importaremos el jar del driver jTDS a nuestro proyecto, para esto hacemos click derecho sobre nuestro proyecto->Properties->Java Build Path->Libraries y en Add External JARs..., buscamos nuestro jar descargado y click en OK.
La clase DBConnection
Creamos una nueva clase que llamaremos DBConnection y la crearé como un Singleton,
Añadimos los atributos URL, USER y PASS que contendrán la información y credenciales para conectarnos a la base de datos.
Ya saben lo que pienso sobre el código duro pero dado que es un ejemplo, podemos dejarlo pasar.
Después creamos el método que hará la conexión, y en el instanciamos el driver para después pasarle nuestros datos de conexión al DriverManager.
Bueno, ya para terminar creare otro método singleton que obtendrá la conexión hecha en nuestro método conectar().
Entonces la clase final nos quedaría de la siguiente manera:
Llamando a nuestra conexión
Ahora para llamar llamar a nuestra clase lo haremos de la manera como se llaman a las clases Singleton.
Otorgando permisos a nuestra aplicación
Por poco lo olvido, necesitarán otorgarle permisos a su aplicación para que pueda hacer uso del internet y conectarse a su base de datos si ésta se encuentra remota. En el AndroidManifest.xml de su aplicación añadan la siguiente línea de código.
Ok, ahora si es todo. Espero les sea útil, hasta la próxima! ;)
man que tal?? en la linea numero 5 me sale el siguiente error, el mensaje lo dejo mas abajo..hice todo como dice el tutorial pero no sale, me podes indicar cual seria el posible problema??
ResponderBorrar1 private Connection conectar()
2 {
3 Connection conn= null;
4 try{
5 (new Driver()).getClass();
6 conn=DriverManager.getConnection(URl,USER,PASS);
7 }catch(SQLException e){
8 e.printStackTrace();
9 }
10 return conn;
11 }
Mensaje: Cannot instantiate the type Driver
Coloca el siguiente IMPORT en la parte superior de tu programa:
Borrarimport net.sourceforge.jtds.jdbc.Driver;
Con esto hacemos referencia a la clase Driver de jTDS.
Saludos ;)
Este comentario ha sido eliminado por el autor.
ResponderBorrarbuenos días, disculpe las molestias solo una duda...de casualidad podría recomendarme algunos temas para poder hacer una aplicación similar a "mercado libre" es para un proyecto de la escuela pero no casi nada de conocimientos sobre android...de antemano gracias :D
BorrarPues de entrada te recomendaría reforzar el conocimiento sobre la plataforma, posteriormente meterte en temas de Selling In-App Products, puedes leer sobre el tema aquí http://developer.android.com/training/in-app-billing/index.html
BorrarSaludos.
ok :D muchas gracias, saludos
Borrardisculpa una pregunta he echo todo lo que esta aqui pero a la hora de probar la aplicacion nunca conecta siempre me falla... intento hace simplemente esto pero no funciona siempre sale fallo
ResponderBorrarConnection conexion = Conexion.getInstance().getConnection();
if(conexion == null)
Toast.makeText(this, "fallo", Toast.LENGTH_SHORT).show();
else
Toast.makeText(this, "entro", Toast.LENGTH_SHORT).show();
Revisa el LogCat a ver que es lo que te arroja, fijate que yo utilizo datos de prueba:
Borrardonde pongo SERVER debiera ir la dirección de tu servidor (localhost o la IP), el nombre de la base de datos en DATABASE y unas credenciales validas en USERNAME y PASSWORD
Este comentario ha sido eliminado por el autor.
ResponderBorrarya coloque la direccion como debe ir ya que instale una app que hace la conexion con esa base de datos y entra normal, al colocar los mismos parametros en mi aplicacion no me funciona.
ResponderBorrarpuse el import que señalas arriba y me sale el siguiente error en esta linea
(new Driver()).getClass();
=/
Revisa si otorgaste los permisos a la aplicación para que pueda conectarse a internet? Está en el último párrafo
Borrarsi ya le otorgue los permisos... pero me dice que no encuentra el driver java.lang.NoClassDefFoundError:net.source.jtds.jdbc.Driver
Borrarconseguí el error... se debe agregar al path la ubicación del .jar luego para las versiones 3.0 o superior se debe usar los métodos asíncronos ya que android no lo permite hacer para evitar el cierre de las aplicaciones y por ultimo use la versión 1.2.7 del jtds ya que la 1.3.1 no me funciono.
Borrarfelicidades y mucho éxito ;)
Borrarhola cómo agrego al path la ubicación del .jar ???
BorrarSalu2
Buenas!!
ResponderBorrarMoises que es eso de usar los métodos asíncronos?? Tengo el mismo problema que tu y no se que hacer ya para solucionarlo. Un saludo.
Puedes leer sobre el tema en el siguiente link http://moztrodev.blogspot.mx/2013/10/android-conexion-jtds-de-manera.html
BorrarBuen dia
ResponderBorrarNecesito de una gran ayuda
Tengo un formulario el cual quiero que los parametros finales como Nombre, edad, correo electronico, se envien a una base de datos de mysql de manera remota...Podrian ayudarme??
Amigo quiero hacer lo mismo pero con mysql y un servidor local, el tema es que no se que ip debo colocarle para el server si me puedes ayudar muchas gracias
ResponderBorrarLamentablemente el driver de JTDS solo funciona con bases de datos SQL Server y Sybase.
BorrarY si utilizo Postgres? la verdad que eso de base de datos siempre me trajo problemas, ayudame con algunos tips sobre como montar esa movida en el servidor,,,
BorrarTengo algunas dudas, corrigeme si me equivoco pero yo lo intenté de la siguiente manera: donde dice server pongo mi ip, donde dice database pongo el nombre de mi base de datos y en username puse mi nombre de usuario, no se si el problema es que en mi SQL Server yo entro con autenticacion de windows y por eso no puedo entrar.
ResponderBorrarY como seria si utilizo el Android studio para conectar con SQL server
ResponderBorrarMuy bueno muchas gracias me saco de apuros
ResponderBorrarrealice la conexión , y en mi aplicación hago un select , que me retorna la existencia de un articulo. al presionar el botón buscarexistencia por primera vez me lo muestra fantástico,pero si le doy la segunda me envía una excepción fatal en AsyncTask #2. ayuda
ResponderBorrarPodrías pegar el stacktrace de la excepción, sin él es imposible saber cuál es el problema
Borrardisculpa por contestar debajo aqui pongo lo que me genera el logcat
Borrar05-16 17:21:21.160: E/AndroidRuntime(1695): FATAL EXCEPTION: AsyncTask #1
05-16 17:21:21.160: E/AndroidRuntime(1695): Process: es.epinanab.Hello, PID: 1695
05-16 17:21:21.160: E/AndroidRuntime(1695): java.lang.RuntimeException: An error occured while executing doInBackground()
05-16 17:21:21.160: E/AndroidRuntime(1695): at android.os.AsyncTask$3.done(AsyncTask.java:300)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.lang.Thread.run(Thread.java:841)
05-16 17:21:21.160: E/AndroidRuntime(1695): Caused by: java.lang.NullPointerException
05-16 17:21:21.160: E/AndroidRuntime(1695): at es.epinanab.Hello.Captura.displayDbProperties(Captura.java:141)
05-16 17:21:21.160: E/AndroidRuntime(1695): at es.epinanab.Hello.Captura$GetDBconnection.doInBackground(Captura.java:85)
05-16 17:21:21.160: E/AndroidRuntime(1695): at es.epinanab.Hello.Captura$GetDBconnection.doInBackground(Captura.java:1)
05-16 17:21:21.160: E/AndroidRuntime(1695): at android.os.AsyncTask$2.call(AsyncTask.java:288)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-16 17:21:21.160: E/AndroidRuntime(1695): ... 3 more
05-16 17:26:21.380: I/Process(1695): Sending signal. PID: 1695 SIG: 9
05-16 17:26:25.550: I/Choreographer(1729): Skipped 41 frames! The application may be doing too much work on its main thread.
att: Alejandro
hola me podrias mostrar como conectaste a tu base de datos xfa , no me sale la conexion, gracias
BorrarEste comentario ha sido eliminado por el autor.
ResponderBorrarHola daniel, gracias por tu pronta respuesta te envio parte del codigo con el que me conecto es practicamente todo lo que tu has hecho. voy a copiarte tambien el error que me da.
ResponderBorrarpublic class GetDBconnection extends AsyncTask {
WeakReference context;
public GetDBconnection(Captura activity) {
context = new WeakReference(activity);
}
@Override
protected String doInBackground(String... params)
{
try
{
return displayDbProperties(params[0]);
}
catch(NullPointerException ews)
{
System.out.println("error a ejecutar el doInBackground..."+ews.toString());
}
return "";
}
@Override
protected void onProgressUpdate(Integer... values) {
}
@Override
protected void onPreExecute()
{
}
protected void onPostExecute(String c)
{
EditText txtSaludo = (EditText) findViewById(R.id.editnombre);
txtSaludo.setText(c);
}
}
static public String displayDbProperties(String articulo)
{
JtdsDatabaseMetaData dm = null;
ResultSet result = null;
String cantidad="";
connection=null;
try {
connection = DBConexion.getInstance().getConnection();
if (connection != null) {
try
{
JtdsStatement select = (JtdsStatement) connection.createStatement();
result = select.executeQuery("select CANT_DISP_RESERV from pi.BOLETA_INV_FISICO where ARTICULO='"+articulo+"'");
}
catch(SQLException e)
{
System.out.println("error al ejecutar sentencia..."+e.toString());
closeConnection();
}
while (result.next())
{
cantidad=result.getString(1);
}
result.close();
result = null;
closeConnection();
}
else
System.out.println("Error: No active Connection");
}
catch (SQLException e)
{
System.out.println("error con coneccion"+e.toString());
}
dm = null;
return cantidad;
}
me dice que fue causada por un NullPointerException . por cierto mi nombre es Alejandro y estoy comenzando en android
ResponderBorrarQue tal Alejandro, sería genial que colocaras el Stacktrace de la excepción, para saber en qué parte exactamente ocurre el NullPointerException, saludos
Borrarbueno aqui te pongo lo que me da el logcat no se si es eso lo que me pides, gracias de antemano
ResponderBorrar05-16 17:21:21.160: E/AndroidRuntime(1695): FATAL EXCEPTION: AsyncTask #1
05-16 17:21:21.160: E/AndroidRuntime(1695): Process: es.epinanab.Hello, PID: 1695
05-16 17:21:21.160: E/AndroidRuntime(1695): java.lang.RuntimeException: An error occured while executing doInBackground()
05-16 17:21:21.160: E/AndroidRuntime(1695): at android.os.AsyncTask$3.done(AsyncTask.java:300)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.lang.Thread.run(Thread.java:841)
05-16 17:21:21.160: E/AndroidRuntime(1695): Caused by: java.lang.NullPointerException
05-16 17:21:21.160: E/AndroidRuntime(1695): at es.epinanab.Hello.Captura.displayDbProperties(Captura.java:141)
05-16 17:21:21.160: E/AndroidRuntime(1695): at es.epinanab.Hello.Captura$GetDBconnection.doInBackground(Captura.java:85)
05-16 17:21:21.160: E/AndroidRuntime(1695): at es.epinanab.Hello.Captura$GetDBconnection.doInBackground(Captura.java:1)
05-16 17:21:21.160: E/AndroidRuntime(1695): at android.os.AsyncTask$2.call(AsyncTask.java:288)
05-16 17:21:21.160: E/AndroidRuntime(1695): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-16 17:21:21.160: E/AndroidRuntime(1695): ... 3 more
05-16 17:26:21.380: I/Process(1695): Sending signal. PID: 1695 SIG: 9
05-16 17:26:25.550: I/Choreographer(1729): Skipped 41 frames! The application may be doing too much work on its main thread.
OK, muchas gracias, también te recomendaría ir debuggeando para tener una idea más clara de lo que está ocurriendo
BorrarPor cierto, para que te sirve tu clase JtdsDatabaseMetaData? veo que tienes un referencia nula a ella y nunca la utiizas, salvo al final cuando la vuelves a igualar a null.
Borrarno sirve para nada.. solo la deje ahi, pero no hace nada. sera el problema con la conexion porque la primer vez se conecta y aparentemente la segunda vez falla la conexion.
Borrar05-16 18:07:05.070: I/System.out(1929): Connection Successful! esto es lo que me manda la primer vez
Borrar05-16 18:07:20.150: I/System.out(1929): error con coneccionjava.sql.SQLException: Invalid state, the Connection object is closed. y esto es lo que me envia la segunda vez
gracias Daniel , ya lo resolví con tu ayuda en un blog tuyo http://moztrodev.blogspot.com/2013/10/android-conexion-jtds-de-manera.html. sos grandioso muchas gracias. solo que a un no me queda claro porque de la forma que lo queria hacer daba ese error. una vez mas gracias. espero ver mas aportes tuyos. maestro :)
ResponderBorrarFelicidades y con los mensajes q pusiste ya pude ver lo que ocurre. Lo que sucedia es que cerrabas la conexion la primera vez y por eso las veces consecutivas ya no podias hacer uso de ella. Lo que pasa que la clase singleton es la que se encarga de manejar las conexiones y por ello no habia necesidad de cerrarla manualmente. Saludos
BorrarFelicidades y con los mensajes q pusiste ya pude ver lo que ocurre. Lo que sucedia es que cerrabas la conexion la primera vez y por eso las veces consecutivas ya no podias hacer uso de ella. Lo que pasa que la clase singleton es la que se encarga de manejar las conexiones y por ello no habia necesidad de cerrarla manualmente. Saludos
Borrarhola daniel soy alejandro , bueno estoy estudiando android y pues me gustaría saber que ventajas tengo de hacer la conexion de esta manera y no por un web service. podrias aclararme esta duda porfa
BorrarQue tal alejandro, definitivamente la opción correcta es hacerlo a través de un web service. La razón por la que lo hice de ésta manera es porque me tocó realizar una app para una empresa donde los usuarios solamente podían hacer uso de ella dentro de la red empresarial y acceder a la base de datos, fue parte de las reglas de negocio. Pero eso fue en el caso particular de esta app y por petición de la empresa, y la razón por la que lo publique fue porque el driver jtds se me hizo una herramienta muy interesante y sencilla de usar, pero sin lugar a dudas la mejor manera y por buena práctica es hacer que nuestras apps consuman web services para realizar este tipo de tareas. Y me acabo de dar cuenta que aún no tenemos un post al respecto, pero no te preocupes que prepararemos uno proximamente.
BorrarSaludos
ok daniel gracias por tu respuesta ,espero con ansias ese post
Borrares mejor realizar una coneccion directa al servidor o utilizar los web services ?
Borrarhola daniel , soy alejandro, como te dije estoy estudiando android y ahora quiero hacer una tabla que me muestre los datos de mi ResultSet, pero con lo que he investigado se me hace muy difícil hacerlo , he investigado acerca de tablelayout, pero me di cuenta que es un rollo hacerla . yo se que este post no se trata de este tema pero agradecería cualquier consejo que me puedas dar en este aspecto para hacerla de un forma mas fácil , si esta a tu alcance hermano
ResponderBorrarde antemano gracias.
saludos,
Como tiene que estar programado el servidor (la pagina) para imprimir los datos enviados?
ResponderBorrarBuenas noche Dany, primero muchas gracias por subir este tutorial, y ya lo realice perfecto solamente me marca error en:
ResponderBorrarpublic class DBConnection {
private static DBConnection instance = null;
private static final String URL="jdbc:jtds:sqlserver://MAYA-PC/SQLMAYA/prueba";
private static final String USER = "sa";
private static final String PASS = "jesusemir";
private static Connection connection = null;
me dice que no se utiliza el valor del campo DBConnection.USER,PASS, URL.
sabes por que me pasa esto??
DBConnection
ResponderBorrarimport java.sql.DriverManager;
import java.sql.SQLException;
import net.sourceforge.jtds.jdbc.Driver;
public class DBConnection {
private static DBConnection instance=null;
private static final String URL="jdbc:jtds:sqlserver://localhost;user=sa;password=123;";
private static final String USER="sa";
private static final String PASS="123";
private static Connection connection=null;
public static DBConnection getInstance(){
if (instance==null)
instance= new DBConnection();
return instance;
}
public Connection getConnection(){
if(connection==null)
connection=conectar();
return connection;
}
private Connection conectar(){
Connection conn=null;
try{
(new Driver()).getClass();
conn=DriverManager.getConnection(URL,USER,PASS);
}catch(SQLException e){
e.printStackTrace();
}
return conn;
}
}
SIMPLE DAO
ResponderBorrarpackage com.example.database;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SimpleDAO {
Connection conn= DBConnection.getInstance().getConnection();
public ResultSet construirLector(String query){
ResultSet result=null;
try{
Statement statement= conn.createStatement();
result=statement.executeQuery(query);
}catch(SQLException e){
e.printStackTrace();
}
return result;
}
}
Usuario Dao
package com.example.database;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UsuarioDao extends SimpleDAO {
private static UsuarioDao instance=null;
private UsuarioDao(){}
public static UsuarioDao getIntance(){
if(instance==null)
instance=new UsuarioDao();
return instance;
}
public String getNombreUsuario(int id){
String result="";
String Query=" Select * from usuario where CODUSUARIO = " + id + " ";
ResultSet rs=super.construirLector(Query);
try{
while(rs.next())
result=rs.getString("NOMBRE");
}catch(SQLException e){
e.printStackTrace();
}
return result;
}
}
EL LOG
Borrar11-03 22:40:10.475: E/Trace(1392): error opening trace file: No such file or directory (2)
11-03 22:40:11.695: D/gralloc_goldfish(1392): Emulator without GPU emulation detected.
11-03 22:40:12.725: D/dalvikvm(1392): GC_CONCURRENT freed 189K, 3% free 11001K/11335K, paused 74ms+75ms, total 197ms
11-03 22:40:12.765: W/System.err(1392): java.sql.SQLException: Network error IOException: failed to connect to localhost/127.0.0.1 (port 1433): connect failed: ECONNREFUSED (Connection refused)
11-03 22:40:12.776: W/System.err(1392): at net.sourceforge.jtds.jdbc.ConnectionJDBC2.(ConnectionJDBC2.java:421)
11-03 22:40:12.776: W/System.err(1392): at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:188)
11-03 22:40:12.785: W/System.err(1392): at java.sql.DriverManager.getConnection(DriverManager.java:175)
11-03 22:40:12.785: W/System.err(1392): at java.sql.DriverManager.getConnection(DriverManager.java:209)
11-03 22:40:12.795: W/System.err(1392): at com.example.database.DBConnection.conectar(DBConnection.java:37)
11-03 22:40:12.795: W/System.err(1392): at com.example.database.DBConnection.getConnection(DBConnection.java:28)
11-03 22:40:12.795: W/System.err(1392): at com.example.database.SimpleDAO.(SimpleDAO.java:11)
11-03 22:40:12.795: W/System.err(1392): at com.example.database.UsuarioDao.(UsuarioDao.java:10)
11-03 22:40:12.795: W/System.err(1392): at com.example.database.UsuarioDao.getIntance(UsuarioDao.java:14)
11-03 22:40:12.805: W/System.err(1392): at com.example.database.MainActivity$GetDBConnection.doInBackground(MainActivity.java:30)
11-03 22:40:12.805: W/System.err(1392): at com.example.database.MainActivity$GetDBConnection.doInBackground(MainActivity.java:1)
11-03 22:40:12.805: W/System.err(1392): at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-03 22:40:12.805: W/System.err(1392): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-03 22:40:12.805: W/System.err(1392): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-03 22:40:12.805: W/System.err(1392): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-03 22:40:12.805: W/System.err(1392): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-03 22:40:12.805: W/System.err(1392): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
ResponderBorrar11-03 22:40:12.805: W/System.err(1392): at java.lang.Thread.run(Thread.java:856)
11-03 22:40:12.805: W/System.err(1392): Caused by: java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 1433): connect failed: ECONNREFUSED (Connection refused)
11-03 22:40:12.815: W/System.err(1392): at libcore.io.IoBridge.connect(IoBridge.java:114)
11-03 22:40:12.815: W/System.err(1392): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
11-03 22:40:12.825: W/System.err(1392): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
11-03 22:40:12.825: W/System.err(1392): at java.net.Socket.startupSocket(Socket.java:566)
11-03 22:40:12.825: W/System.err(1392): at java.net.Socket.tryAllAddresses(Socket.java:127)
11-03 22:40:12.825: W/System.err(1392): at java.net.Socket.(Socket.java:177)
11-03 22:40:12.825: W/System.err(1392): at java.net.Socket.(Socket.java:149)
11-03 22:40:12.835: W/System.err(1392): at net.sourceforge.jtds.jdbc.SharedSocket.(SharedSocket.java:249)
11-03 22:40:12.835: W/System.err(1392): at net.sourceforge.jtds.jdbc.ConnectionJDBC2.(ConnectionJDBC2.java:322)
11-03 22:40:12.835: W/System.err(1392): ... 17 more
11-03 22:40:12.835: W/System.err(1392): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
11-03 22:40:12.855: W/System.err(1392): at libcore.io.Posix.connect(Native Method)
11-03 22:40:12.855: W/System.err(1392): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
11-03 22:40:12.855: W/System.err(1392): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
11-03 22:40:12.855: W/System.err(1392): at libcore.io.IoBridge.connect(IoBridge.java:112)
11-03 22:40:12.855: W/System.err(1392): ... 25 more
11-03 22:40:12.865: W/dalvikvm(1392): threadid=11: thread exiting with uncaught exception (group=0x2bc9a300)
11-03 22:40:12.885: E/AndroidRuntime(1392): FATAL EXCEPTION: AsyncTask #1
11-03 22:40:12.885: E/AndroidRuntime(1392): java.lang.RuntimeException: An error occured while executing doInBackground()
11-03 22:40:12.885: E/AndroidRuntime(1392): at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-03 22:40:12.885: E/AndroidRuntime(1392): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
11-03 22:40:12.885: E/AndroidRuntime(1392): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
11-03 22:40:12.885: E/AndroidRuntime(1392): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
11-03 22:40:12.885: E/AndroidRuntime(1392): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-03 22:40:12.885: E/AndroidRuntime(1392): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-03 22:40:12.885: E/AndroidRuntime(1392): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-03 22:40:12.885: E/AndroidRuntime(1392): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-03 22:40:12.885: E/AndroidRuntime(1392): at java.lang.Thread.run(Thread.java:856)
11-03 22:40:12.885: E/AndroidRuntime(1392): Caused by: java.lang.NullPointerException
11-03 22:40:12.885: E/AndroidRuntime(1392): at com.example.database.SimpleDAO.construirLector(SimpleDAO.java:17)
11-03 22:40:12.885: E/AndroidRuntime(1392): at com.example.database.UsuarioDao.getNombreUsuario(UsuarioDao.java:20)
11-03 22:40:12.885: E/AndroidRuntime(1392): at com.example.database.MainActivity$GetDBConnection.doInBackground(MainActivity.java:30)
11-03 22:40:12.885: E/AndroidRuntime(1392): at com.example.database.MainActivity$GetDBConnection.doInBackground(MainActivity.java:1)
11-03 22:40:12.885: E/AndroidRuntime(1392): at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-03 22:40:12.885: E/AndroidRuntime(1392): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-03 22:40:12.885: E/AndroidRuntime(1392): ... 5 more
tambien se puede en unventor
ResponderBorrartambien se puede en unventor
ResponderBorrary para Android Studio como importo ?
ResponderBorrarHola como le hago para importar en Android Studio version 2015
ResponderBorrargracias
Buenas, Estimado muy buen aporte para los que nos iniciamos en Android, mira copie la clase de ejmplo pero me genera un error al compilar.
ResponderBorrarError:(30, 28) error: cannot find symbol class conectar
Anexo mi codigo para que veas donde estoy errado.
la IDE marca el error aca
public Connection getConnection(){
if(connection==null)
connection=new conectar(); ACA MARCA ERROR EN LA CLASE conectar()
return connection;
}
package syswin.developer.applectorsql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import net.sourceforge.jtds.jdbc.Driver;
/**
* Created by Developer on 22/10/2015.
*/
public class DbConnectionSQL {
private static DbConnectionSQL instance = null;
private static final String URL="jdbc:jtds:sqlserver://192.168.1.105:1433;user=sa;password=1234;";
private static final String USER="sa;";
private static final String PASSWORD="sa;";
private static Connection connection=null;
private DbConnectionSQL(){}
public static DbConnectionSQL getInstance() {
if(instance==null)
instance=new DbConnectionSQL();
return instance;
}
public Connection getConnection(){
if(connection==null)
connection=new conectar();
return connection;
}
private Connection conectar(){
Connection conn = null;
try{
(new Driver()).getClass();
conn = DriverManager.getConnection(URL,USER,PASSWORD);
}catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}
amigo tengo problema con el (new Driver()).getClass(); me salta en rojo si pudieras ayudarme
ResponderBorrarHola, primero quiero felicitarte por el tutorial muy bueno y solo quiero que me saque de una duda como lo harias para conectarte a Postgresql.... utilizarias la misma clase para conectarte o es diferente gracias de ante mano por la respuesta
ResponderBorrarPara Postgres hay un driver específico, el problema en mi caso, intentando conectarme a Postgres, lo hace en mi máquina local, pero cuando lo alojo en el servidor (misma red y segmento) no me permite conectarme, y lo hace mediante Thread o hilos, quiero una clase como tal.
BorrarHola, muy buen tuto. Sólo tengo una duda, que diferencia tiene implementar una consulta a través de un web service? es mas seguro?
ResponderBorrarHola, muy buen tuto. Sólo tengo una duda, que diferencia tiene implementar una consulta a través de un web service? es mas seguro?
ResponderBorrarhola daniel a mi me aparece este error
ResponderBorrar[2016-01-26 20:31:24 - ddmlib] Se ha anulado una conexión establecida por el software en su equipo host.
java.io.IOException: Se ha anulado una conexión establecida por el software en su equipo host.
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(Unknown Source)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.write(Unknown Source)
at sun.nio.ch.SocketChannelImpl.write(Unknown Source)
at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
at com.android.ddmlib.Client.sendAndConsume(Client.java:675)
at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:342)
at com.android.ddmlib.Client.requestAllocationStatus(Client.java:521)
at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:831)
at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:799)
at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:759)
at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:648)
at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:44)
at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:576)
puedes ayudarme por favor, tu código lo copie tal y como lo muestras
y se repite demasiadas veces
Borrarjava.sql.SQLException: No suitable driver a que se debe?
ResponderBorrartengo el mismo error,
Borrar¿lograste encontrar la solución o explicación?
import net.sourceforge.jtds.jdbc.Driver; es agregar esto y lsito
Borrarconn = DriverManager.getConnection(URL,USER,PASS);
ResponderBorrarMe aparece esta linea marcada en rojo, el error que aparece es el siguiente:
Unhandled exception:java.sql.SQL.Exception
Este comentario ha sido eliminado por el autor.
ResponderBorrarHola disulpen yo tengo un problema hise una plicacion con servicio web el primer formulario es el login lo que pasa es que cuando corro mi aplicacion android en el emulador memu todo anda bien ingreso mi usuario y contraseña evalua los datos los compara con los de la base de datos y ingreso al menu principal todo bien pero cuando lo corro en el genymoto o en un celular (mediante el apk) no conecta a la base de datos me sale usuario o contraseñaa incorrecto, porfa haber si me pudieran ayudar con eso se les agradeceria mucho
ResponderBorrarGracias!!
Hola, una consulta como podria hacer para que la "consulta" de la base de datos no me la de en un list view sino en un edit text o en un Text View. Gracias!!
ResponderBorrarhola amigos les hago una consulta, tengo un servidor sql server 2008 remoto de ip dinamica. y tengo un servicio del dinamic dns de NO-IP. cuando en el string de conexion pongo el ip me funciona de diez. pero cuando pongo el nombre del servidor, que es consultorio.no-ip.org no me anda y me dice que no se ecnuentra el servidor. Podrian darme una ayuda? Saludos y gracias
ResponderBorrar