質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

解決済

sql文

Yoshi--
Yoshi--

総合スコア62

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1回答

0評価

0クリップ

1668閲覧

投稿2017/05/16 05:42

編集2017/05/17 02:56

MutterDAO.java

java

package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import model.Mutter; import util.JDBCUtils; public class MutterDAO { //全レコードを取得 public List<Mutter> findAll() { List<Mutter> mutterList = new ArrayList<Mutter>(); try(Connection conn = JDBCUtils.getConnection()){ // 並び替え; SELECT 列名 FROM テーブル名 ORDER BY 列名 並び順 (検索結果をTWEET_IDの大きい順DESCに並び替える) String sql = "SELECT " + "TWEET_ID AS TWEET_ID," + "USER_NAME AS USER_NAME," + "TWEET.TEXT AS TEXT " // AS は別名的な + "FROM TWEET INNER JOIN USER ON TWEET.USER_ID = USER.USER_ID " //結合;選択列リスト FROM テーブルA JOIN テーブルB ON 両テーブルの結合条件 + "ORDER BY TWEET_ID DESC"; try(PreparedStatement pStmt = conn.prepareStatement(sql)){ // SELECTを実行 try(ResultSet rs = pStmt.executeQuery()){ // SELECT文の結果をArrayListに格納 while (rs.next()) { int tweetId = rs.getInt("TWEET_ID"); String userName = rs.getString("USER_NAME"); String text = rs.getString("TEXT"); Mutter mutter = new Mutter(tweetId, userName, text); mutterList.add(mutter); } } } } catch (Exception e) { throw new RuntimeException(e); } return mutterList; } //つぶやきを追加 public boolean create(Mutter mutter) { try(Connection conn = JDBCUtils.getConnection()){ // INSERT文の準備(idは自動連番なので指定しなくてよい) String sql = "INSERT INTO TWEET (USER_ID,TEXT) VALUES(?, ?)"; try(PreparedStatement pStmt = conn.prepareStatement(sql)){ // INSERT文中の「?」に使用する値を設定しSQLを完成 pStmt.setString(1, mutter.getUserId()); pStmt.setString(2, mutter.getText()); // INSERT文を実行 int result = pStmt.executeUpdate(); if (result != 1) { return false; } } } catch (Exception e) { throw new RuntimeException(e); } return true; } }

CreateTableDAO.java

java

package dao; import java.sql.Connection; import java.sql.Statement; import util.JDBCUtils; public class CreateTableDAO { public void createTable(){ try(Connection conn = JDBCUtils.getConnection()){ //データベースに接続、自動的にクローズ //Userテーブル作成 try (Statement stmt = conn.createStatement()){ String tableUser = "CREATE TABLE USER(USER_ID int NOT NULL AUTO_INCREMENT," + "NICK_NAME varchar(100) NOT NULL," + "E_MAIL varchar(100) NOT NULL UNIQUE," + "PASS varchar(100) NOT NULL," + "USER_NAME varchar(100) NOT NULL UNIQUE," + "PRIMARY KEY (USER_ID))"; stmt.executeUpdate(tableUser); } //User1作成 try (Statement stmt = conn.createStatement()){ String User = "INSERT INTO USER (NICK_NAME, E_MAIL, PASS, USER_NAME) VALUES ('竹内','take@gmail.com', '1111', 'take')"; stmt.executeUpdate(User); } //User2作成 try (Statement stmt = conn.createStatement()){ String User = "INSERT INTO USER (NICK_NAME, E_MAIL, PASS, USER_NAME) VALUES ('吉田','yyy@gmail.com', '2222', 'yoshida')"; stmt.executeUpdate(User); } //Tweetテーブル作成 try (Statement stmt = conn.createStatement()){ String tableTweet = "CREATE TABLE TWEET(TWEET_ID int NOT NULL AUTO_INCREMENT," + "USER_ID int NOT NULL AUTO_INCREMENT," + "TEXT varchar(255) NOT NULL," + "PRIMARY KEY (TWEET_ID)," + "FOREIGN KEY (USER_ID) REFERENCES USER (USER_ID))"; // 外部キー FOREIGN KEY (参照元列名) REFERENCES 参照先テーブル名 (参照先列名) stmt.executeUpdate(tableTweet); } //tweet作成 try (Statement stmt = conn.createStatement()){ String tweet = "INSERT INTO TWEET (TEXT) VALUES ('初めまして!!')"; stmt.executeUpdate(tweet); } //Followテーブル作成 try (Statement stmt = conn.createStatement()){ String tableFollow = "CREATE TABLE FOLLOW(USER_ID int NOT NULL AUTO_INCREMENT," + "FOLLOW_ID int NOT NULL," + "PRIMARY KEY (USER_ID, FOLLOW_ID)," + "FOREIGN KEY (USER_ID) REFERENCES USER (USER_ID)," + "FOREIGN KEY (FOLLOW_ID) REFERENCES USER (USER_ID))"; stmt.executeUpdate(tableFollow); } //Favoriteテーブル作成 try (Statement stmt = conn.createStatement()){ String tableFavorite = "CREATE TABLE FAVORITE(USER_ID int NOT NULL AUTO_INCREMENT, " + "TWEET_ID int NOT NULL AUTO_INCREMENT," + "PRIMARY KEY (USER_ID, TWEET_ID), " + "FOREIGN KEY (USER_ID) REFERENCES USER (USER_ID), " + "FOREIGN KEY (TWEET_ID) REFERENCES TWEET (TWEET_ID))"; stmt.executeUpdate(tableFavorite); } System.out.println("USER,TWEET, FOLLOW, FAVORITEテーブルを作成しました。"); }catch(Exception e){ throw new RuntimeException(e); } System.out.println("完了"); } }

UserDAO.java

java

package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import model.User; import util.JDBCUtils; public class UserDAO { public User getUser(String userName, String pass) { //User型 User user = null; //初期化 //データベースに接続 try (Connection conn = JDBCUtils.getConnection()) { // USERテーブルからUSER_NAME,PASSを検索 String sql = "SELECT * FROM USER WHERE USER_NAME=? AND PASS=?"; try (PreparedStatement pStmt = conn.prepareStatement(sql)) { // 文中の「?」に使用する値を設定しSQLを完成 pStmt.setString(1, userName); //postで送られたuserNameがデータベース上にあるか検索 pStmt.setString(2, pass); // SQLを実行してResultSetを受け取る try (ResultSet rs = pStmt.executeQuery()) { // ResultSetから結果を取得 if (rs.next()) { //値が一つしか存在しないのでif文 //nameにデータベース上の検索したUSER_NAMEを代入 int userId = rs.getInt("USER_ID"); String nickName = rs.getString("NICK_NAME"); String eMail = rs.getString("E_MAIL"); String pa = rs.getString("PASS"); String name = rs.getString("USER_NAME"); System.out.println("<検索結果> 該当あり ユーザー名:" + name + "パスワード:" + pa); // TODO(ユーザー情報)の生成 user = new User(userId, nickName, eMail, pa, name);// 取得した値を詰める }else{ System.out.println("<検索結果> 該当なし"); } } } } catch (Exception e) { throw new RuntimeException(e); } return user; //値を詰めたuserを返す(なかったら初期のnullが返る) } public boolean createUser(User user) { try (Connection conn = JDBCUtils.getConnection()) { // INSERT文の準備(userIdは自動連番なので指定しなくてよい) String sql = "INSERT INTO USER (NICK_NAME,E_MAIL,PASS,USER_NAME)VALUES(?, ?, ?, ?)"; try (PreparedStatement pStmt = conn.prepareStatement(sql)) { // INSERT文中の「?」に使用する値を設定しSQLを完成 pStmt.setString(1, user.getNickName()); pStmt.setString(2, user.getEMail()); pStmt.setString(3, user.getPass()); pStmt.setString(4, user.getUserName()); // INSERT文を実行 int result = pStmt.executeUpdate(); if (result != 1) { return false; } } } catch (Exception e) { throw new RuntimeException(e); } return true; } }

イメージ説明

こんな感じのエラーが出ていまいます

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。