JSP/サーブレットでデータをテーブルに格納する方法

このQ&Aのポイント
  • Java初心者の方が、JSP/サーブレットを使ってデータをテーブルに格納する方法について教えてください。
  • read.jsp内のテキストエリアにリーダーで取り込んだデータを、read.javaを通じてテーブルに格納したいです。
  • 質問者はデータが文字列として取り込まれるため、取り込んだデータを分解してからテーブルに格納したいと考えています。具体的なソースコードなどを教えていただけますか?
回答を見る
  • ベストアンサー

JSP/サーブレットです

Java初心者です・・・ read.jsp内のテキストエリアに下記のデータをリーダー(読み取り機)で取り込みました。 <Memory> 2010/11/28 21:44:17.000 FM36J07,009059,0 2010/11/28 21:42:09.000 11113331 2010/11/28 21:42:09.000 22222220 2010/11/28 21:42:10.000 33331119 2010/11/28 21:42:10.000 22223333 <End> <Memory>から<End>までです。 このデータをkeywordとしてread.javaへ送り、そのデータをテーブルに格納したいのですが、この文字列としてのデータを分解してそれぞれのテーブルに格納するとこは可能ですか? 以下、格納テーブルです。 Flow(テーブル) id int barcode int date varchar このテーブルに上記のデータを取り込みたいのですが、どうソースを書けばいいか分からず、困っております。 ちなみにフィールドに対応するデータは barcodeが 11113331、22222220、33331119、 22223333の部分で date が 2010/11/28 21:42:09.000 2010/11/28 21:42:09.000 2010/11/28 21:42:10.000 2010/11/28 21:42:10.000 です。 IDは別途指定します。 また、 <Memory> 2010/11/28 21:44:17.000 FM36J07,009059,0 と <End> は使いません。データの読み取りの際、なぜか必ず取り込んでしまうようです。 イメージは、 barcodeをリーダーで読み取ると、その読み取った日時が一緒にデータとして取り込まれている。ということで、私はこのデータをテーブルに格納したいと思っています。 読み取ったデータはただの文字列なので、一度分解してからテーブルに格納する必要があると思うのですが、その具体的なソース等を詳しく教えていただけると幸いです。 説明不足で補足事項等ございましたらご指摘下さい。補足致します。 初心者でも分かりやすいご回答お願いします。 開発環境 Ecripse tomcat hsqlMysqlのようなものです。)

  • Java
  • 回答数4
  • ありがとう数0

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

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.4

> 自作のデータベース MySQLかなにか? データベースの仕組み自体を作ったわけじゃないわよね。 MySQLと仮定して つまり、あなたが今困っているのは Javaの変数に格納されているデータを データベースのテーブルに格納する方法 ってことかしらね。 だとすると ググレ て言うわ。 確かに初心者には敷居高いところだけど そのくらいはまずぐぐりなさいって話になっちゃうわ。 「hsql」と「Java」という単語でぐぐるの。 サンプルがいくらでも手に入るわよ。 もうちょっと検索結果を絞り込みたい場合は 「hsql」と「JDBC」でぐぐるといいわ。 「JDBC」って言うのはJavaが提供する データベースとのやり取りをする仕組みなの。 ちなみに hsqlは正式名称HypersonicSQLというので hsqlだけじゃなく 「HypersonicSQL」とか「HSQLDB」とかでも検索すると良いわね。 書いてあることは結構難しいかもしれないから そのときはまた質問してちょうだいな。

その他の回答 (3)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

・・・んー ひとつ確認。 「テーブル」 これが指すものは何かしら?

tsa63688
質問者

補足

ご回答ありがとうございます。 質問内の ///////////// Flow(テーブル) id int barcode int date varchar //////////// の部分ですが、自分で作成したデータベースのことです。 create tableで作りました。 このテーブルに読み取りデータを格納したいと思っています。 (ご質問の意図に合っていなかったらすいません・・・)

  • mintia007
  • ベストアンサー率59% (16/27)
回答No.2

ん? どっかで同じような質問がありましたね。 ↓ここだ http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1050625230 上記では上手くいかなかったのでしょうか? (BA時には上手く行ったと書いてありますが)

参考URL:
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1050625230
tsa63688
質問者

補足

ご回答ありがとうございます。 仰るとおり、送ったデータ(keyword)をtimeとbarcodeに分け、Javaで表示。まではできました。 しかし、その後、バラバラにしたデータ(つまり、timeとbarcode)をテーブルに格納することが出来ませんでした。 そのため今回の質問ではバラバラにしたデータをテーブルに格納する方法を求めています。 同じような質問だと思われますが、ご理解いただけたらと思います。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

入力されるデータに一定の規則がないとダメよ。 一定の規則があるのなら Stringのsplitで分割するなり MessageFormatでparseするなり Stringのsubstringで切断するなり すればいいの。 今回のデータなら 1行ごと処理するようにして 半角スペースでsplitして 最初の2つをSimpleDateFormatでparseして日時に変換。 3つ目がbarcodeかしら。 <Memory> 2010/11/28 21:44:17.000 FM36J07,009059,0 <End> が必ず読み取っちゃうというけど この読み取っちゃうものにはどんな規則性があるのかしら。 常に1行目2行目最終行ならそれをスキップするようにするとか <で開始する行はスキップするとか splitで取得した3つ目のデータにカンマが入っていたらスキップするとか 考え方はいろいろあると思うわ。

tsa63688
質問者

補足

ご回答ありがとうございます。 Scannerを使い、バラバラにすることまではできました。 しかし、このままではFlowテーブルに格納できなくて困っているという状況です・・・ 以下、そのソースコードです。 (Read.java) ・・・・・・・・・・ public class Read extends HttpServlet { private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("Shift_JIS"); String keyword = request.getParameter("keyword"); Scanner sc = new Scanner( keyword ).useDelimiter("[\\s]+"); List<String> date = new ArrayList<String>(); List<String> code = new ArrayList<String>(); sc.next(); sc.next(); sc.next(); sc.next(); while( sc.hasNext() ){ String s = sc.next(); if( s.toUpperCase().equals("<END>") ){ break; } s += " " + sc.next(); date.add( s ); code.add( sc.next() ); } response.setContentType("text/html; charset=Shift_JIS"); PrintWriter pw = response.getWriter(); pw.print("<HTML>"); pw.print("<BODY>"); pw.print("日時<BR>"); for( String s: date ){ pw.print( s + "<BR>" ); } pw.print("<BR>コード<BR>"); for( String s: code ){ pw.print( s + "<BR>" ); } pw.print("</BODY>"); pw.print("</HTML>"); } } このままでは、表示のためにKeywordをdateとbarcodeに分けている状況に過ぎないのかなと思います。 このdateとbarcodeをFlowテーブルに格納できれば一番です。 格納の仕方をご教授いただければと思います。

関連するQ&A

  • JSPとJAVAを使ってデータ送信をしたいです。

    JSPサーブレットを勉強中です。Javaにデータを送信したいのですが、分からないことがあり、質問させていただきました。 JSPのページのテキストボックス内に以下のデータを取り込みました。(一つのテキストボックス内です。) --------------------------------------- <Memory> 2010/11/11 21:51:06.000 FM36J07,009059,0 2010/11/11 21:49:24.000 11113331 2010/11/11 21:49:27.000 11111115 2010/11/11 21:49:28.000 33333335 2010/11/11 21:49:29.000 33331119 2010/11/11 21:49:30.000 55551113 2010/11/11 21:49:31.000 22224446 2010/11/11 21:49:32.000 22225559 2010/11/11 21:49:33.000 22224446 <End> --------------------------------------- このデータはバーコードリーダーにより商品をスキャンし、テキストボックス内に取り込んだ日時と商品IDだとします。 2010/11/11 21:49:24.000などの部分は取り込んだ日時で、11113331などが商品IDです。 以下に続くデータも同じです。 このように取り込んだデータを「送信」ボタンにより次のページ(JAVA)に送信し、日付と商品IDを別に取り出し、それぞれデータベース上に格納したいです。 格納場所は Flowテーブル ID id int, 商品ID c_id int, 時間 time datetime です。 一つのIDに対し、商品IDと時間を全て取り込みたいのです。 ちなみに商品ID(11113331など)は別テーブル(Departmentテーブル)で格納済みです。 現時点では、 JSPのページで <form action="../servlet/Page.Read"> <textarea name="flow" rows="25" cols="50"></textarea> <input type="submit" value="送信"> のように書き、"flow"をRead.javaのページに送信しようとしてますが、この後、Read.javaのページでどのように受け取り、Flowテーブルに格納すればよいか分からなく、困っています。 バラバラにしてから、Read.javaに送るのか、1つで送って、Read.javaでばらばらにするのか・・ 受け取ったFlowをばらばらにして、データベースに接続して、SQLを発行して、テーブルにデータを格納・・・ どうにせよ、実力不足でバラバラにできないのでお手上げ状態です。 分かりづらい質問で申し訳ないのですが、具体的なソース等、どなたかご教授よろしくお願いします。

    • ベストアンサー
    • Java
  • JSP/サーブレットに詳しい方助言をお願いします!

    JSPからJAVAへデータを送り、そのデータをJAVAで表示させたのですが、そのJAVAのデータを再びJSPに送りたいのですが、詰まってしまいました・・・ JAVAでは表示に限界があるので、どうしてもJSPに送って表示させたいのですがどうすればいいでしょうか? ◇状況 現在は簡単に言うと、JSPからJAVAへデータ(keyword)を送り、内容をデータごと(timeとbarcode)に分けて取り出し、とりあえずJAVAで表示させています。 JAVAからJSPへデータを送る方法は分かりますが、何しろ、keywordを一度timeとbarcodeに分解したので、その分解したデータをそのままJSPに送ることが出来ません。 以下、ソースコードです。 ◇Read.jsp <textarea name="keyword" rows="25" cols="50"> //テキストエリアのデータを送ります。以下、送信データです <Memory> 2010/11/25 19:32:22.000 FM36J07,009059,0 2010/11/25 19:26:24.000 55551113 2010/11/25 19:26:25.000 22225559 <End> ◇Read.java        ・・・・・・・・ public class Read extends HttpServlet { private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("Shift_JIS"); String keyword = request.getParameter("keyword"); Scanner sc = new Scanner(keyword).useDelimiter("[\\s]+"); List<String> time = new ArrayList<String>(); List<String> barcode = new ArrayList<String>(); sc.next(); sc.next(); sc.next(); sc.next(); while(sc.hasNext()){ String s = sc.next(); if( s.toUpperCase().equals("<END>") ){ break; } s += " " + sc.next(); time.add( s ); barcode.add( sc.next() ); } request.setAttribute( "time", time ); request.setAttribute( "barcode", barcode ); response.setContentType("text/html; charset=Shift_JIS"); PrintWriter pw = response.getWriter(); pw.print("<HTML>"); pw.print("<BODY>"); pw.print("日時<BR>"); for( String s: time ){ pw.print( s + "<BR>" ); } pw.print("<BR>コード<BR>"); for( String s: barcode ){ pw.print( s + "<BR>" ); } pw.print("</BODY>"); pw.print("</HTML>"); } } ◇開発環境 Eclipse Tomcat ◇説明不足ですが、初心者にも分かりやすいご回答をお願いします。できれば具体的なソース等をお願いします。

    • ベストアンサー
    • Java
  • String配列を扱うアルゴリズムについて

    よりパフォーマンスの良いアルゴリズムが、 ございましたらご教示下さい。 数レコード分のDBテーブルデータが格納されたString[][]型が存在するとします。 配列の要素は、String[行(フィールド)][列(カラム)]です。 ここで、全レコード中の列ごとの最大文字列長を int[]型に取得したいと思います。 そうした場合、自作した下記の処理よりも、 よいパフォーマンスを得られるアルゴリズムがございましたら、 ご教示願いたいと思います。 ※処理前提条件 ●String[][]型変数に、過不足無くテーブルデータが格納済みであるとします。 ●配列の第一(行)・第二(列)要素の最大値は取得済みであるとします。 ////////////// // 変数定義 // ////////////// String[][] tableData; ← テーブルデータ格納済み(過不足はありません) int 行数 = 全行数(取得済み); int 列数 = 全列数(取得済み); //列毎の最長文字列値を格納する。 int[] maxLen = new int[列数]; ////////// // 処理 // ////////// //列の個数分、処理を繰り返す for(int i = 0; i < 列数; i++) {   //行の個数分、処理を繰り返す   for(int j = 0; j < 行数; j++) {     //NULLを回避する     if(tableData[i][j] != null) {       //int配列に格納済みの数値より大きければ、改めて格納する       if(maxLen[i] < tableData[i][j].length()) {         maxLen[i] = tableData[i][j].length();       }     }   } } 以上です、どなかお知恵をお貸し頂けませんか。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • サーブレット、JSP、Mysqlについて

    Java サーブレット JSPについて質問です。 やりたいことは画面のtextboxの値をDBに書き込みたいです。 画面側でIDとパスワードを"sonota"にセットして、 サーブレット側はString[] name = request.getParameterValues("sonota"); で画面の値を取得できると思いますが、その以外の書き方がいまいちです・・ なお、textboxには追加ボタンがあり、押すとtextboxがどんどん増えていきます。 この場合はどのようにDBに書き込めばいいのでしょうか? 理想としては、textbox一個なら、DBは列agiは1でnameにはtextboxの入力した値をセット。 textbox二個なら、DBは列agi1とagi2を作成して、textbox二つの値をそれぞれに書き込む。 ソース protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name = request.getParameterValues("sonota"); Connection conn = null; Statement state = null; int count = 0; try { //コネクション接続 Class.forName("org.git.mm.mysql.Driver"); conn = DriverManager.getConnection( "jdbc:mysql://localhost/Sampl_db", "root", "taratara"); state = conn.createStatement(); //クエリ実行 count = state.executeUpdate( "INSERT INTO Sampl_teble(agi, name) VALUES('01', sonota)"); //影響レコード数出力 System.out.println(count); } finally { //ステートメントを閉じる if(state != null) { try { state.close(); } catch (Exception e) { //このエラー処理は「state.close」でエラーが発生した場合でも //下記処理が実行される為に記述しています。 } } //コネクションを閉じる if(conn != null) { conn.close(); } } } }

    • ベストアンサー
    • Java
  • 複数テーブルからのデータ取得

    MySQLで 4つのテーブルからデータを取得する方法を教えてください。 4つのテーブルの構造は全く同じです。 構造的には id・・・int name・・・varcher(30) point・・・int start・・・datetime end・・・datetime tableA,tableB,tableC,tableDの4つのテーブルからpointのデータを昇順に取得したいです。 よろしくお願いします。

  • ASPのデータベースの設計方法

    ASP(http://www.aiship.jp/など)のデータベースは、どのように持っておくのが普通なのでしょうか。 ユーザごとにデータベースを作るのが普通なのでしょうか。 それとも、テーブルの列にユーザIDを持たせて、全ユーザのデータを一つのテーブルに格納するのが普通でしょうか。

  • フォームで入力したテキストを分解し、テーブルに格納

    ACCESS 2003を使用しています。 下記のようなものを作りたいのですが、わからないので質問させていただきます。 (1)フォーム画面の「ファイル名称」というフィールドにテキストを入力する。  ファイル名称は"YYYYMMDD_FileName_Type_ID.csv"という定義になっており  CSVの他に、SSV・TSVと複数種類がある。  この箇所は、手動で入力する。 (2)あるボタンを押すと、入力したテキストが分解され、「年月」・「ファイル名」・「タイプ」・ 「ID」・「拡張子」のフィールドに自動的に格納される。 現在、考えているやり方としまして、 (1)ボタンを押すと、文字を分解し、テーブルに格納するVBAを作る (2)格納されたデータをフォームに反映する (3)反映ができたら、分解して格納したテーブルのデータを削除する という流れでいるのですが、(1)の箇所から躓いてしまい、どうにも進まない状態です。 どうか、お助けください。 どうぞ、宜しくお願いいたします。

  • JSPのTABLE作成の際にサイズの大きさの調整について質問です。

    JSPのTABLE作成の際にサイズの大きさの調整について質問です。 table1・・・・・ヘッダー情報を格納 table2・・・・・データ情報格納(DBより値を取得) 例) ----------------- |ID|name|adress| ←tabel1 ----------------- ----------------------- |10|山本太郎|大阪府大阪| ←tabel2 ----------------------- table1,table2の全体のサイズは合わせられますのですが項目のサイズを合わせたいのです。 何かいい方法を教えて下さい。

  • Accessでテーブルの値をテキストボックスに代入するには?

    [ID][文字列]の2つのフィールドからなる単純なテーブルがあり、削除クエリを併用して常に最新のデータしか格納されていない状態に工夫できました。(データは常に1つ) そこでフォーム上にあるテキストボックスにこのテーブルの[文字列]フィールドのデータを表示させたいのですが、 どうしたらよいでしょうか? また、このテーブルの[文字列]フィールドのデータを直接変数として使いたい場合はVBAでどのように記述すればよいのでしょうか?

  • JSPの表示時エラー

    いつもお世話になっております。 ・windows2000 ・j2sdk-1_4_1_07-windows-i586 ・jakarta-tomcat-4.1.31 ・mysql-4.0.25-win32 で開発学習をしています。 頭を抱えている問題は、 サーブレットでデータの絞込み→Beanに格納→JSPでデータの表示 という部分で、実行すると org.apache.jasper.JasperException: タイプ 'hellojava.ConnectBean' のbean中の属性 'Id' の情報を発見できませんでした at org.apache.jasper.runtime.JspRuntimeLibrary.getReadMethod(JspRuntimeLibrary.java:650) at org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:652) at org.apache.jasper.compiler.Node$GetProperty.accept(Node.java:507)              ・              ・              ・ とエラーがかえってきます。 1)Tomcatに   java.sql.SQLException: After end of result set・・・   と出てきてしまう。 2)HTMLのテキストボックスに英数字のみの入力制限をしていても、データ[Id]がint型なのに対して異なった型で検索もしくは格納しようとしているためにエラー・・・? このようなことが原因かと思い調べているのですが、解決に結びつきません。 いつも申し訳ありませんが、 どなたかご教授願えませんでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Java