スマフォアプリ(java/kotlin/Swift/Unity)からサーバ(java)のmariadbを操作する




●前提

同時接続は多数
サーバ言語:java+mariaDB+JDBCドライバ
MySQLのrootユーザー名root,passwordは1234abcde
クライアント言語:android-java/android-kotlin/iOS-Swift/unityC#
通信ポート:3456



始めに。ここでは多くのPG言語を使います。なるべくセーフティーな物を選んでいます。
これぐらいのコードならばメモ帳で書くのですが、(本職はゲームエンジンとそれのスクリプトコンパイラを全部ひとりで組むこと)、元部下に馬鹿にされたので(よく馬鹿にされます^^;)swiftのsocket部分だけをjavadoc準拠のコードにしました^^;

MySQLとOracle JAVA。商用利用の観点から、MySQLはmariaDBやpostgreSQLに、JAVAはOpenJDKやruby on railsに移っています。これぐらいのサーバコードならばc++でも書けますがメンテナンス性、生産性は一気に落ちます。ですので暫くはjava+mariaDBでサーバを組んでみて、駄目ならc++かrailsに行こうかと思います。

まあ、普通、こう言うのって、エコーサーバーにして、クライアントが送った文字列をそのまま返すって言うのが入門なんですが、それじゃあつまらないので、スコアサーバでmariaDBにアクセスさせました。

まずは、データベースの作成から。

MySQLWorkBenchでも、teratermのssh接続でのmysqlコマンドでいいので、hiscoreを管理するデータベースを作っておきましょう。

CREATE DATABASE test906;
USE test906;

CREATE TABLE test906.hiscore (id int AUTO_INCREMENT NOT NULL PRIMARY KEY,name varchar(32) NOT NULL,score int NOT NULL);

JDKは1.8を使います。

OpenJDKの導入。

rootで。teratermでsuして下さい。
# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
で導入します。

続いてJAVAの環境設定をします。
ここではrootのままrootのプロファイルの変更をします。一番最後に入れて下さい、ですが、ローカルユーザーだけjava1.8を使う場合はusrプロファイルの変更にしてください。もしくはシェルコマンドで設定できるようにしても良いでしょう。

# vi /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$PATH:$JAVA_HOME/bin

環境変数を有効化するために、一度ログアウトして下さい。

javaから各種データベースへの接続にはドライバがいります。
ここでは、mariaDBを使うのでそれ用のドライバーが必要です。

ここから DOWNLOAD mariaDB connection/J のボタンを押し、ProductをJava 8 Connector に versionを任意(最新は2.6.0)を選びます。自分は2.5.4を選んでいます。
DLしたjarファイルをサーバの適当なディレクトリに置きます(開発環境によって違いますが、実験ですので下記のScoreServer.javaと同じディレクトリでも良いです。後で消せば)。

では、serverのcodeを。適当にclientで入力してteretermで流し込めば良いと思います。実験なのでserverのuserのrootにでも流し込めば良いと思います。

[ScoerServe.java]


import java.sql.*;
public class ScoreServer {
    public static void main(String[] args) {
        Connection connect = null;                                         // connect と言う変数名は通常 con や conn にする事が多いのですがあえて connect にしました
final String MySQL_URL = "jdbc:mysql://localhost:3306/test906"; // 接続するMySQLのURL(ローカルホスト:madiadb/MySQLは3306番ポート)
final String MySQL_USR = "root"; // MySQLのユーザー名
final String MySQL_PASS = "123abcde"; // MySQLのユーザーのパスワード
// // MySQL(mariaDB)に接続 // try { // mariaDBへ接続するためにJDBCドライバ読み込む Class.forName("org.mariadb.jdbc.Driver").newInstance(); // 接続する connect = DriverManager.getConnection(MySQL_URL, MySQL_USR,MySQL_PASS); System.out.println("MySQL(mariaDB)に接続できました"); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { System.out.println("JDBCドライバのロードに失敗しました"); } catch (SQLException e) { System.out.println("MySQL(mariaDB)に接続できませんでした"); } finally { if (connect != null) { try { connect.close(); } catch (SQLException e) { System.out.println("MySQL(mariaDB)のCloseに失敗しました"); } } } } }

えっとutf-8にはBOMと言う物が付くエディタがありますが、必ずBOM無しでセーブして下さい。

では、teretermでコンパイルと実行してみましょう。
まずはコンパイル。(2.6.0の人は2.5.4を2.6.0にして下さい)
javac -cp mariadb-java-client-2.5.4.jar: ScoreServer.java

実行。(2.6.0の人は2.5.4を2.6.0にして下さい)
java -cp mariadb-java-client-2.5.4.jar: ScoreServer

次回はサーバのjavaからSQLにクエリを出してみましょう。


戻る