JavaでMySQLに接続する。

MySQLJavaを接続してみた。

少し雑ですが、流れは

  1. JDBCインストール。
  2. Tomcatインストール。
  3. TomcatのlibフォルダーにJDBCドライバーを移す。
  4. Eclipseで新規サーブレットを作成して、なんか良くわからんコードを書くと繋がる。


詰まったところとして、Mac用のJDBCが公式から見当たらなかった。

→ Platform Independentからダウンロードすれば良いとStackOverflowに載っていたので、解決。。3時間くらいここにかかった。。。


少し説明が雑なので、後日大幅に加筆修正します。



あとは簡単にJavaでフォーム部分だけのアプリを作ってGETとPOST、DB接続、Maven等の関係をもう少し詳しく勉強したいと思います。

MySQLについて

今回はMySQLでテーブルを作ったり、値を入力したりを勉強しました。主にCUI環境での勉強でした。MySQLWorkBenchは使っていませんが、機会があれば勉強しようと思います。



[環境構築]

先ず、MySQLのダウンロードとインストール。

その後、PATHを通しパスワードを設定。

[データベースとテーブルの作成] 

データベースの作成
CREATE DATABASE [データベース名];

テーブルの作成
CREATE TABLE [テーブル名](i  column1 [データ型] [その他オプション], column2 [データ型] [その他オプション], column3 [データ型] [その他オプション], );


例1

CREATE TABLE GRADE(  
  STUDENTNO INT(4),  
  SUBJECTID INT(2),  
  SCORE INT(3),  
  PRIMARY KEY(STUDENTNO,SUBJECTID),
  FOREIGN KEY(STUDENTNO)REFERENCES STUDENT(STUDENTNO),  
  FOREIGN KEY(SUBJECTID)REFERENCES SUBJECT(SUBJECTID)
);


解説 1行目がGRADEテーブルの作成。
2, 3, 4行目がカラム名、データ型、表示する桁数。 5行目はプライマリーキーとしてSTUDENTIDSUBJECTIDを設定するというもの。 6, 7行目が外部キーの設定。

※外部キーについてはまだ良く分かっていないので後日記事にします。


- PRIMARYKEYについて

【SQL入門】PRIMARY KEY(主キー)制約とは?追加や削除についても解説 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

  • CHARとVARCHARの違いについて

【SQL入門】CHARとVARCHARの違い - Qiita

[データ登録]
INSERT INTOでデータ登録をしてみます。

INSERT INTO GRADE VALUES(1001,10,80);

解説 先ほど作った列

STUDENTNO INT(4),  
  SUBJECTID INT(2),  
  SCORE INT(3),

(1001, 10, 80)を挿入。

f:id:igapon1106:20190414151917p:plain

完成。


次回これをJavaで動かしてみようと思います。

Cookieについて

今日はCoookieについて勉強しました。

Cookieについて

サーバーは通常、クライアントからのほかのリクエストとは関係なしに個別にリクエストに応答する。サーバーはクライアントの状態を追跡する必要がないのでこのようなタイプの動作をステートレスという。

しかし、アプリケーションによってはクライアントに関する情報を一定期間サーバーで保持する必要がある。HTTP1.0も付加されるようになり、HTTP headerの中で送信され、webブラウザ内に保存される。

HTTPにはクッキーの使い方を定めた規則があり、クライアントがクッキーを返すことができるのは、クッキーの発行元に対してだけ。だが、バナー広告等をクリックすると、そのサーバーがクッキーを保持して、別のサイトのバナーにも同一のサーバー上にある為、ユーザーのクッキーが入った広告バナーを設置できます。GETリクエストのヘッダーにクッキーが含まれているので広告代理店側がそのクッキーを元にユーザーの情報を追跡できる。


クッキーの属性

Name クッキーに付ける任意の名前。 こちらだけが必須。その他は省略可能。

Comment サーバーがクッキーに追加するコメント。サーバーはこのコメントを利用してクッキーをどのように使うか説明することが出来る。クッキーを受け取るクライアントはこのコメント欄を調べて、操作が安全かどうか確かめることもできる。

Discard クライアントに対し、ユーザーが処理を終えた時にクッキーを破棄するよう指示する。クッキーをユーザーのディスクドライブに保存しないようにする。

Domain クッキーが有効になるドメインを指定する。

Max-Age クッキーの有効期限を秒単位で指定する。

Expires クッキーが切れる期限を日時で指定する。

Path クッキーの適用対象となるサーバー上のURLを指定する。

Port クッキーがで適用されるTCPポートのリストを指定する。

Secure クライアントに対し、リクエストがセキュアである場合のみ、クッキーを返すように指示する。具体的にはhttpsのみ。

Version クッキーが準拠するHTTP状態保持のバージョンを指定する。


実際にCookieを含んだレスポンスメッセージは以下のようなものである。

HTTP/1.1 200 OK Date: Thu, 12 Jul 2012 07:12:20 GMT Set-Cookie: visit=1; path=/; Secure=; expires=Sun, 22-Nov-12 14:12:20 GMT

で次からアクセスする時、Cookieの値を自動的に載せてリクエストする。 visit= の値が1づつアクセスする度に増えていく。


セッション管理について

Cookieを学ぶまで、リクエストとレスポンスはそれぞれ個別で対になっているものだと思っていたが、Cookieを使うことでセッション(一連の処理)として扱うことができるようになるとのこと。参考にした記事がかなりPHPに関しての記事が多く理解できているか微妙だが、

  • セッションはサーバー側で情報を保存し、クッキーはクライアント内で保存する。
  • PHPではsession_start()という風に記述する。
  • railsではCookieStore, Redis, ActiveRecord方式があるとのこと。

以上が今回自分が理解できたことです。 間違いも多々あると思うので気軽にコメント頂ければと思います。

勉強してきたこと

最近面接を受けて、これまでの自分の学習経歴をうまく説明できなかったので、書いていこうと思う。



10月20日
プログラミング勉強スタート。

HTMLとCSS マークダウンについて。 主に写経しながらタグ等を覚える。

11 月
Rubyの勉強スタート

たのしいRubyまつもとゆきひろ プロを目指すためのRuby入門 を手を動かしながら終了。基本的なRubyの構文を勉強した。

12月
Progateとメンターさんと契約
ProgateでRuby on Railsを扱うに当たって必要な、HTML, CSS, Ruby, SQL, Git, JavaScript, jQuery, Sass, Ruby on Railsのコースを終了。

1月
Railsチュートリアル
Ruby on Rails速習実践ガイド 著複数 主に基本的なMVCの使い方の勉強、CRUD機能、ユーザー作成、認証等を勉強。

2月
オリジナルアプリ作成
オリジナルアプリはとりあえず、分かる範囲の CRUDやユーザー作成、管理者機能を作る。 本当は画像、動画投稿もしたかったが就職活動に間に合わず断念。

3月
JavaScript, jQueryの学習
サーバーサイドの言語にあまりこだわりが無い為、先にフロント部分の学習を進めていこうと思い、JSの勉強。jQueryで色々と後に使えそうなパーツを作って頭の片隅においておければいいと考えています。jQueryデザイン入門 著西畑一馬を読み進めて基本的な構文、イベント、ajax、アニメーション等を学ぶ。

4月
SQLの勉強予定。
ラクルを使うかMySQLで勉強するかは迷っている。

他に勉強したいことは初歩的な要件定義、詳細設計等の書き方について。



全体的に行き当たりばったり感が強い。 WEBプログラマーになる為に何が必要か分かっていなかった。まずは余りVueやRails, Cake等のフレームワークに手を出すのではなくて基本的なことから勉強していきたいと思っています。

ナビバーのログイン状態での表示切り換え

ナビバーで管理者ユーザーログイン後、ユーザーログイン後、ログイン前の3パターンを切り換えるコードを書きました。

<% if current_user && current_user.admin? %>
        <li class="nav-link">
          <%= active_link_to '購読者一覧', '購読者','記事一覧', subscribers_path, "active_nav-link" %>
        </li>
        <li class="nav-item">
          <%= link_to 'サインアウト', session_path('active'), method: :delete, class: "active_nav-link"%>
        </li>
        <li class="nav-link">
          <%= current_user.userid %>様
        </li>
      <% elsif current_user %>
        <li class="nav-item">
          <%= link_to 'サインアウト', session_path('active'), method: :delete, class: "active_nav-link"%>
        </li>
      <% else %>
        <li class="nav-item">
          <%= link_to 'サインイン', new_session_path, class: "active_nav-link"%>
        </li>
        <li class="nav-item">
          <%= link_to 'ユーザー作成', new_user_path, class: "active_nav-link" %>
        </li>
      <% end %>

これは色々と使い回せるのでメモ替わりにブログにアップしました。

scaffoldを写経してみた。

メンターさんに自分の作ったアプリをコードレビューして頂いた際にscaffoldを写経した方がいいとの指摘を受けたので実際に行動に移しました。

気づいた点を箇条書きで書いていきます。

  • before_actionで複数の処理呼び出す。
  • if @user.saveからelse挟んでエラー文出すのはcreateでは定型文。
  • 上記と同じようなものをupdateでもする。
  • destroyもちゃんとnotice入れる。
  • link_to 内のpathの書き方は分かりやすく統一する。
  • routine.rb内で出来る限りresourceを使ってまとめる。

分かりづらいところ - erbの中がまだどういうものがいいかわからない。 - 恐らくHTMLの思想をちゃんと勉強していないのでタグをきちんと使えない。 - json.jbuilderってなんだ。まだ習ってない状態だと思う。

今日は学習報告となりました。

Controllerについて その3(render)


少し日が空きましたが、今日はrenderとredirext_toについて記事にしようと思います。

- render

まず始めにビュー内でもrenderが使われます。コントローラ内とは用途が少し違うみたいなので、今回はコントローラ内で使われる、renderメソッドについて書いていきます。


~ 主な役割 ~

  1. 同じコントローラ内の別のアクションのビューを表示できる。 例
def index
  @products = Users.all
  render action: :new
end

他のコントローラからのビューを表示したい時はrender template: "index"というようにtemplateオプションを利用する。


2. ビュー以外の表示 例

def hello
  render html: "Hello, World!"
end

htmlを直接表示しています。


~ errorについて ~
二度レンダリングを行おうとするとDoubleRenderErrorが発生します。 例えば、

def index
    render :text => 'Hello'
    render :new
  end
end

テキストhelloを表示してから、newアクションに飛ぶのですが、こうするとDoubleRenderErrorとブラウザに表示されます。



~ renderとredirect_toの違い ~
ここはまだまだ曖昧な部分もあるのですが、renderは同じHTTPリクエストのなかで処理をして、redirect_toはブラウザがredirect_toの後のリンクやパス先にリクエストを新たに送ることだと考えています。おそらくrails serverを見れば両者の違いが分かりやすくなるので、後日そのログをブログで紹介したいと思います。