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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

0回答

850閲覧

Excelcsvファイルからpsqlにインポートする際の改行データについて

kitten

総合スコア25

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

1クリップ

投稿2019/04/14 23:46

前提・実現したいこと

現在、エクセル内のデータ(セル内改行データを含む)をPostgreSQLの
COPYコマンドを使用してインポート作業を終え
HTMLフォームからgetで部品番号などのデータを渡しそれを
受け取ったJSPがSQLを実行表示させるというプログラムなのですが
そこで、今回解決したいことはセル内改行データを含むものが上手く
検索結果画面(JSP)で表示されないという点です。

発生している問題・エラーメッセージ

以下、問題のJSPページのSSを載せておきます。
JSPページ

データベース内の状態

PostgreSQL

1 2---------------+-------+---------------------+----------+----------------------------+------------------------+------ 3秋庭プレス | NULL | 3401 071 0000 | NULL | ホルダー | 抜統 | 3 4 秋庭プレス | NULL | 3401 071 0000 | NULL | ホルダー | 整形統 | 3 5 秋庭プレス | NULL | 3401 071 0000 | NULL | ホルダー | トリムピアス | 3 6 秋庭プレス | NULL | 3401 071 1000 +| NULL | ホルダー | NS | 3 7 | | 3401 071 2000 | | | | 8 秋庭プレス | NULL | 3401 071 1000 +| NULL | ホルダー | SK | 3 9 | | 3401 071 2000 | | | | 10 秋庭プレス | NULL | 3401 071 1000 +| NULL | ホルダー | TP | 3 11 | | 3401 071 2000 | | | | 12 秋庭プレス | NULL | 3401 071 2000 | NULL | ホルダー | Pi1 | 2 13 秋庭プレス | NULL | 3401 071 2000 | NULL | ホルダー | Pi2 | 2 14 秋庭プレス | NULL | 3401 072 2010 | NULL | タンクキャップ | NS | 5 15 秋庭プレス | NULL | 3401 072 2010 | NULL | タンクキャップ | トリム | 5 16 秋庭プレス | NULL | 3401 072 2010 | NULL | タンクキャップ | 統 | 5 17 秋庭プレス | NULL | 3401 072 2010 | NULL | タンクキャップ | Pi | 5 18 秋庭プレス | NULL | 3401 072 2010 | NULL | タンクキャップ | SK | 5 19 秋庭プレス | NULL | 3210 000 0000 | NULL | ベース | BL | 2 20 秋庭プレス | NULL | 3210 000 0000 | NULL | ベース | 曲げ | 2 21 秋庭プレス | NULL | 3400 051 1010 | NULL | カバー | BL | 6 22 秋庭プレス | NULL | 3400 051 1010 | NULL | カバー | NS | 6 23

###元となるJSPソース

JSP

1<%@page import="java.util.*"%> 2<%@page import="java.sql.*"%> 3<%@page import="java.io.*"%> 4<%@page import="java.text.*"%> 5 6<%@ page language="java" contentType="text/html; charset=UTF-8" 7 pageEncoding="UTF-8"%> 8<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 9<html> 10<head> 11<meta http-equiv="Content-Type" content="text/html; charset="UTF-8"> 12<link rel="stylesheet" type="text/css" href="/Taiyo/css/Taiyo-jsp.css"> 13<title>検索結果画面</title> 14</head> 15<body> 16 17 18<% 19 //変数定義 20 Connection conn = null; 21 PreparedStatement ps = null; 22 ResultSet rs = null; 23 String HOME = (System.getenv("CATALINA_HOME")); 24 25 try { 26 27 Properties properties = new Properties(); 28 InputStream istream = new FileInputStream(HOME + "/webapps/Taiyo/jsp/dbinfo.properties"); 29 properties.load(istream); 30 31 String dbURL = properties.getProperty("dbURL"); 32 String user = properties.getProperty("user"); 33 String pass = properties.getProperty("pass"); 34 String key = "%"; 35 36 if(request.getParameter("key") != null) { 37 if(request.getParameter("key") != "") { 38 key = "%" + request.getParameter("key") + "%"; 39 } 40 } 41 42 conn = DriverManager.getConnection(dbURL, user, pass); 43 44 45 String sql = "SELECT * from kanagata_taiyo WHERE lname ILIKE ? or cname ILIKE ? or partcode ILIKE ? or prodname ILIKE ? or partname ILIKE ? or pr1 ILIKE ? or amt ILIKE ? "; 46 47 ps = conn.prepareStatement(sql); 48 key = key.replace("*", "%"); 49 ps.setString(1, key); 50 ps.setString(2, key); 51 ps.setString(3, key); 52 ps.setString(4, key); 53 ps.setString(5, key); 54 ps.setString(6, key); 55 ps.setString(7, key); 56 57 //SELECTを実行する 58 rs = ps.executeQuery(); 59 60 //取得した結果を全件出力する 61 //out.println("<div class="table-scroll">"); 62 out.println("<table>"); 63 out.println("<tr><th>貸与先名</th><th>御得意先名</th><th>製品番号</th><th>製品名</th><th>部品名</th><th>工程</th><th>金型数</th</tr>"); 64 while(rs.next()){ 65 out.println("<tr>"); 66 out.print("<td>" + rs.getString("lname") + "</td>"); 67 out.print("<td>" + rs.getString("cname") + "</td>"); 68 out.print("<td>" + rs.getString("partcode") + "</td>"); 69 out.print("<td>" + rs.getString("prodname") + "</td>"); 70 out.print("<td>" + rs.getString("partname") + "</td>"); 71 out.print("<td>" + rs.getString("pr1") + "</td>"); 72 out.print("<td>" + rs.getString("amt") + "</td>"); 73 out.println("</tr>"); 74 } 75 out.println("</table>"); 76 //out.println("</div>"); 77 78 } catch (SQLException ex) { 79 ex.printStackTrace(); 80 } finally { 81 try { 82 if (conn != null && !conn.isClosed()) { 83 conn.close(); 84 } 85 } catch (SQLException ex) { 86 ex.printStackTrace(); 87 } 88 } 89%> 90</body> 91</html>

試したこと、推測

恐らくですが、上記PostgreSQL内のプラス(+)記号を
JSPのどこかで変換してやれば良いのでしょうがそのソースの書き方が分かりません。
自分なりに調べたのですが行き詰ってしまったのでご教示頂けると幸いです。

補足情報(FW/ツールのバージョンなど)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/04/15 01:02

それ、本来は連結したままDBに納めていたら使いづらいだけなので、COPY文ではない別の方法でデータの取り込みをしないといけないんじゃないかと察するのですが。
kitten

2019/04/15 01:17

コメントありがとうございます。 psqlへcsvをインポートする方法が 私の方で調べたところ見つからなかったのですが 具体的にどのようなものがあるのかもしご存知でしたら 教えていただけないでしょうか。
退会済みユーザー

退会済みユーザー

2019/04/15 02:11

Excel由来の、セル内改行を伴うデータをそのままデータベース上のテーブルにして、 他のテーブルとの結合などを考慮しないカラムであれば別にいいんですが、 結合に使う可能性があるなら適切に構造を最適化する(1対多構造テーブルに分割するなど)必要もありそうだなと。 正規化してCSVファイルと異なるテーブルにデータを読み込むために、 一本プログラムを起こすことになるでしょうけども。
coco_bauer

2019/04/15 03:02

Excelのセル内改行は、LF(文字コード 0x0A)なので、LFをいったん別の文字列に置き換える(データ中に現れることがない文字列、例えば "~~~~~"に置換する)ことで問題を回避できませんか?
kitten

2019/04/15 04:08

>>m6uさん コメントありがとうございます。 1対多構造テーブルについて私がまだ勉強不足ということと いろいろ考えた結果申し訳ないですが、coco_bauerさんのやり方を考えており そちらの方で今回は解決してみようかと思います。 ありがとうございました。
kitten

2019/04/15 04:32

>>coco_bauerさん コメントありがとうございます。 仰る通りちょうど私もそのような方法を考え試行中でした。 うまくExcel内で置換した文字(今回は|に変換しました)を JSPの方でout.print("<td>" + rs.getString("cname").replace("|","<br>") + "</td>"); としてみたのですが何故か何も変化が起きない状況です。 私の書き方が間違っているのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問