Académique Documents
Professionnel Documents
Culture Documents
name=News&le=article&sid=656
Nuevo usuario
Principal
Inicio
Buscar
Contactar
Descargas
Enciclopedia
Estadsticas
Foros
Manuales, Artculos
Nuestra historia
Quines somos
Recomindanos
Temas
Top 10
Trucos Delphi, PHP, Java,
Seguir a @ajpdsoft
3,313 seguidores
Me gusta
Compartir
3020
Publicidad en Google
Anuncie su negocio en Google con AdWords. Reciba USD50 de regalo!
Eclipse:
Enlaces Relacionados
Tu cuenta
Aplicacin Android
AppInventor
Descargas
Visual Studio
ltimas Descargas
AjpdSoft Obtener datos
EAN13 en Delphi 6
AjpdSoft Gestin VMware
ESXi y vCenter
AjpdSoft XSD a XML
AjpdSoft Nmeros
Aleatorios VB.NET
AjpdSoft Gestin
Seguidores Twitter C#
AjpdSoft Informacin PC
WMI en VB.Net
AjpdSoft Acceso
PostgreSQL con Lazarus
x64
Ejemplo acceso nativo a
SQLite con ADO.Net en C#
Trminos
enciclopedias
.Net
ltimos
AjpdSoft Acceso MySQL
Out-File
Android
Enc.: Comandos
PowerShell
AjpdSoft Acceso SQLite
C# ADO.NET
Write-EventLog
Enc.: Comandos
AjpdSoft Acceso MySQL
PowerShell
con ADO.NET en C#
Get-EventLog
AjpdSoft Gestin Integral
Enc.: Comandos
cdigo fuente Delphi
PowerShell
AjpdSoft Indexar Texto
Get-FileHash
PDF C# iTextSharp
Enc.: Comandos
PowerShell
AjpdSoft Capturar
Pantalla C#
Compare-Object
Enc.: Comandos
AjpdSoft Gestin de
PowerShell
Transportes Ficheros
instalacin manual
StringReplace
Enc.: Funciones Delphi
Lo ms descargado
SMS
AjpdSoft Registro de OCX
Consejos
Enc.: Informtica
y DLL Cdigo Fuente Delphi
GSM
AjpdSoft Generador de
Enc.: Informtica
cdigos de barras EAN8 y
EAN13
VLAN
Enc.: Informtica
Borland Database
Desktop 7.0
LUN
Enc.: Informtica
AjpdSoft Conversor
Hexadecimal, Decimal,
ERP
Texto - Cdigo Fuente
Enc.: Informtica
Delphi
ADSL
AjpdSoft Aviso cambio IP
Enc.: Informtica
pblica
VDSL
AjpdSoft Administracin
Enc.: Informtica
Bases de Datos Cdigo
Fuente Delphi
DATE_FORMAT(fecha,
formato)
AjpdSoft Generador y
Enc.: Funciones MySQL
Lector cdigos QR VB.Net
SOAP
AjpdSoft Inventario PCs
Enc.: Informtica
AjpdSoft Facturacin
Cdigo Fuente Delphi
Lo ms visitado
AjpdSoft Conexin BD
URL
Visual Basic .Net
Enc.: Informtica
AjpdSoft Agenda
Attrib
Telefnica Android
Enc.: Comandos Windows
XP/Windows 2000/2003
Borland Database Engine
(consola MS-DOS)
BDE
At
AjpdSoft Inventario PCs
Enc.: Comandos Windows
En el siguiente tutorial explicamos cmo trabajar con bases de datos SQLite desde Android:
Desarrollar aplicacin Android con acceso a base de datos SQLite con Eclipse
Por supuesto, cada desarrollador estimar qu mtodo usar para conectar una aplicacin Android con un motor de base de datos externo, puede estimar usar PHP y JSON, nosotros no
decimos que no se haga as, slo decimos que puede realizarse una conexin directa desde Android a MySQL usando JDBC y Java como explicaremos a continuacin.
Grabar mi Voto!
Aadir proyecto Android a Eclipse para aplicacin acceso MySQL, crear activity
principal y men
En primer lugar, si an no lo tenemos creado, crearemos un nuevo proyecto en Eclipse, para ello lo abriremos y pulsaremos en el men "File" - "New" - "Project":
Opciones
Enviar a un Amigo
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
Introduciremos los datos para el nuevo proyecto Eclipse para dispositivos Android:
Lenguajes
Selecciona Idioma de la
Interfaz:
Spanish
Application Name: nombre de la aplicacin, no recomendamos nombres muy largos pues de lo contrario no cabrn en los ttulos y dems donde aparezcan. En nuestro ejemplo
la llamaremos "AccesoMySQL".
Project Name: nombre del nuevo proyecto Eclipse Android, por ejemplo "AjpdSoftMySQL".
Package Name: nombre del paquete, por ejemplo "com.example.ajpdsoftmysql".
Buil SDK: API level con el que se compilar la aplicacin, por ejemplo "Android 4.1 (API 16).
Minimun Required SDK: este campo es importante, deberemos indicar el API level mnimo requerido, a mayor API Level menor nmero de dispositivos Android soportarn
nuestra aplicacin. Por lo tanto deberemos indicar el API level ms pequeo posible, segn los procedimientos que usemos y los imports requeriremos uno u otro. En nuestro caso
el API Level mnimo ser 5 (API 5: Android 2.0 (Eclair).
Create custom launcher icon: si queremos que el asistente nos permita crear un icono para nuestra aplicacin marcaremos este check.
Create Project in Workspace: maraceremos esta opcin para crear el nuevo proyecto Android en el espacio de trabajo del usuario por defecto.
Tras introducir los datos para el nuevo proyecto Eclipse para dispositivos Android pulsaremos "Next":
Webs recomendadas
Orasite.com
Language english
English
Si hemos seleccionado la opcin de crear un icono para la aplicacin, el asistente nos mostrar la ventana para crear el icono personalizado, podremos cambiar el icono, cambiar color de
fondo y otras opciones:
Marcaremos "Create Activity" para crear una activity (ventana) principal de la aplicacin, seleccionaremos el tipo de activity que crearemos, en nuestro caso "BlankActivity":
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
El asistente para aadir un nuevo proyecto Eclipse para dispositivos Android crear todos los ficheros necesarios para el proyecto, a continuacin indicamos algunos de los ms
importantes:
/src/AjpdSoftMySQL.java: cdigo java de la activity principal del proyecto. En este fichero colocaremos todo el cdigo java de nuestra aplicacin Android, al menos todo el que
tenga que ver con su activity correspondiente.
/bin/AndroidManifest.xml: fichero de configuracin principal de la aplicacin donde se indicarn, por ejemplo, todas las activity de la aplicacin.
/res/drawable-hdpi, /res/drawable-ldpi, /res/drawable-mdpi, /res/drawable-xhdpi: carpetas del proyecto donde se guardarn los ficheros de imgenes (iconos y dems) para las
diferentes resoluciones.
/res/layout/activity_ajpd_soft_my_sql.xml: carpeta y fichero para el layout, donde se indicarn los componentes grficos del activity relacionado, en este fichero
indicaremos todo lo que el usuario ver en la aplicacin Android de su mvil.
/res/menu/activity_ajpd_soft_my_sql.xml: carpeta y fichero con los datos necesarios para mostrar el men de nuestra aplicacin, lo usaremos para mostrar el segundo
activity que crearemos posteriormente para indicar los datos de conexin con el servidor MySQL.
/res/values/strings.xml: en este fichero indicaremos todas las cadenas de texto que se mostrarn al usuario en los mens, botones, etiquetas, mensajes, etc.
El asistente nos dejar la pestaa del layout abierta, para edicin en modo grfico, aadiremos al layout del activity principal de la aplicacin los siguientes componentes:
De la paleta "Form Widgets" aadiremos un "Spinner", en este desplegable mostraremos los catlogos (bases de datos) del servidor de MySQL al que nos conectemos.
De la paleta "Form Widgets" aadiremos un Button, este botn ser el que pulse el usuario para obtener los catlogos del servidor MySQL.
De la paleta "Text Fields" aadiremos un "EditText" multilnea (Multiline Text), en este campo el usuario podr introducir la consulta SQL a ejecutar contra el servidor MySQL.
De la paleta "Form Widgets" aadiremos un "CheckBox", en este check el usuario marcar si es una consulta de seleccin (SELECT, DESC, SHOW) o es una consulta de
modificacin de datos (INSERT, UPDATE, DROP,CREATE, ALTER).
De la paleta "Form Widgets" aadiremos un Button, este botn ser el que pulse el usuario para ejecutar la consulta SQL.
De la paleta "Text Fields" aadiremos un "EditText" multilnea (Multiline Text), en este campo la aplicacin devolver el resultado de la ejecucin de laconsulta SQL.
De la paleta "Text Fields" aadiremos un "TextView" en el que mostraremos un texto de aviso al usuario para que, si la consulta SQL es grande, use la clusula LIMIT para limitar
los registros a mostrar y que la aplicacin no se ralentice en exceso.
Todos estos datos visuales se guardarn en el fichero /res/layout/activity_ajpd_soft_my_sql.xml, en nuestro caso tendr este contenido:
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
android:id="@+id/lsCatalogos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/btCatalogos" />
android:id="@+id/txtSQL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/lsCatalogos"
android:ems="10"
android:hint="@string/text_SQL_Ejecutar"
android:inputType="textMultiLine" >
android:id="@+id/txtResultadoSQL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/btEjecutar"
android:ems="10"
android:inputType="textMultiLine|none" />
android:id="@+id/btCatalogos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/lsCatalogos"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="@string/text_catalogos" />
android:id="@+id/btEjecutar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/txtSQL"
android:text="@string/text_ejecutar" />
android:id="@+id/opConsultaModificacion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/btEjecutar"
android:layout_alignBottom="@+id/btEjecutar"
android:layout_alignParentLeft="true"
android:text="@string/text_consulta_seleccion" />
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/txtResultadoSQL"
android:text="@string/text_aviso_SQL" />
El contenido del fichero donde se guardarn todas las cadenas de texto que usaremos en la aplicacin "res/values/strings.xml":
Acceso MySQL
Configuracin
Acceso MySQL
Consulta SQL a ejecutar
Ejecutar
Resultado SQL
Acerca de
Configuracin
IP/Nombre red servidor
Puerto
Usuario
Contrasea
Base de datos
Acerca de
Guardar configuracin
Catlogo/BD
Probar conexin
Catlogos
SQL de modificacin
Utiliza LIMIT en las consultas SQL de seleccin,
si devuelven muchos registros podran provocar que la
aplicacin se ralentice en exceso o incluso deje de funcionar.
Por ejemplo: nselect * from factura limit 0,10 n(mostrar los 10
primeros registros)"
Introduzca consulta SQL
android:title="@string/text_menu_configuracion"
android:orderInCategory="100"
android:showAsAction="never"
/>
android:title="@string/text_acercade">
Podremos compilar la aplicacin para probarla y ver cmo quedan los componentes visuales, de momento ningn botn funcionar pues an no lo hemos programado, pero nos servir
para comprobar que todo es correcto. Para ello pulsaremos en "Run" - "Run":
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
Incluso podremos pulsar en "MENU" para comprobar que el men aparece correctamente en la parte inferior:
Cabe destacar "uses-permission android:name="android.permission.INTERNET"" que ser el permiso necesario para que la aplicacin funcione, pues ser necearia la conexin a Internet
(o a una red wifi) para acceder al servidor de MySQL Server.
Aadir segundo activity para introduccin de los datos de conexin con servidor
MySQL
Nuestra aplicacin de ejemplo contar con dos activity, por un lado el anteriormente creado que ser el principal, donde el usuario introducir la consulta SQL a ejecutar y donde se
mostrar el resultado. Por otro lado, nuestra aplicacin requerir de un segundo activity donde solicitaremos al usuario los datos de acceso al servidor MySQL al que nos conectaremos (IP,
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
Pulsaremos "Finish":
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
El asistente nos dejar la pestaa del layout abierta, para edicin en modo grfico, aadiremos al layout del activity secundario (el que mostrar los datos de conexin al servidor MySQL)
los siguientes componentes:
De
De
De
De
De
De
De
De
De
la
la
la
la
la
la
la
la
la
paleta
paleta
paleta
paleta
paleta
paleta
paleta
paleta
paleta
Todos estos datos visuales se guardarn en el fichero /res/layout/activity_activity_configuracion.xml, en nuestro caso tendr este contenido:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/text_IP" />
android:id="@+id/txtIP"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:ems="10"
android:inputType="text" >
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/txtIP"
android:text="@string/text_Puerto" />
android:id="@+id/txtPuerto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView2"
android:inputType="number"
android:ems="10" />
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/txtPuerto"
android:text="@string/text_Usuario" />
android:id="@+id/txtUsuario"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView4"
android:inputType="text"
android:ems="10" />
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/txtUsuario"
android:text="@string/text_Contrasea" />
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
android:id="@+id/txtContrasena"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView3"
android:inputType="textPassword"
android:ems="10" />
android:id="@+id/btProbarConexion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtContrasena"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:text="@string/text_probar_conexion" />
Este activity tambin incorporar un men, el fichero xml del men "/res/layout/menu/activity_activity_config.xml":
android:title="@string/text_menu_guardar_configuracion"
android:orderInCategory="100"/>
android:title="@string/text_acercade">
Nota: ms adelante explicaremos y mostraremos todo el cdigo Java para hacer funcionar todas las opciones visuales de la aplicacin Android con acceso a MySQL.
Descargar y aadir JDBC a proyecto Eclipse para acceso a MySQL desde Android
En primer lugar necesitaremos el JDBC para el motor de base de datos al que queramos acceder desde Android, en nuestro caso, como ejemplo, accederemos a un servidor de MySQL
Server instalado en un equipo Linux. Para descargar el JDBC accederemos a la web oficial del motor de base de datos y descargaremos el fichero correspondiente al JDBC, para MySQL
accederemos a la URL:
http://dev.mysql.com/downloads/connector/j
A la fecha de este tutorial descargamos la versin Connector/J 5.1.24, podremos descargar el .tar o el .zip, ambos son vlidos para cualquier sistema operativo. Una vez descargado el
fichero mysql-connector-java-5.1.24.zip lo descomprimiremos pulsando con el botn derecho del ratn sobre l y seleccionado "Extraer aqu":
Dentro de este fichero comprimido habr varios (.jar, documentacin, cdigo fuente), el importante es el mysql-connector-java-5.1.24-bin.jar, copiaremos este fichero (pulsando sobre
l con el botn derecho):
Desde Eclipse, exploraremos nuestro proyecto Android, pulsaremos con el botn derecho sobre la carpeta "libs" y pulsaremos en "Paste" (para pegar el fichero .jar del conector de
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
MySQL):
java.sql.Connection;
java.sql.DriverManager;
java.sql.ResultSet;
java.sql.SQLException;
java.sql.Statement;
Aadiremos la siguiente variable de tipo "Connection", que usaremos para conectarnos slo una vez durante el proceso de ejecucin de una consulta SQL en MySQL:
Connection conexionMySQL;
Aadiremos un procedimiento para conectarnos al servidor MySQL, as podremos usarlo cada vez que lo necesitemos. Dicho procedimiento necesitar usuario, contrasea, IP o DNS,
puerto y catlogo del servidor de MySQL al que nos conectaremos, si hay algn error lo capturar y lo mostrar en una notificacin Android:
public void conectarBDMySQL (String usuario, String contrasena,
String ip, String puerto, String catalogo)
{
if (conexionMySQL == null)
{
String urlConexionMySQL = "";
if (catalogo != "")
urlConexionMySQL = "jdbc:mysql://" + ip + ":" + puerto + "/" + catalogo;
else
urlConexionMySQL = "jdbc:mysql://" + ip + ":" + puerto;
if (usuario != "" & contrasena != "" & ip != "" & puerto != "")
{
try
{
Class.forName("com.mysql.jdbc.Driver");
conexionMySQL = DriverManager.getConnection(urlConexionMySQL,
usuario, contrasena);
}
catch (ClassNotFoundException e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
catch (SQLException e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
}
}
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
Como ejemplo nos conectaremos al servidor MySQL desde nuestra aplicacin Android, ejecutaremos una consulta SQL que devuelve registros y mostraremos el resultado en un cuadro de
texto:
buttonEjecutar.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
try
{
SSring QSLEjecutar = "select * from facturas limit 10";
conectarBDMySQL("root", "contrasea",
"ajpdsoft.com", "3306", "bdfacturas");
Statement st = conexionMySQL.createStatement();
ResultSet rs = st.executeQuery(SQLEjecutar);
String resultadoSQL = "";
Integer numColumnas = 0;
//nmero de columnas (campos) de la consula SQL
numColumnas = rs.getMetaData().getColumnCount();
//mostramos el resultado
while (rs.next())
{
for (int i = 1; i <= numColumnas; i++)
{
if (rs.getObject(i) != null)
{
if (resultadoSQL != "")
if (i < numColumnas)
resultadoSQL = resultadoSQL + rs.getObject(i).toString() + ";";
else
resultadoSQL = resultadoSQL + rs.getObject(i).toString();
else
if (i < numColumnas)
resultadoSQL = rs.getObject(i).toString() + ";";
else
resultadoSQL = rs.getObject(i).toString();
}
else
{
if (resultadoSQL != "")
resultadoSQL = resultadoSQL + "null;";
else
resultadoSQL = "null;";
}
}
resultadoSQL = resultadoSQL + "n";
}
textResultadoSQL.setText(resultadoSQL);
st.close();
rs.close();
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
});
}
android.net.Uri;
android.os.Bundle;
android.app.Activity;
android.app.AlertDialog;
android.content.Context;
android.content.DialogInterface;
android.content.Intent;
android.content.SharedPreferences;
android.view.Menu;
android.view.MenuItem;
android.view.View;
android.widget.ArrayAdapter;
android.widget.Button;
android.widget.CheckBox;
android.widget.Spinner;
android.widget.TextView;
android.widget.Toast;
import
import
import
import
import
java.sql.Connection;
java.sql.DriverManager;
java.sql.ResultSet;
java.sql.SQLException;
java.sql.Statement;
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
String[] listaCatalogos;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ajpd_soft_my_sql);
//Asignamos cada objeto visual creado en el layout xml a su
//respectiva variable
textSQL = (TextView)findViewById(R.id.txtSQL);
spnCatalogos = (Spinner)findViewById(R.id.lsCatalogos);
textResultadoSQL = (TextView)findViewById(R.id.txtResultadoSQL);
buttonEjecutar = (Button) findViewById(R.id.btEjecutar);
buttonCatalogos = (Button) findViewById(R.id.btCatalogos);
chbSQLModificacion = (CheckBox) findViewById(R.id.opConsultaModificacion);
//Botn para mostrar lista de catlogos (bases de datos) de MySQL
buttonCatalogos.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
obtenerListaCatalogos();
try
{
ArrayAdapter adaptador =
new ArrayAdapter(AjpdSoftMySQL.this,
android.R.layout.simple_list_item_1, listaCatalogos);
adaptador.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spnCatalogos.setAdapter(adaptador);
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
});
//Botn para ejecutar consulta SQL en MySQL
buttonEjecutar.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
cargarConfiguracion();
SQLEjecutar = textSQL.getText().toString();
catalogoMySQL = spnCatalogos.getSelectedItem().toString();
conectarBDMySQL(usuarioMySQL, contrasenaMySQL,
ipServidorMySQL, puertoMySQL, catalogoMySQL);
String resultadoSQL =
ejecutarConsultaSQL(chbSQLModificacion.isChecked(),
getApplication());
textResultadoSQL.setText(resultadoSQL);
}
});
}
//crear el men en el activity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_ajpd_soft_my_sql, menu);
return true;
}
//cdigo para cada opcin de men
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.menu_configuracion:
menuConfiguracion();
return true;
case R.id.menu_acerca_de:
visitarURL("http://www.ajpdsoft.com");
return true;
default:
return super.onOptionsItemSelected(item);
}
}
//abrir ventana-activity Configuracin
public void menuConfiguracion()
{
Intent i = new Intent(AjpdSoftMySQL.this,
Activity_Configuracion.class);
startActivity(i);
}
//Abrir navegador con URL especificada
public void visitarURL(String url)
{
Intent browserIntent =
new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);
}
//guardar configuracin aplicacin Android usando SharedPreferences
public void guardarConfiguracion()
{
SharedPreferences prefs =
getSharedPreferences("AjpdSoftMySQL", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("SQL", textSQL.getText().toString());
editor.putString("Catlogo", spnCatalogos.getSelectedItem().toString());
editor.commit();
}
//cargar configuracin aplicacin Android usando SharedPreferences
public void cargarConfiguracion()
{
//leemos los valores de conexin al servidor
//MySQL desde SharedPreferences
SharedPreferences prefs =
getSharedPreferences("AjpdSoftMySQL", Context.MODE_PRIVATE);
SQLEjecutar = prefs.getString("SQL", "");
catalogoMySQL = prefs.getString("Catlogo", "");
ipServidorMySQL = prefs.getString("Conexin", "192.168.1.100");
contrasenaMySQL = prefs.getString("Contrasea", "");
puertoMySQL = Integer.toString(prefs.getInt("Puerto", 3306));
usuarioMySQL = prefs.getString("Usuario", "root");
}
//Obtener lista de catlogos de MySQL
public void obtenerListaCatalogos ()
{
try
{
cargarConfiguracion();
conectarBDMySQL(usuarioMySQL, contrasenaMySQL,
ipServidorMySQL, puertoMySQL, "");
//ejecutamos consulta SQL
Statement st = conexionMySQL.createStatement();
ResultSet rs = st.executeQuery("show databases");
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
rs.last();
Integer numFilas = 0;
numFilas = rs.getRow();
listaCatalogos = new String[numFilas];
Integer j = 0;
//mostramos el resultado
for (int i = 1; i <= numFilas; i++)
{
listaCatalogos [j] = rs.getObject(1).toString();
j++;
rs.previous();
}
rs.close();
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
//conectar al servidor de MySQL Server
public void conectarBDMySQL (String usuario, String contrasena,
String ip, String puerto, String catalogo)
{
if (usuario == "" || puerto == "" || ip == "")
{
AlertDialog.Builder alertDialog =
new AlertDialog.Builder(AjpdSoftMySQL.this);
alertDialog.setMessage("Antes de establecer la conexin " +
"con el servidor " +
"MySQL debe indicar los datos de conexin " +
"(IP, puerto, usuario y contrasea).");
alertDialog.setTitle("Datos conexin MySQL");
alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
alertDialog.setCancelable(false);
alertDialog.setPositiveButton("Aceptar",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
menuConfiguracion();
}
});
alertDialog.show();
}
else
{
String urlConexionMySQL = "";
if (catalogo != "")
urlConexionMySQL = "jdbc:mysql://" + ip + ":" +
puerto + "/" + catalogo;
else
urlConexionMySQL = "jdbc:mysql://" + ip + ":" + puerto;
if (usuario != "" & contrasena != "" & ip != "" & puerto != "")
{
try
{
Class.forName("com.mysql.jdbc.Driver");
conexionMySQL = DriverManager.getConnection(urlConexionMySQL,
usuario, contrasena);
}
catch (ClassNotFoundException e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
catch (SQLException e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
}
}
public static String ejecutarConsultaSQL(Boolean SQLModificacion, Context context)
{
try
{
String resultadoSQL = "";
//ejecutamos consulta SQL de seleccin (devuelve datos)
if (!SQLModificacion)
{
Statement st = conexionMySQL.createStatement();
ResultSet rs = st.executeQuery(SQLEjecutar);
Integer numColumnas = 0;
//nmero de columnas (campos) de la consula SQL
numColumnas = rs.getMetaData().getColumnCount();
//obtenemos el ttulo de las columnas
for (int i = 1; i <= numColumnas; i++)
{
if (resultadoSQL != "")
if (i < numColumnas)
resultadoSQL = resultadoSQL +
rs.getMetaData().getColumnName(i).toString() + ";";
else
resultadoSQL = resultadoSQL +
rs.getMetaData().getColumnName(i).toString();
else
if (i < numColumnas)
resultadoSQL =
rs.getMetaData().getColumnName(i).toString() + ";";
else
resultadoSQL =
rs.getMetaData().getColumnName(i).toString();
}
//mostramos el resultado de la consulta SQL
while (rs.next())
{
resultadoSQL = resultadoSQL + "n";
//obtenemos los datos de cada columna
for (int i = 1; i <= numColumnas; i++)
{
if (rs.getObject(i) != null)
{
if (resultadoSQL != "")
if (i < numColumnas)
resultadoSQL = resultadoSQL +
rs.getObject(i).toString() + ";";
else
resultadoSQL = resultadoSQL +
rs.getObject(i).toString();
else
if (i < numColumnas)
resultadoSQL = rs.getObject(i).toString() + ";";
else
resultadoSQL = rs.getObject(i).toString();
}
else
{
if (resultadoSQL != "")
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
android.net.Uri;
android.os.Bundle;
android.app.Activity;
android.content.Context;
android.content.Intent;
android.view.Menu;
android.view.MenuItem;
android.view.View;
android.widget.Button;
android.widget.TextView;
android.widget.Toast;
android.content.SharedPreferences;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Activity_Configuracion extends Activity {
TextView textIP, textPuerto, textContrasena, textUsuario;
private Button buttonProbarConexion;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity__configuracion);
//Asignamos a cada objeto visual creado a su
//respectivo elemento de main.xml
textIP = (TextView)findViewById(R.id.txtIP);
textPuerto = (TextView)findViewById(R.id.txtPuerto);
textContrasena = (TextView)findViewById(R.id.txtContrasena);
textUsuario = (TextView)findViewById(R.id.txtUsuario);
buttonProbarConexion = (Button) findViewById(R.id.btProbarConexion);
//Botn para ejecutar consulta SQL en MySQL
buttonProbarConexion.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
//Conectamos con el servidor de MySQL directamente
try
{
String conexionMySQLURL = "jdbc:mysql://" +
textIP.getText().toString() + ":" + textPuerto.getText().toString();
String usuario = textUsuario.getText().toString();
String contrasena = textContrasena.getText().toString();
Toast.makeText(getApplicationContext(),
"Conectando a servidor MySQL",
Toast.LENGTH_SHORT).show();
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(conexionMySQLURL,
usuario, contrasena);
Toast.makeText(getApplicationContext(),
"Conectado Servidor MySQL",
Toast.LENGTH_LONG).show();
con.close();
}
catch (ClassNotFoundException e)
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
catch (SQLException e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_activity__configuracion, menu);
return true;
}
//cdigo para cada opcin de men
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.menu_guardar_configuracion:
guardarConfiguracion();
return true;
case R.id.menu_acerca_de:
visitarURL("http://www.ajpdsoft.com");
return true;
default:
return super.onOptionsItemSelected(item);
}
}
//guardar configuracin aplicacin Android usando SharedPreferences
public void guardarConfiguracion()
{
try
{
SharedPreferences prefs =
getSharedPreferences("AjpdSoftMySQL", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("Conexin", textIP.getText().toString());
editor.putString("Contrasea", textContrasena.getText().toString());
int puerto = 3306;
puerto = Integer.valueOf(textPuerto.getText().toString());
editor.putInt("Puerto", puerto);
editor.putString("Usuario", textUsuario.getText().toString());
editor.commit();
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
//cargar configuracin aplicacin Android usando SharedPreferences
public void cargarConfiguracion()
{
try
{
SharedPreferences prefs =
getSharedPreferences("AjpdSoftMySQL", Context.MODE_PRIVATE);
textIP.setText(prefs.getString("Conexin", "192.168.1.100"));
textContrasena.setText(prefs.getString("Contrasea", ""));
int puerto = 3306;
puerto = prefs.getInt("Puerto", 3306);
textPuerto.setText(Integer.toString(puerto));
textUsuario.setText(prefs.getString("Usuario", "root"));
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
//Abrir navegador con URL determinada
public void visitarURL(String url)
{
Intent browserIntent =
new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);
}
//en el evento "Cerrar ventana" guardar los datos en fichero xml
@Override
public void onDestroy()
{
super.onDestroy();
guardarConfiguracion();
}
//en el evento "Abrir ventana" leemos los datos de configuracin del fichero xml
@Override
protected void onStart()
{
super.onStart();
cargarConfiguracion();
}
}
En el siguiente enlace se puede descargar de forma gratuita el proyecto completo en Eclipse:
AjpdSoft Acceso MySQL Android cdigo Java.
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
Introduciremos los datos de conexin al servidor MySQL al que queramos conectarnos (IP, Puerto, Usuario y Contrasea):
Pulsaremos el botn de Men del dispositivo y en el men tocaremos en "Guardar configuracin", de esta forma los datos de conexin se guardarn para futuras conexiones. Una vez
establecidos los datos podremos pulsar en el botn "Probar conexin", si todo es correcto mostrar el mensaje "Conectado servidor MySQL", cerraremos esta ventana y volveremos a la
ventana principal pulsando el botn Atrs del dispositivo:
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
Ahora deberemos elegir el catlogo (base de datos) que usaremos, para obtener las bases de datos del servidor al que nos hemos conectado pulsaremos en "Catlogos":
Nos mostrar en una lista desplegable todos los catlogos a los que el usuario especificado anteriormente tendr acceso, tocaremos en el que queramos usar, por ejemplo "bdajpdsoft":
Ahora ya podremos introducir la consulta SQL que queramos para mostrar los datos que necesitemos, en el ejemplo mostramos la suma total de un campo de una tabla con:
select sum(counter) from nuke_stories
Tras escribir la consulta SQL tocaremos en "Ejecutar":
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
Nota: hay que tener en cuenta que la aplicacin no realiza LIMIT en las consultas de seleccin (SELECT), por lo que si queremos ejecutar una consulta que
puede devolver gran cantidad de datos recomendamos usar LIMIT para evitar que la aplicacin se ralentice en exceso o incluso deje de responder. Por
ejemplo:
select * from factura limit 0,10
(mostrar los 10 primeros registros de la tabla "factura")
La aplicacin mostrar todos los datos de la consulta SQL ejecutada (nombre de las columnas y valor de cada una de ellas):
AjpdSoft Acceso MySQL Android tambin permite ejecutar consultas SQL de modificacin de datos (INSERT, UPDATE, DELETE, DROP, CREATE, ALTER), para ello escribiremos la consulta
SQL y marcaremos "SQL de modificacin":
Artculos relacionados
AjpdSoft Acceso MySQL Android cdigo Java.
Mens en Android, cmo aadir mens a nuestras aplicaciones Android Java Eclipse.
Cmo aadir un botn y su cdigo en aplicacin Android con Eclipse.
Mi primera aplicacin Android con Eclipse en Linux, instalar Eclipse Ubuntu.
http://www.ajpdsoft.com/modules.php?name=News&le=article&sid=656
Crditos
Artculo realizado ntegramente por Alonsojpd miembro fundador del proyecto Proyecto AjpdSoft.
Artculo en ingls.
Me gusta
Compartir
3020
Seguir a @ajpdsoft
3,313 seguidores
Este sitio web NO CONTIENE malware, todos los programas con cdigo fuente aqu. Autor: Alonso Javier Prez Daz Google+ Sguenos en Google+