• ベストアンサー
  • すぐに回答を!

MySQLとJavaでのコードについて。

JavaBeanを使って、MySQLにデータを追加したいのですが、それがなかなかうまくいかず質問してます。 Statement statement = connection.createStatement(); String sql_str ="INSERT INTO customer VALUES(\"" +name+"','"+email+"','"+password+"\")"; int r=statement.executeUpdate(sql_str); このコードはjavaBeanのなかに入っており、name,email,passwordはjspからjavabeanに送られてきます。多分、VALUESの後のname,emai,passwordを入れるのに”’などの使い方が間違ってると思います。本には載ってなかったので、ウェッブ検索してみよう見真似でやったので、”’の使い方を把握してません。誰か分かる方回答お願いします。 あとこれとは違うmethodにSELECT文を使った時、 String sql_str = "SELECT email, password FROM customer where email='"+email+"'AND password='"+password+"'"; ResultSet rs = stmt.executeQuery(sql_str);とやったときは動きました。最初はこれと同じようにINSERT 文も書いたのですが、動かなかったんですよね。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数135
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2
  • isi0611
  • ベストアンサー率34% (46/134)

こんばんは~(^^♪ String sql_str ="INSERT INTO customer VALUES(\"" +name+"','"+email+"','"+password+"\")"; はちょっと違ってますね。 String sql_str ="INSERT INTO customer VALUES('"+name+"','"+email+"','"+password+"')"; となります。\"してしまうと\"~\"が文字列となってしまうのでおかしくなってしまいます。 また、name,email,passwordがString型なら''で囲みますが→'name' int型など数値の場合は''はいらなくなります。→name わからないことがありましたらまたどうぞ(^o^)丿

参考URL:
http://www.h5.dion.ne.jp/~p-s-s/vb/sql/insert.html

共感・感謝の気持ちを伝えよう!

質問者からのお礼

その通りにやったら動きました。なかなかこういうような解説がのってなくて困ってました。有難うございます。

関連するQ&A

  • JDBCを使ってdate型へのINSERTはできますか?

    JDBCを使ってOracleへ接続し、DBへデータを挿入したいのですが、 日付型のデータがどうしてもうまく挿入できません。 jsp + Servlet + Bean で開発しています。 使っているテーブルは CREATE TABLE USERS (     USERID     VARCHAR2(10) NOT NULL,     PASSWORD  VARCHAR2(10) NOT NULL,     NAME      VARCHAR2(50) NULL,     SEX       VARCHAR2(5)  NULL,     BIRTHDAY   DATE       NULL,     PRIMARY KEY (USERID, PASSWORD) ) という風な型で、定義しています。 DBへのINSERT処理は、Beanで行っています。 以下のINSERT文を実行したのですが、うまくINSERTできませんでした。 String sqlQuery = "INSERT INTO USERS (USERID, PASSWORD, NAME, SEX, BIRTHDAY)" + "VALUES ('use', 'pass', 'ナマエ', '女性', '1980/06/05')" int numOfUpdate = statement.executeUpdate(sqlQuery); ちなみに、この中のdate型で定義している「BIRTHDAY」を除いたINSERT文 String sqlQuery = "INSERT INTO USERS (USERID, PASSWORD, NAME, SEX)" + "VALUES ('use', 'pass', 'ナマエ', '女性')" int numOfUpdate = statement.executeUpdate(sqlQuery); だとうまくINSERTできます。 sql*plusを使って直に書くと、両方うまくINSERTできました。 ●その後に、「BIRTHDAY」をdate型からVARCHAR2(10)へ定義し直し、  DBを作り直して実行した所、うまくINSERTできるようになりました。 なぜ「date型」だとINSERTできず、「VARCHAR2型」だとINSERTできるのか、 知っている方がおられましたら、ぜひ教えて頂きたいです。

    • ベストアンサー
    • Java
  • ハッシュ値のパスワードMYSQL検索で一致しない

    PHPでMYSQLにハッシュ値にしたパスワードを登録して、同じハッシュ値で検索を行いましたが、どうしても検索結果で一致しません。 パスワードの文字列をMD5を使ってハッシュ値に変換して次のようにMYSQLに登録しました。 $email = htmlspecialchars($_POST["email"]); $user_name = htmlspecialchars($_POST["user_name"]); $password = md5(htmlspecialchars($_POST["password"])); $sql = 'INSERT INTO user_tbl (email,user_name,password) VALUES ( "' . $email . '","' . $user_name . '","' . $password . '" )'; $sth = $dd->prepare($sql); $sth->execute( array() ); $qid = $dd->lastInsertId(); ※user_tblの定義のこんな感じにしてあります。 CREATE TABLE user_tbl ( email varchar(50) NOT NULL, user_name varchar(20) NOT NULL, password VARCHAR(50) NOT NULL ); 検索する処理でSQL等は次のように処理しましたが、検索結果がゼロ件でした。 $email = htmlspecialchars($_POST["email"]); $beforepass = md5(htmlspecialchars($_POST["beforepass"])); $afterpass = md5(htmlspecialchars($_POST["afterpass"])); $sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and password = "' . $beforepass . '"'; $q = $dd->prepare( $sql ); $q->execute(); if($q->fetchColumn() == 1){ //ここでパスワードが一致した場合の処理を書く } そこで次の2パターンのようにSQL文を少し変えてみたらそれぞれの検索結果が1件でした。 $sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and password = "' . $beforepass . '"';                     ↓ $sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '"'; $sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and password = "' . $beforepass . '"';                     ↓ $sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and user_name = "tanaka"'; (MYSQLのuser_tblのuser_nameには'tanaka'と入っている状態で実行したものです) SQLに渡される各変数には文字列が代入済みであることが確認できています。 MD5でハッシュ化した文字列同士を比較してどうして検索結果が一致しないのでしょうか? ちなみに検索したいパスワードのハッシュ値とDBに格納されているパスワードのハッシュ値を目で比較したら一致していました。 以上です。 ハッシュ値を検索条件に入れる場合に特殊な事をするのでしょうか? ヒントだけでもよいので教えて下さい。 宜しくお願いします。 os: windows 7 eclipse: Version: 4.2.0 Build SDK: Android 4.1(API 16) PHP 5

    • ベストアンサー
    • PHP
  • MySQLのUPDATE文について

    以下のようなスクリプトを書いた時に、phpMyAdminで、テーブルの中身をみると、 photo カラムには、添付画像ファイルのファイル名の値が入っているのに、 bbs.php側からアップデートしようとすると、ip_add以下passwordまでのカラムの 中身が空なのです。SQLの文法的に何かまちがってるでしょうか? 一応、ラストレコードのカラムを更新することを念頭に置いておりますが。 <file_upload.php> $sql = "INSERT INTO bbstbl_test (photo) VALUES('$upfilename');"; -------------------------------------------------------------------------------- <bbs.php> $sql = "UPDATE bbstbl_test SET ip_add = $ip_add, date = $date, name = $name, email = $email, title = $title, message = $message, password = $password;";

    • ベストアンサー
    • PHP

その他の回答 (1)

  • 回答No.1

javaで¥はエスケープ文字として認識され、\"はダブルクォーテーションを表現します。 ですので、SQLは "INSERT INTO customer VALUES('"+name+"','"+email+"','"+password+"')"; とすれば良いと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

早速のお答えありがとうございます。おかげで動きました。どうもどうも。

関連するQ&A

  • サーブレットとMysqlについて

    画面のtextboxからDB(Mysql)にinsertするときの質問です。 皆さんのおかげでinsertすることができました。 しかし、textboxが一個で値も一つなのに、 insertするとDBには2行同じ値がinsertされます。 下記のソースのどこがいけないのでしょうか? ご教示をお願いします。 「ソース」 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name10 = request.getParameterValues("sonota"); for (int i = 0; i < name10.length; i++) { System.out.println(i + " " + name10[i]); name10[i] = new String(name10[i].getBytes("8859_1"), "UTF-8"); } Connection conn = null; CallableStatement cs = null; PreparedStatement stmt = null; ResultSet rs = null; String url = "jdbc:mysql://localhost/Sample_db"; String dbUser = "root"; String dbPass = "taratara"; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, dbUser, dbPass); String sql= "insert into Sample_table (name) values (?)"; stmt = conn.prepareStatement(sql); for (String n : name10) { stmt.setString(1, n); stmt.executeUpdate(); } int cnt = stmt.executeUpdate(); stmt.close(); RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, response); }catch(Exception e){ } } }

  • PHPとMySQLについて

    データベースにデータを挿入する方法を教えてください。 記入するSQL文以下のとおりです。 $sql =<<<EOS INSERT INTO registration ( MAIL, KEY ) VALUES ( '$email', $dbkey ) EOS; です。 データ挿入の仕方を教えてくれないでしょうか?

    • ベストアンサー
    • PHP
  • Javaソース上でのきれいなSQLの書き方

    Javaのソース上でSQL文を書くと 読みにくく、書きにくくなってします。 特に表名や、列名などを変数で指定する場合は見苦しくてたまりません。 これぞという綺麗な書き方をご存知ないですか? 以下は自分で試してみた例です。 ex. 一般的? String tbName = "TestTable" + 1; String exName = "Who"; String sql = "INSERT INTO " + tbName + "(" + " Timestamp," + " Name) " + "VALUES(" + " CURRENT_TIMESTAMP," + " '" + exName + "');" ex. 変数置換 無駄な処理はありますが。 String tbName = "TestTable" + 1; String exName = "Who"; String sql = "INSERT INTO tbName(" + " Timestamp," + " Name) " + "VALUES(" + " CURRENT_TIMESTAMP," + " 'exName');" sql.replaceAll("tbName", tbName); sql.replaceAll("exName", exName); ex.別ファイルファイル読み込み + 変数置換

    • ベストアンサー
    • Java
  • JAVA+MySQLのテーブルロックについて

    Java + MySQL5(MyISAM)でテーブルをロックする処理をかけようと 試みているのですが、上手くロックが掛からずにエラーになります。 テーブル「AAA」と「BBB」にロック処理を行おうと思います。 Connection con = null; Statement ps = null; String sql = null; Class.forName("com.mysql.jdbc.Driver"); con = (Connection) DriverManager.getConnection(url, user, pass); ps = con.createStatement(); sql = "LOCK TABLES AAA WRITE,BBB WRITE"; int a = ps.executeUpdate(sql); sql = "UPDATE AAA SET ~省略~"; a = ps.executeUpdate(sql); sql = "INSERT INTO BBB SET ~省略~"; a = ps.executeUpdate(sql); sql = "UNLOCKS TABLES"; a = ps.executeUpdate(sql); 上記の記述でどこに誤りがあるのでしょうか? お知恵を拝借できないでしょうか。 宜しくお願い致します。

  • mysqlのinsert文について、ご指導をお願いいたします。

    はじめまして。 プログラミング初心者です。 現在、PHP&MySQLで会員制掲示板を制作しようと奮闘しております。 会員登録フォームを作成し、下記SQL文にて会員登録を行おうとしているのですが、「エラーは出ていないのに、DBにデータが登録されない。」状況で、なにがおかしいのかわからず非常に困っております。尚、DBには正常に接続されています。 環境はVISTAにXAMPPを入れております。 私、PHP初心者のため、本のサンプルソースを加工して使用しようとしています。 下記にソースを記載いたしますので、 どうかご指導のほどお願いいたします。 (※情報が不足しておりましたら申し訳ありません。必要な情報をお教えいただけましたら幸いです。) // 接続 $link = mysql_connect( $db_host, $db_user, $db_password ); mysql_select_db( $db_name ); $result = mysql_query( 'set character set utf8' ); $sql = "select email1 from users where email = '" . mysql_real_escape_string( $_POST['email'] ) . "'"; $result = mysql_query( $sql ); // if ( $error != '' ) exit; // 会員データの挿入 $sql = "insert into member ( login_id, passwd, register_date, nickname, sex, birthday, email, pref, division, state ) values ( '" . mysql_real_escape_string( $_POST['email'] ) . "', '" . md5( $_POST['passwd'] ) . "', '" . date( 'Y-m-d H:i:s' ) . "', '" . mysql_real_escape_string( $_POST['nickname'] ) . "', '" . mysql_real_escape_string( $_POST['sex'] ) . "', '" . mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] . ' 00:00:00' ) . "', '" . mysql_real_escape_string( $_POST['email'] ) . "', '" . mysql_real_escape_string( $_POST['pref'] ) . "', '" . mysql_real_escape_string( $_POST['division'] ) . "', '1' )"; $result = mysql_query( $sql ); //echo $sql; // $title = '会員登録[3/4]'; ?>

    • ベストアンサー
    • PHP
  • PHPからMySQLのデータが表示できない

    〇質問の主旨 PHPでMySQLのデータベース(テーブル)から データを表示させようと考えていて、 一度目は表示させることはできました。 しかし同じURLでブラウザをリロードしたところ、 二度目は表示されません。 もう一度データを表示させるためには、 どのあたりをチェックすればよいでしょうか? ご存知の方がいらっしゃいましたら、 ご教示願います。 〇質問の補足 PHPによるコードとMySQLによるクエリ文は次のとおりです。 現在、PHPの「処理1」にある"Success!"は表示させることができますが、 「処理2」は表示させることはできません。 ・コード <?php // データベースの接続 try { $dbh = new PDO('mysql:host=localhost;dbname=mydatabase', 'myname','mypassword'); } catch(PDOException $e) { var_dump($e->getMessage()); exit; } // 処理 1 echo "Success!"; // 処理 2 $sql = "select * from users"; $stmt = $dbh->query($sql); foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $user) { var_dump($user['name']); } echo $dbh->query("select count(*) from users")->fetchColumn() . "records found"; // 切断 $dbh = null; ・クエリ文 create table users ( id int(11) not null auto_increment primary key, name varchar(50), email varchar(255) unique, password char(16) ); insert into users (name,email,password) values ('hoge','hoge@dummy.com','abc'); insert into users (name,email,password) values ('foo','foo@dummy.com','def'); 以上、よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • CakePHPとMySqlを使用しています。INSERTしたあと、id

    CakePHPとMySqlを使用しています。INSERTしたあと、idを取得する方法について教えて頂きたいです。 データをINSERTとSELECTをする関数を作成し、 メインの関数でINSERTとSELECTをする関数を呼び出すと、idがNULLとなってしまいます。 しかし、1つの関数でINSERTとSELECTを行うとidを取得する事ができました。 この方法は問題ないのでしょうか? この方法だとなぜidが取得できるんでしょうか? また、これ以外の方法でidを取得できる方法があればお教え頂きたいです。 宜しくお願いします。 【hogeテーブル】 id(PRIMARY。オートインクリメントさせています) name ●idがNULLになる方法 function main() { $this->insertHoge(); $id = $this->getHoge(); ←結果がNULLになる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($sql); return $result; } function getHoge() { $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($sql); return $result; } ●idが取得できる方法 function main() { $id = $this->insertHoge(); ←idがかえってくる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($_sql); $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($_sql); return $result; }

    • 締切済み
    • PHP
  • INSERT INTOに関しまして。

    $sql = "INSERT INTO テーブル名(name,day,kg)VALUES('','$day','-1')"; 現在このようなSQL文でINSERTしていますが、データベース内にあるカラムname全てに対してINSERTするにはどうすれば良いでしょうか??現在のSQL文ではそれができず、nameが空欄の状態で更新されてしまいます。

    • ベストアンサー
    • PHP
  • エラーの原因がわかりません。

    調べたのですが原因がいまいちわからないので 質問させていただきます。 sqlName = new String(name.getByte("Shift_JIS"),"JISAutoDetect"); sqlYear = new String(year.getByte("Shift_JIS"),"JISAutoDetect"); sqllanguage = new String(language.getByte("Shift_JIS"),"JISAutoDetect"); sqlsonota = new String(sonota.getByte("Shift_JIS"),"JISAutoDetect"); String sql = ""; sql += " insert into user "; sql += " (name, year, language, sonota)"; sql += " values ( "; sql += "'" + sqlName + "'"; sql += ",'" + sqlYear + "'"; sql += ",'" + sqllanguage + "'"; sql += ",'" + sqlsonota + "'"; sql += " ) "; System.out.println("SQL文"); stmt.executeUpdate(sql); System.out.println("SQL文を発行"); }catch(Exception e){ System.out.println("SQLエラーが発生しました : " + e.toStrin()); } stmt.executeUpdate(sql)で例外が発生します。 SQLエラーが発生しました : java.sql.SQLException: Duplicate entry '' for key 1 stmt.executeUpdate(sql)には問題がないと思うので sql文でのエラーじゃないかと思っているのですが 原因がわかりません。 もしお分かりになる方がいればよろしくお願いします

  • binaryへのbyte配列の入れ方

    私は現在データベースの勉強をしている学生です。 開発環境はJDBCを使い、SQLiteにデータを入れています。 最終的には画像データ(byte)をデータベースに中に入れようと思っているのですが、まずは手始めに数字を、binaryで宣言したデータベースの中に入れたのですが、おもうような結果が得られず困っています。 具体的にソースで説明させていただくと、 String sql1 = "create table Pointing (B binary)"; statement.executeUpdate(sql1); byte[] b = new byte[2]; b[0] = 3; b[1] = 2; String sql2 = "insert into Pointing values(" + b[0] + b[1] + )"; statement.executeUpdate(sql2); ResultSet rs2 = statement.executeQuery("select * from Pointing"); while(rs2.next()) { byte[] b2 = rs2.getBytes("B"); System.out.println("B = " + b2[0]); } この結果が51となってしまいます。 正直、入れ方や取り出し方も全部いろんなサイトから引っ張ってきたり、憶測等で書いたものなので、やり方があっているとはおもっていません。なので正しい方法を知りたく書かせていただきました。 ご回答お待ちしております。

    • ベストアンサー
    • MySQL