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




●前提

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



では、mariaDBからデータを引き出してみましょう。
しかし、データがまだ無いのでデータがありませんと表示されます。

[ScoerServe.java]


import java.sql.*;

public class ScoreServer {
    static Connection con = null;
    final static String MySQL_URL = "jdbc:mysql://localhost:3306/test906";    // 接続するMySQLのURL(ローカルホスト:madiadb/MySQLは3306番ポート)
final static String MySQL_USR = "root"; // MySQLのユーザー名
final static String MySQL_PASS = "1234abcde"; // MySQLのユーザーのパスワード
// // MySQL(mariaDB)に接続 // public static boolean SQLOpen() { try { // mariaDBへ接続するためにJDBCドライバ読み込む Class.forName("org.mariadb.jdbc.Driver").newInstance(); // 接続する con = DriverManager.getConnection(MySQL_URL, MySQL_USR,MySQL_PASS); System.out.println("MySQL(mariaDB)に接続できました"); return true; } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { System.out.println("JDBCドライバのロードに失敗しました"); } catch (SQLException e) { System.out.println("MySQL(mariaDB)に接続できませんでした"); if (con != null) { try { con.close(); con=null; } catch (SQLException ex) { System.out.println("MySQL(mariaDB)のCloseに失敗しました"); } } } return false; } // // スコア順に表示する // public static void GetScoreRank() { try { // // データを取得するには Statement を作成して executeQuery() でSQL文を投げると ResultSet の object で返ってくる // Statement stm = con.createStatement(); String sql = "SELECT * FROM hiscore ORDER BY score DESC"; ResultSet rs = stm.executeQuery(sql); // rs.next()はこのカラムがあるかだけでは無く、次のカラムに移動させるので、このような方法をとっています。 boolean f=false; while(rs.next()){ f=true; int id = rs.getInt("id"); String name = rs.getString("name"); int score = rs.getInt("score"); System.out.println("id" + id + ":name=" + name + ":score=" + score); } if(f==false){ System.out.println("データがありません"); } return; } catch (SQLException e) { System.out.println("MySQL(mariaDB)に接続できませんでした2"); } } // // メイン // public static void main(String[] args) { // データベースへ接続する if(!SQLOpen()){ System.out.println("データベースに接続できませんでした"); return; } GetScoreRank(); } }

java側でとりあえず一人分登録することにしました。コードはそう変わっていません。


import java.sql.*;

public class ScoreServer {
    static Connection con = null;
    final static String MySQL_URL = "jdbc:mysql://localhost:3306/test906";    // 接続するMySQLのURL(ローカルホスト:madiadb/MySQLは3306番ポート)
final static String MySQL_USR = "root"; // MySQLのユーザー名
final static String MySQL_PASS = "1234abcde"; // MySQLのユーザーのパスワード
// // MySQL(mariaDB)に接続 // private static boolean openSQL() { try { // mariaDBへ接続するためにJDBCドライバ読み込む Class.forName("org.mariadb.jdbc.Driver").newInstance(); // 接続する con = DriverManager.getConnection(MySQL_URL, MySQL_USR,MySQL_PASS); System.out.println("MySQL(mariaDB)に接続できました"); return true; } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { System.out.println("JDBCドライバのロードに失敗しました"); } catch (SQLException e) { System.out.println("MySQL(mariaDB)に接続できませんでした"); if (con != null) { try { con.close(); con=null; } catch (SQLException ex) { System.out.println("MySQL(mariaDB)のCloseに失敗しました"); } } } return false; } // // 値を返さないsqlクエリを実行 // private static boolean execUpdate(String sql) { try { Statement stm = con.createStatement(); stm.executeUpdate(sql); stm.close(); // close return true; } catch (SQLException e) { return false; } } // // スコア順に表示する // public static void getScoreRank() { try { // // データを取得するには Statement を作成して executeQuery() でSQL文を投げると ResultSet の object で返ってくる // Statement stm = con.createStatement(); ResultSet rs = stm.executeQuery("SELECT * FROM hiscore ORDER BY score DESC"); // rs.next()はこのカラムがあるかだけでは無く、次のカラムに移動させるので、このような方法をとっています。 boolean f=false; while(rs.next()){ f=true; int id = rs.getInt("id"); String name = rs.getString("name"); int score = rs.getInt("score"); System.out.println("id" + id + ":name=" + name + ":score=" + score); } if(f==false){ System.out.println("データがありませんので一人分追加します"); initScore(); } rs.close(); // close stm.close(); // close return; } catch (SQLException e) { System.out.println("MySQL(mariaDB)に接続できませんでした3"); } } // // だれもデータベースに登録されていない場合、とりあえず一人分追加します、 // private static void initScore() { if(!execUpdate("INSERT INTO hiscore (name,score) VALUES('けんぢ',1)")){ System.out.println("追加出来ませんでした"); } } // // メイン // public static void main(String[] args) { // データベースへ接続する if(!openSQL()){ System.out.println("データベースに接続できませんでした"); return; } getScoreRank(); } }

次はクライアントサーバでソケット通信をしてハイスコアの表示をしてみます(両言語java)


戻る