• ベストアンサー

Excel(Excel2002を利用しています)の拡張子CSVのファイ

Excel(Excel2002を利用しています)の拡張子CSVのファイルを、 MySQLのテーブルへ JavaサーブレットやJSP、JavaScript等で、 インポートするプログラミング方法を教えてください。 (もしくは参考になる、いずれかのWebサイトをご紹介いただくだけでも助かります) お世話になります。 宜しくお願い致します。

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

  • ベストアンサー
  • crossgate
  • ベストアンサー率65% (78/119)
回答No.5

なるほど。 もしかして匿名ユーザ消してますか? その場合は、  getConnection() じゃなくて  getConnection("ユーザ名","パスワード") にしないとDBに接続できないんじゃなかったかと。 すみません、うろ覚えです。

hiroasa21
質問者

お礼

crossgate様 お世話になっております。 1週間ほど、別作業が優先で回ってきてしまい、 こちらの調査・対応作業が出来ずに、 お礼が遅れてすみませんでした。 このご回答通りに、試してみたところ、 すんなりDBに接続できました。 たびたびお手数をおかけいたしました。 本当に助かりました。 ありがとうございました。

その他の回答 (4)

  • crossgate
  • ベストアンサー率65% (78/119)
回答No.4

何かDBにつなぐときのユーザ名、パスワードがちゃんと指定できてないだけな気が。。。 こんな感じでgetConnectionしてますか? Connection con = DriverManager.getConnection("jdbc:mysql://localhost:ポート番号/xxxx", "ユーザ名", "パスワード");

hiroasa21
質問者

お礼

crossgate様 ご回答ありがとうございました。 また機会がございましたら、 宜しくお願い致します。

hiroasa21
質問者

補足

お世話になります。 現時点では、以下のように、DBに接続しております。 final Context context = new InitialContext(); final DataSource ds = (DataSource) context .lookup("java:comp/env/jdbc/ace"); conn = ds.getConnection(); stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); String strSql = ""; strSql = strSql + "LOAD DATA INFILE"; strSql = strSql + " '" + strUploadFile1 + "' "; strSql = strSql + " INTO TABLE TABLE_MOKUROKU"; strSql = strSql + " FIELDS TERMINATED BY ',' "; strSql = strSql + " IGNORE 1 LINES"; stmt.executeUpdate(strSql); 今日はそろそろ会社から自宅へ帰りますので、 明日、ご回答いただきました方法を、 実際にプログラムへ組み込んで試してみます。 たびたびお手数をおかけしておりますが、 おかげ様で、いろいろと動作確認を試すことが出来て、 本当に助かっております。 ありがとうございます。

  • crossgate
  • ベストアンサー率65% (78/119)
回答No.3

システム例外が具体的にどんな例外なのか良く分からないですが。。。 (MySQLのバージョンとかスタックトレースとか貼り付けてくれると分かる「かも」しれないですが) 気になるのはこんなところです。 確認してみてください。 #2の参考URL(MySQL4.1)より抜粋 ---------------------------- セキュリティ上の理由から、サーバに存在するテキストファイルを読み取るときには、そのファイルがデータベースディレクトリに存在するか、または全ユーザがそのファイルを読み取り可能でなければなりません。また、サーバのファイルに対して LOAD DATA INFILE を使用するには、サーバホストでの FILE 権限が必要になります。 See 項4.3.7. 「MySQL が提供する権限」。 ---------------------------- ---------------------------- LINES 節を指定しない場合、デフォルトは次のように記述した場合と同じです。 LINES TERMINATED BY '\n' 注意: Winodows では行終端記号として 2 文字を使用しているため、テキストファイルを Windows システムで生成した場合は、通常、上の記述を LINES TERMINATED BY '\r\n' に変更する必要があります。wordpad などの一部のプログラムでは、行終端記号として \r を使用できます。 ---------------------------- ※ MySQL5.1も似たようなものです。 http://mysql.biz.net.id/doc/refman/5.1/ja/load-data.html

hiroasa21
質問者

お礼

crossgate様 ご回答ありがとうございました。 また機会がございましたら、 宜しくお願い致します。

hiroasa21
質問者

補足

たびたび、ご回答をいただき、 ありがとうございます。 File_privは”Y”で、 LINES節は、指定済でした。 (1)【MySQLのバージョン】      5.1.48 (2)【エラー時のスタックトレース】(あと1854文字しか入力出来ない為、at以下が同じ箇所は削除して省略) java.sql.SQLException: Access denied for user 'SYSMAI'@'localhost' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) SQLError.createSQLException(SQLError.java:956) MysqlIO.checkErrorPacket(MysqlIO.java:3558) MysqlIO.checkErrorPacket(MysqlIO.java:3490) MysqlIO.sendCommand(MysqlIO.java:1959) MysqlIO.sqlQueryDirect(MysqlIO.java:2109) ConnectionImpl.execSQL(ConnectionImpl.java:2642) StatementImpl.executeUpdate(StatementImpl.java:1647) StatementImpl.executeUpdate(StatementImpl.java:1566) at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) at jp.co.sysmai.ace.UploadCSVFile.doPost(UploadCSVFile.java:347) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) (HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) StandardWrapperValve.invoke(StandardWrapperValve.java:233) StandardContextValve.invoke(StandardContextValve.java:191) StandardHostValve.invoke(StandardHostValve.java:128) .valves.ErrorReportValve.invoke(ErrorReportValve.java:102) StandardEngineValve.invoke(StandardEngineValve.java:109) .connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291) ChannelSocket.invoke(ChannelSocket.java:769) ChannelSocket.processConnection(ChannelSocket.java:698) ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) at java.lang.Thread.run(Thread.java:619) 以上になります。 宜しくお願い致します。

  • crossgate
  • ベストアンサー率65% (78/119)
回答No.2

サーバに無いと駄目です。 クライアントにあるならLOCALを付ければ良いです。 http://dev.mysql.com/doc/refman/4.1/ja/load-data.html

hiroasa21
質問者

お礼

crossgate様 ご回答ありがとうございました。 また機会がございましたら、 宜しくお願い致します。

hiroasa21
質問者

補足

crossgate様 お世話になっております。 ご回答ありがとうございます。 その後、サーバ上「 /opt/proj/ace/ad/123/578/ 」に、 以下のように「 KYOUIKU.csv 」ファイルを置いて、  (/opt/proj/ace/ad/123/578/KYOUIKU.csv) 以下のように実行致しましたが、 やはり、 システムエラーが発生してしまう状態です。 (1)【Javaサーブレット内】       Statement stmt = null; stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); String strSql = ""; strSql = strSql + "LOAD DATA INFILE"; strSql = strSql + " '" + strUploadFile1 + "' "; strSql = strSql + " INTO TABLE TABLE_MOKUROKU"; strSql = strSql + " FIELDS TERMINATED BY ',' "; strSql = strSql + " IGNORE 1 LINES"; stmt.executeUpdate(strSql); (2)【上記(1)で作成したstrSql文字列の値】 LOAD DATA INFILE '/opt/proj/ace/ad/123/578/KYOUIKU.csv' INTO TABLE TABLE_MOKUROKU FIELDS TERMINATED BY ',' IGNORE 1 LINES たびたび、お手数をおかけいたしますが、 もし、よろしかったら、 上記(1)、(2)をご覧頂きまして、 お気づきの点など、アドバイスいただけましたら幸いです。 以上、宜しくお願い致します。

  • crossgate
  • ベストアンサー率65% (78/119)
回答No.1

基本的にはタブ区切りのファイルをインポートするプログラムで、 CSVならこうしてね、っていうのは下の方に書いてます。

参考URL:
http://www.java-tips.org/other-api-tips/jdbc/import-data-from-txt-or-csv-files-into-mysql-database-t-3.html
hiroasa21
質問者

お礼

crossgate様 ご回答ありがとうございました。 また機会がございましたら、 宜しくお願い致します。

hiroasa21
質問者

補足

crossgate様 ご回答ありがとうございます。 もしよろしかったら、更に教えてください。 今回ご回答いただきました内容を、Javaサーブレットプログラム内に 組み込んでいるのですが、なぜかシステムエラーが解消されない状況です。 おそらく、 LOAD DATA INFILE の後の、 「filename」の指定の仕方が、私の方で間違っているように思うのですが、 ここには、ローカルPC内のフォルダ(WindowsXP)内においてある CSVファイルを指定するのは、間違いなのでしょうか? (サーバー内にCSVファイルを置いてから、指定する必要があるのでしょうか?) 以上、宜しくお願い致します。

関連するQ&A