Eclipse ✕ Android ✕ MySQL その1
今度はAndroidを使って外部のMySQLからデータを取ってくることをやります。
MySQLからデータを取るのには必要なライブラリがあります。
MySQL Connector/J
をダウンロードする必要があります。
ファイルの中にはいろいろあります。
$ls Downloads/mysql-connector-java-5.1.21 CHANGES README.txt mysql-connector-java-5.1.21-bin.jar COPYING build.xml src/ README docs/
その中の「mysql-connector-java-5.1.21-bin.jar」だけを使います。
jarファイルをプロジェクト内にコピーします。

プロジェクトを右クリック→「ビルド・パス」→「ビルド・パスの構成」

①「jar 追加」からconnector-java-5.1.21-bin.jarを追加する。
②追加されていることを確認。
③OKをクリック。
ちゃんと起動できるかチェック。
JavaでJDBCを用いてMySQLへ接続する (前編)
/* クラスをインポートする */
import java.sql.*;
public class MysqlTest {
public static void main(String[] args) {
try {
/* ドライバクラスをロードする */
Class.forName("com.mysql.jdbc.Driver");
/*
* データベースに接続する
* この場合は
* ホスト名 :localhost
* データベース名:test
* ユーザ名 :user
* パスワード :password
* とする
*/
String url = "jdbc:mysql://localhost/test";
String user="username";
String pass ="password";
Connection con = DriverManager.getConnection(url,user,pass);
/*
* 中略
* SQLのクエリ実行,結果の処理などを記述
*/
/* データベース切断 */
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}起動確認の後は外部との連携に入ります。
まずはデータベース作成。(MySQLは入っている前提です)
ユーザ:root
データベース名:sample
テーブル名:
$mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 52
Server version: 5.0.95 Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database sample;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| sample |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> use sample;
Database changed
mysql> create table first_mysql( name text );
Query OK, 0 rows affected (0.00 sec)
mysql> insert into first_mysql(name) values('hoge');
Query OK, 1 row affected (0.00 sec)
mysql> insert into first_mysql(name) values('hoge02');
Query OK, 1 row affected (0.00 sec)
mysql> select * from first_mysql;
+--------+
| name |
+--------+
| hoge |
| hoge02 |
+--------+
データベース完成!
次はJava側のソース作成。
Androidのソースの前にJavaで動くことをチェックします。
MySQL ドライバー参照
package Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
class DatabaseTest {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://192.168.100.200/sample";
String user="root";
String pass ="";
Connection con = DriverManager.getConnection(url,user,pass);
// 3.SQL ステートメント・オブジェクトの作成
Statement stmt = con.createStatement();
// 4.SQL ステートメントの発行
ResultSet rs = stmt.executeQuery("SELECT * from first_mysql ");
// 5.結果の出力
while (rs.next()) {
System.out.println(rs.getString("name"));
}
// 6.データベースのクローズ
rs.close();
stmt.close();
con.close();
} catch (SQLException e1) {
System.out.println(
"SQLException: " + e1.getMessage());
System.out.println(
" SQLState: " + e1.getSQLState());
System.out.println(
" VendorError: " + e1.getErrorCode());
} catch (Exception e2) {
System.out.println(
"Exception: " + e2.getMessage());
}
}
}
実行!!!
SQLException: Access denied for user 'root'@'192.168.100.2' (using password: NO)
SQLState: 28000
VendorError: 1045しかし、エラーが。。。
権限の問題だったみたいです。
サーバ側はiptableを無効にします。
$service iptable stop
mysql側はアクセスできる人を追加します。
mysql> GRANT ALL PRIVILEGES ON sample.* to 'root'@'192.168.100.2'; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES ; Query OK, 0 rows affected (0.00 sec)
Javaで確認できた(∩´∀`)∩ワーイ
次はAndroidでやりますかー。
続く、、、
*1:∩´︶`∩

