- ベストアンサー
Excel(Excel2002を利用しています)の拡張子CSVのファイ
Excel(Excel2002を利用しています)の拡張子CSVのファイルを、 MySQLのテーブルへ JavaサーブレットやJSP、JavaScript等で、 インポートするプログラミング方法を教えてください。 (もしくは参考になる、いずれかのWebサイトをご紹介いただくだけでも助かります) お世話になります。 宜しくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
なるほど。 もしかして匿名ユーザ消してますか? その場合は、 getConnection() じゃなくて getConnection("ユーザ名","パスワード") にしないとDBに接続できないんじゃなかったかと。 すみません、うろ覚えです。
その他の回答 (4)
- crossgate
- ベストアンサー率65% (78/119)
何かDBにつなぐときのユーザ名、パスワードがちゃんと指定できてないだけな気が。。。 こんな感じでgetConnectionしてますか? Connection con = DriverManager.getConnection("jdbc:mysql://localhost:ポート番号/xxxx", "ユーザ名", "パスワード");
お礼
crossgate様 ご回答ありがとうございました。 また機会がございましたら、 宜しくお願い致します。
補足
お世話になります。 現時点では、以下のように、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)
システム例外が具体的にどんな例外なのか良く分からないですが。。。 (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
お礼
crossgate様 ご回答ありがとうございました。 また機会がございましたら、 宜しくお願い致します。
補足
たびたび、ご回答をいただき、 ありがとうございます。 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)
サーバに無いと駄目です。 クライアントにあるならLOCALを付ければ良いです。 http://dev.mysql.com/doc/refman/4.1/ja/load-data.html
お礼
crossgate様 ご回答ありがとうございました。 また機会がございましたら、 宜しくお願い致します。
補足
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)
基本的にはタブ区切りのファイルをインポートするプログラムで、 CSVならこうしてね、っていうのは下の方に書いてます。
お礼
crossgate様 ご回答ありがとうございました。 また機会がございましたら、 宜しくお願い致します。
補足
crossgate様 ご回答ありがとうございます。 もしよろしかったら、更に教えてください。 今回ご回答いただきました内容を、Javaサーブレットプログラム内に 組み込んでいるのですが、なぜかシステムエラーが解消されない状況です。 おそらく、 LOAD DATA INFILE の後の、 「filename」の指定の仕方が、私の方で間違っているように思うのですが、 ここには、ローカルPC内のフォルダ(WindowsXP)内においてある CSVファイルを指定するのは、間違いなのでしょうか? (サーバー内にCSVファイルを置いてから、指定する必要があるのでしょうか?) 以上、宜しくお願い致します。
お礼
crossgate様 お世話になっております。 1週間ほど、別作業が優先で回ってきてしまい、 こちらの調査・対応作業が出来ずに、 お礼が遅れてすみませんでした。 このご回答通りに、試してみたところ、 すんなりDBに接続できました。 たびたびお手数をおかけいたしました。 本当に助かりました。 ありがとうございました。