J'ai utilisé le code suivant pour connecter MySQL
dans localhost
depuis Android. Il affiche uniquement les actions indiquées dans la section catch. Je ne sais pas si c'est un problème de connexion ou non.
package com.test1;
import Java.sql.Connection;
import Java.sql.DriverManager;
import Java.sql.PreparedStatement;
import Java.sql.ResultSet;
import Android.app.Activity;
import Android.os.Bundle;
import Android.widget.TextView;
public class Test1Activity extends Activity {
/** Called when the activity is first created. */
String str="new";
static ResultSet rs;
static PreparedStatement st;
static Connection con;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView tv=(TextView)findViewById(R.id.user);
try
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://10.0.2.2:8080/example","root","");
st=con.prepareStatement("select * from country where id=1");
rs=st.executeQuery();
while(rs.next())
{
str=rs.getString(2);
}
tv.setText(str);
setContentView(tv);
}
catch(Exception e)
{
tv.setText(str);
}
}
}
Lorsque ce code s'exécute, il affiche "nouveau" dans l'avd.
Java.lang.management.ManagementFactory.getThreadMXBean, referenced from method com.mysql.jdbc.MysqlIO.appendDeadlockStatusInformation
Could not find class 'javax.naming.StringRefAddr', referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.storeTo
Could not find method javax.naming.Reference.get, referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.initializeFrom
Quelqu'un peut-il suggérer une solution? Et merci d'avance
Vous ne pouvez pas accéder nativement à une base de données MySQL à partir d'Android. EDIT: En fait, vous pourrez peut-être utiliser JDBC, mais ce n’est pas recommandé (ou peut ne pas fonctionner?) ... voir Android JDBC ne fonctionne pas: ClassNotFoundException sur le pilote
Voir
http://www.helloandroid.com/tutorials/connecting-mysql-database
Android ne peut pas se connecter directement au serveur de base de données. Par conséquent, nous besoin de créer un service Web simple qui transmettra les demandes au base de données et retournera la réponse.
http://codeoncloud.blogspot.com/2012/03/Android-mysql-client.html
Pour la plupart des [bons] utilisateurs, cela pourrait aller. Mais imaginez un pirate informatique qui s'empare de votre programme. J'ai décompilé mes propres applications et c'est effrayant ce que j'ai vu. Et s'ils obtenaient votre nom d'utilisateur/mot de passe dans votre base de données et causaient des ravages? Mal.
ce code fonctionne en permanence !!! créé par diko (Turquie)
public void mysql() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
thrd1 = new Thread(new Runnable() {
public void run() {
while (!Thread.interrupted()) {
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
}
if (con == null) {
try {
con = DriverManager.getConnection("jdbc:mysql://192.168.1.45:3306/deneme", "ALi", "12345");
} catch (SQLException e) {
e.printStackTrace();
con = null;
}
if ((thrd2 != null) && (!thrd2.isAlive()))
thrd2.start();
}
}
}
});
if ((thrd1 != null) && (!thrd1.isAlive())) thrd1.start();
thrd2 = new Thread(new Runnable() {
public void run() {
while (!Thread.interrupted()) {
if (con != null) {
try {
// con = DriverManager.getConnection("jdbc:mysql://192.168.1.45:3306/deneme", "ALi", "12345");
Statement st = con.createStatement();
String ALi = "'fff'";
st.execute("INSERT INTO deneme (name) VALUES(" + ALi + ")");
// ResultSet rs = st.executeQuery("select * from deneme");
// ResultSetMetaData rsmd = rs.getMetaData();
// String result = new String();
// while (rs.next()) {
// result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n";
// result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n";
// }
} catch (SQLException e) {
e.printStackTrace();
con = null;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
});
}
Si vous avez besoin de connecter votre application à un serveur, vous pouvez le faire via PHP/MySQL et JSON http://www.androidhive.info/2012/05/how-to-connect-Android-with-php-mysql/ .Mysql Le code de connexion doit être en classe AsynTask. Ne l'exécutez pas dans le fil principal.
Voulez-vous conserver votre base de données sur mobile? Utilisez sqlite au lieu de mysql.
Si l’idée est de conserver la base de données sur le serveur et d’y accéder depuis un mobile. Utilisez un service Web pour récupérer/modifier des données.
essayez de changer dans le fichier gradle le targetSdkVersion à 8
targetSdkVersion 8
Une autre approche consiste à utiliser un pilote JDBC virtuel utilisant une architecture à trois niveaux: votre code JDBC est envoyé via HTTP à un servlet distant qui filtre le code JDBC (configuration et sécurité) avant de le transmettre au pilote JDBC MySql. Le résultat vous est renvoyé via HTTP. Certains logiciels libres utilisent cette technique. Juste Google "Pilote Android JDBC sur HTTP".
public void testDB() {
TextView tv = (TextView) this.findViewById(R.id.tv_data);
try {
Class.forName("com.mysql.jdbc.Driver");
// perfect
// localhost
/*
* Connection con = DriverManager .getConnection(
* "jdbc:mysql://192.168.1.5:3306/databasename?user=root&password=123"
* );
*/
// online testing
Connection con = DriverManager
.getConnection("jdbc:mysql://173.5.128.104:3306/vokyak_heyou?user=viowryk_hiweser&password=123");
String result = "Database connection success\n";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from tablename ");
ResultSetMetaData rsmd = rs.getMetaData();
while (rs.next()) {
result += rsmd.getColumnName(1) + ": " + rs.getString(1) + "\n";
}
tv.setText(result);
} catch (Exception e) {
e.printStackTrace();
tv.setText(e.toString());
}
}