次のコードを使用して、AndroidからMySQL
のlocalhost
を接続しました。 catchセクションで指定されたアクションのみを表示します。接続に問題があるかどうかはわかりません。
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);
}
}
}
このコードを実行すると、avdに「new」と表示されます。
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
誰かが解決策を提案できますか?事前に感謝します
MySQLデータベースには、Androidネイティブでアクセスできません。 Android JDBCが機能しない:ドライバーでClassNotFoundException
見る
http://www.helloandroid.com/tutorials/connecting-mysql-database
Androidはデータベースサーバーに直接接続できません。したがって、要求をデータベースに渡し、応答を返す単純なWebサービスを作成する必要があります。
http://codeoncloud.blogspot.com/2012/03/Android-mysql-client.html
ほとんどの[良い]ユーザーにとっては、これで問題ないでしょう。しかし、あなたがあなたのプログラムを手に入れるハッカーを得ると想像してください。私は自分のアプリケーションを逆コンパイルしましたが、見たものは怖いです。彼らがあなたのデータベースにあなたのユーザー名/パスワードを手に入れて大混乱をもたらすとしたらどうでしょう?悪い。
このコードは永久に実行されます!!! diko(トルコ)により作成
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();
}
}
}
}
});
}
アプリケーションをサーバーに接続する必要がある場合は、PHP/MySQLおよびJSONを使用して実行できます http://www.androidhive.info/2012/05/how-to-connect-Android-with-php- mysql / .Mysql接続コードはAsynTaskクラスにある必要があります。メインスレッドで実行しないでください。
データベースをモバイルに保持しますか? mysqlの代わりにsqliteを使用します。
アイデアがサーバー上にデータベースを保持し、モバイルからアクセスすることである場合。 Webサービスを使用して、データを取得/変更します。
gradleファイルでtargetSdkVersionを8に変更してみてください
targetSdkVersion 8
もう1つのアプローチは、3層アーキテクチャを使用する仮想JDBCドライバーを使用することです。JDBCコードは、MySql JDBCドライバーに渡す前にJDBCコード(構成とセキュリティ)をフィルター処理するリモートサーブレットにHTTP経由で送信されます。結果はHTTP経由で返送されます。この手法を使用するいくつかのフリーソフトウェアがあります。 Googleの「HTTP経由のAndroid JDBCドライバー」。
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());
}
}