20200430のMySQLに関する記事は4件です。

PHPでのMySQL (データベース)接続 PDO

PDOとは

PHP Data Objectsrの略称
PHPからデータベースのアクセスを抽象的にしてくれるもの

PHPからMySQLに接続するコード例(SELECT文)

<?php

$mysql    = 'mysql:host=localhost;dbname=xxxxxx,charet=utf8';
//xxxxxx === 自分のmysql中の接続したいデータベース名
$user     = 'xxxxxx'; 
//xxxxxx === 自分のmysqlユーザー名
$passwoad = 'xxxxxx'; 
//xxxxxx === 自分のmysqlパスワード

try {
    $db     = new PDO($mysql, $user, $passwoad);
    $select = "SELECT * FROM" ;
    $res    = $db->query($select);

} catch (PDOException $e) {
    echo '接続エラー: ' . $e->getMessage();
}

?>
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

JavaでDB接続をしてみる

JavaでDBを操作するには

Javaで使うMySQLをドライバーを入手し、プロジェクトに追加する

SQLドライバーを入手

以下のURLにアクセスし、Select Operating System:の下にあるセレクトボックスをPlatform Independentにして
zipをダウンロードし、解凍する。(ダウンロード先はどこでもOK)
SQLドライバー
スクリーンショット 2020-04-30 14.35.36.png

解凍したらjarファイルができる。

プロジェクトに追加

解凍したSQLドライバーをプロジェクトに追加する。
Eclipseで作ったプロジェクトのWebContent->WEB-INF->libにドラッグ&ドロップ
以下のようになる。
スクリーンショット 2020-04-30 14.34.47.png

ビルドパスの構成を設定

`プロジェクト右クリック->ビルド・パス->ビルド・パスの構成を開き、ライブラリタブから外部JARの追加を選択し、先ほどWebContent->WEB-INF->libに追加したjarファイルを選択し、追加させる。
追加させた時の画面が以下の通り。
スクリーンショット 2020-04-30 14.45.16.png

DBの接続確認

以下の実装でDB接続を図る

DBConnect.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBManager {
    public static Connection getConnection(){
        Connection con = null; // 初期化
        try{
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:ポート番号/データベース名","ユーザー名","パスワード");
            System.out.println("DB接続成功!!!");
            return con;
        }catch(ClassNotFoundException e){
            throw new IllegalMonitorStateException(); // クラスがなかった時の例外処理
        } catch (SQLException e) {
            throw new IllegalMonitorStateException(); // SQLでエラーが起きた時の例外処理
        }
    }
}
DBConnect.java
  Class.forName("com.mysql.jdbc.Driver");
  con = DriverManager.getConnection("jdbc:mysql://localhost:ポート番号/データベース名","ユーザー名","パスワード");
  System.out.println("DB接続成功!!!"); // 成功したら出力するようになっている なくてもOK
  return con; // 接続結果を返す

Class.forName("com.mysql.jdbc.Driver");

Classクラス

クラスクラス・・・w

すべてのクラスのスーパークラスである java.lang.Object クラスにgetClass()というメソッドが実装されており、サブクラスのインスタンス生成時に該当のサブクラスのClass情報をClassクラスのインスタンスとして生成し、保持します。

クラス読み込み用クラスみたいなイメージかな

forName("com.mysql.jdbc.Driver");

()内はクラス名 ここではSQLドライバーを指定している。

forName()することにより、DBドライバクラスがロードされ、staticイニシャライザが実行されます。DBドライバクラスは全て、java.sql.Driverを実装しており、各DBドライバクラスでは、staticイニシャライザでDriverManagerクラスというドライバを管理するクラスにDBドライバクラス自身を登録しに行くという処理を実施しています。

forNameでSQLドライバーを探しに行って勝手に登録してくれるみたい
参考:知ってるようで知らないClassクラス(基本編)

以上でDBの接続は完了する。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DB設計でのデータ型の決定方法

そもそもなぜデータ型を指定しないといけないの?

データ型を指定するという事は変数がどのくらいのメモリ領域を必要とするかをDBに教えてあげる行為です。

仮にデータ型を指定する,というプロセスがない場合どうなるでしょうか?

宣言された変数はどんな型のデータが入ってもいいように、一番大きくメモリを使うデータ型の分,メモリを占有します。

ユーザーが少ないWebアプリの場合なら一つ一つのメモリが無駄にスペースを取っていても処理結果の差を感じる事はありませんが,TwitterやYouTube等の大型サービスになっていくと無視できない存在になってきます。

ですので,自分の開発アプリが大規模なユーザーを抱えていくであろう事を期待しつつ,丁寧に一つ一つのカラムにデータ型を記述していきましょう。

とりあえずよく使うデータ型について復習しよう

個人的によくみるデータ型を列挙してみますので復習がてらに確認していきましょう。

データ型 特殊能力
string 文字列(1〜255文字)
text 文字列(1〜4294967296文字)
integer 整数(4バイト)
bigint 整数(8バイト)

上記のデータ型だけマスターすればもう貴方はデータ型マスターです。
さよならバイバイして旅に出た甲斐がありました。お疲れ様です。

文字列,整数の長さによってデータ型を選択しないといけないので,それぞれの注意点について解説します。

文字列

これに関してはあまり深く考えなくても大丈夫です。

単語の記入を促す場合はstringを使用する。

文章の記入を促す場合はtextをしようして下さい。

日本語ならピカソのフルネームでもstringで格納できるのでnameカラムの場合もstringでLGTMです。

整数(重要)

半角数字の場合,integerは8桁,bigintは16桁まで格納できます。

クレジットカードの番号は8桁超えるのでbigintで登録して下さい。
※これを伝えたかった

また,idも将来的にユーザーが増えると膨大な桁数になる可能性があります。
railsではデフォルトでbigintになっているので,bigintをチョイスする事をお勧めします。

参考文献

Ruby on Rails のドキュメント
https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_column

ピカソの本名
http://www.studio-cube.com/namae/namae01.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-composeでアプリサーバーコンテナからMySQLサーバーコンテナに接続する。

実行環境

Docker for Mac
Docker version 19.03.8

簡単な事だけどかなり手こずったのでまとめ。

Dockerfile

FROM ruby:2.7.1-buster

RUN gem install rails

# node.jsをインストール
RUN apt-get update && \
    apt-get install -y node.js

# yarnをインストール
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
    apt-get update && apt-get install -y yarn
RUN rails webpacker:install
RUN yarn install --check-files

COPY Gemfile /Gemfile
COPY Gemfile.lock /Gemfile.lock

RUN bundle install

*開発環境には node.js、 yarn、 webpackerのインストールが必要なので先にインストールしておく。

docker-compose.yml

version: "3"
services:
  mysql:
    image: mysql:8.0.20
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: root
  app:
    build: .
    volumes:
      - ".:/app"
    ports:
      - "3000:3000"
    tty: true
    depends_on:
      - mysql
    working_dir: "/app"

これらを元にdocker-composeでコンテナを立ち上げていきます。

$ docker-compose up

立ち上がったらコンテナ内にアクセス。

$ docker exec -it (立ち上げたコンテナのNAMES) /bin/bash

mariadb-clientをインストール

$ apt install mariadb-client

mysqlにアクセス

$ mysql -u root -proot -h mysql

* docker-compose.yml参照
-u = ユーザーを指定
-p = 指定したユーザーのパスワード
-h = ホスト、mysqlコンテナの名前?
MySQL [(none)]>

*アクセス成功

一度ログアウトしconfig/database.ymlを編集します。
具体的にはdatabaseがsqliteになっていたのでmysql2に変更します。

# SQLite. Versions 3.8.0 and up are supported.
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
  adapter: mysql2
  encording: utf8
  username: root
  password: root
  host: mysql
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: rails_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: rails_test

production:
  <<: *default
  database: rails_production

Gemfileもsqliteからmysqlに変更

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.7.1'

gem 'rails', '~> 6.0.2', '>= 6.0.2.2'
# sqliteからmysql2へ
gem 'mysql2'
gem 'puma', '~> 4.1'
gem 'sass-rails', '>= 6'
gem 'webpacker', '~> 4.0'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.7'

~省略~
$ rake db:create
$ mysql -u root -proot -h mysql * もう一度mysqlに接続
$ show databases; * rake db:createが出来ているか確認
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| rails_development  |
| rails_test         |
| sys                |
+--------------------+
6 rows in set (0.011 sec)

一応ここまでやっとけば開発できると思う。完全に自分用で参考にならないかもしれません。
参考: Docker超入門 Part03 - 複数コンテナを動作させる

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む