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:∩´︶`∩