前書き

今回は、コード編です。
ここはそんなに難しくないので、ポイントで書いていきます。

1. Android manifestにインターネット接続の許可を追加する

<uses-permission android:name="android.permission.INTERNET" />
この1行を追加する。これで通信が使えるようになる。

2. レイアウトでボタンとEditTextを設置。

ボタンとプレーンテキストを追加。ここでは、IDは、button、editTextText。

動作としては、ボタンを押すとMySQLへ接続してデータを読み取り、editTextへ表示させるようにする。

3. MainActivity.javaへコードを書く。

ここは、3-1, 3-2・・・と順番に下に書いていく。

3-1. importで必要なライブラリを宣言。

必要なものは下の通り。
import android.widget.Button;
import android.widget.EditText;
import android.view.View;
import android.os.AsyncTask;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
別にwidgetは、widget.*とアスタリスクを使って、全部呼び出してもいいけど、ここでは、わかるように限定にしてます。


3-2. ボタンを押すとイベントが発生するようにトリガーを設定する。

//設置したボタンを取得する
Button sqlbutton = findViewById(R.id.button);
// ボタンにクリックイベントリスナーを設定
sqlbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new DatabaseConnectionTask().execute();
}
});
コード上では、ボタンの名前は、sqlbuttonという名前にしました。
findViewByIdという関数は、レイアウトのxmlで設置したものを探せという命令です。
で探すのは、(R.id.レイアウトで設定したID)と指定します。
ここでは、ボタンです。上記でも赤文字で書いた通り、ボタンのIDは、buttonなので、ここではbuttonです。
でその下が、イベントリスナーです。ボタンを押したら、こうしろっていう命令のところです。ここでは、 new DatabaseConnectionTask()というのを呼び出しています。


3-3. イベントにいよいよMySQL接続コードを書く。

全体のコードは下記のとおり。
private class DatabaseConnectionTask extends AsyncTask<Void, Void, String> {

@Override
protected String doInBackground(Void... voids) {
String result = "";
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
// MariaDB JDBCドライバのロードを確認
Class.forName("org.mariadb.jdbc.Driver");

// 接続の試み
String url = "jdbc:mariadb://localhost:3306/dbname";
String user = "user-id";
String password = "user-password";
connection = DriverManager.getConnection(url, user, password);

if (connection != null) {
statement = connection.createStatement();
String sql = "SELECT value FROM table_name order by id DESC limit 0, 1";
resultSet = statement.executeQuery(sql);
if (resultSet.next()) {
result = resultSet.getString("value");
} else {
result = "データが見つかりませんでした";
}
} else {
result = "接続に失敗しました";
}

} catch (ClassNotFoundException e) {
result = "JDBCドライバが見つかりません: " + e.getMessage();
} catch (SQLException e) {
result = "データベース接続エラー: " + e.getMessage();
} finally {
try {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
// Ignore
}
}

return result;
}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// 取得した結果をToastで表示
//設置したボタンを取得する
EditText edtext = findViewById(R.id.editTextText);
edtext.setText(result);
}
}
上記のコードの下のところは、環境に合わせて変えてください。
            String url = "jdbc:mariadb://localhost:3306/dbname";
String user = "user-id";
String password = "user-password";
String url = "jdbc:mariadb://[サーバーのアドレス]:[ポート番号]/データベース名";
という書き方になっています。
user, passwordは、MySQLへの接続するID, パスワードになります。

それとは別に下の方にある下記のコード。
        EditText edtext = findViewById(R.id.editTextText);
edtext.setText(result);
これは、レイアウトのテキストボックスを最初に説明したfindViewByIDで紐づけをして、MySQLで取得したデータを表示するようにするコードです。

全体のコードは、こんな感じ。


4. 実際の動作。データ取得の仕方

実際に動作させてボタンを押すと取得したデータを表示します。

今回の取得したSQL文は、入力している最新の日付を1つ取り出せという命令にしました。