• 締切済み
  • 困ってます

Javaとエクセルを連携させる

Sample1.java  ドライバ名にMicrosoft Excel Driver;createと指定しましたが 実行時に、 java.sql.SQLException: No suitable driver found for Microsoft Excel Driver;creat e=true at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at Sample1.main(Sample1.java:14) ドライバが適切でないというエラーが出てしまいました。 エクセルのDBはSQL文では扱えないのでしょうか? コードは以下の通りです。 import java.sql.*; public class Sample1 { public static void main(String args[]) { try{ //接続の準備 String url = "Microsoft Excel Driver;create=true"; String usr = ""; String pw = ""; //データベースへの接続 Connection cn = DriverManager.getConnection(url, usr, pw); //問い合わせの準備 DatabaseMetaData dm = cn.getMetaData(); ResultSet tb = dm.getTables(null, null, "車表", null); Statement st = cn.createStatement(); String qry1 = "CREATE TABLE 車表(番号 int, 名前 varchar(50))"; String[] qry2 = {"INSERT INTO 車表 VALUES (2, '乗用車')", "INSERT INTO 車表 VALUES (3, 'オープンカー')", "INSERT INTO 車表 VALUES (4, 'トラック')"}; String qry3 = "SELECT * FROM 車表"; if(!tb.next()){ st.executeUpdate(qry1); for(int i=0; i<qry2.length; i++){ st.executeUpdate(qry2[i]); } } //問い合わせ ResultSet rs = st.executeQuery(qry3); //データの取得 ResultSetMetaData rm = rs.getMetaData(); int cnum = rm.getColumnCount(); while(rs.next()){ for(int i=1; i<=cnum; i++){ System.out.print(rm.getColumnName(i) + ":"+ rs.getObject(i) + " "); } System.out.println(""); } //接続のクローズ rs.close(); st.close(); cn.close(); } catch(Exception e){ e.printStackTrace(); } } }

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

  • 回答数1
  • 閲覧数733
  • ありがとう数1

みんなの回答

  • 回答No.1

DriverManager.getConnection()のURLが間違っています。 URLは、例えば"jdbc:xls:file:test.xlsx"のように、"jdbc:"で始まる文字列です。 詳しくは、使用しているJDBCドライバのドキュメントを確認してください。 また、JDBCドライバのclassファイル(またはjarファイル)をクラスパスに含めるのを忘れないでください。

参考URL:
http://code.google.com/p/sqlsheet/

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

質問者からのお礼

丁寧にリンクを張っていただいてありがとうございます。

質問者からの補足

jdbc:xls:file:test.xlsx としてやってみたところ、 java.sql.SQLException: No suitable driver found for jdbc:xls:file:extracttest.xl s at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at Sample1.main(Sample1.java:14) と出て14行目は Connection cn = DriverManager.getConnection(url, usr, pw); です。何がおかしいのでしょうか? >また、JDBCドライバのclassファイル(またはjarファイル)>をクラスパスに含めるのを忘れないでください。 この意味がちょっとわかりません。環境変数をいじるという事ですか?

関連するQ&A

  • Javaでデータに登録する度にIDを振る

    下記のコードはSQLにテーブルを作成し、データを登録するコードですが コードを少し足すことで、ついでにIDを自動的に割り振る方法はあるのでしょうか? import java.sql.*; public class Sample1 { public static void main(String args[]) { try{ //接続の準備 String url = "jdbc:derby:cardb;create=true"; String usr = ""; String pw = ""; //データベースへの接続 Connection cn = DriverManager.getConnection(url, usr, pw); //問い合わせの準備 DatabaseMetaData dm = cn.getMetaData(); ResultSet tb = dm.getTables(null, null, "車表", null); Statement st = cn.createStatement(); String qry1 = "CREATE TABLE 車表(番号 int, 名前 varchar(50))"; String[] qry2 = {"INSERT INTO 車表 VALUES ('伊藤', '男性')", "INSERT INTO 車表 VALUES ('佐藤', '女性')", "INSERT INTO 車表 VALUES ('山田', '男性')"}; String qry3 = "SELECT * FROM 車表"; if(!tb.next()){ st.executeUpdate(qry1); for(int i=0; i<qry2.length; i++){ st.executeUpdate(qry2[i]); } } //問い合わせ ResultSet rs = st.executeQuery(qry3); //データの取得 ResultSetMetaData rm = rs.getMetaData(); int cnum = rm.getColumnCount(); while(rs.next()){ for(int i=1; i<=cnum; i++){ System.out.print(rm.getColumnName(i) + ":"+ rs.getObject(i) + " "); } System.out.println(""); } //接続のクローズ rs.close(); st.close(); cn.close(); } catch(Exception e){ e.printStackTrace(); } } 000001 伊藤 男性 000002 佐藤 女性 000003 山田 男性

    • ベストアンサー
    • Java
  • Java PostgreSQL スクリプトレット

    スクリプトレットを使用し、ログイン画面を作成しようと考えています。 <%@ page import="java.io.*,javax.servlet.*,javax.servlet.http.*,java.net.*,java.sql.*" %> <% request.setCharacterEncoding("Shift_JIS"); String id = (String)request.getParameter("id"); String pass = (String)request.getParameter("pass"); String drv = "org.postgresql.Driver"; String dsn = "jdbc:postgresql://localhost:5432/?user=postgres&password=aipo"; String sql = "SELECT * FROM TURBINE_USER"; Connection cn = DriverManager.getConnection(dsn); Statement st = cn.createStatement(); ResultSet rs = st.executeQuery(sql); while (rs.next()) { out.println("<P>" + rs.getString(1) + "</P>"); } rs.close(); st.close(); cn.close(); %> 上記を実行すると org.apache.jasper.JasperException: Exception in JSP: /get.jsp:18 となり、 ResultSet rs = st.executeQuery(sql); の時点でエラーとなります。 Statement st = cn.createStatement(); まで正常に動作するのは確認済みです。 類似する質問に http://oshiete1.goo.ne.jp/qa3522131.html がありましたが、解決できませんでした。 どこが間違っていますでしょうか。

  • JavaとMySQLを接続できなくて困っています。

    MySQLで作成したデータベースをJavaを使って表示するというプログラムを作っているのですが、JDBCドライバがうまく機能せず、接続できません。初歩的な問題なのだとは思いますが、どなたか解決方法を教えてください。 import java.sql.*; public class Iwate1 { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ try{ String drv = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql:///iwate"; String usr = "----"; String pw = "-------"; Class.forName(drv).newInstance(); Connection cn = DriverManager.getConnection(url, usr, pw); Statement st = cn.createStatement(); String qry = "SELECT * FROM iwate_table"; ResultSet rs = st.executeQuery(qry); ResultSetMetaData rm = rs.getMetaData(); int cnum = rm.getColumnCount(); while(rs.next()){ for(int i=1; i<=cnum; i++){ System.out.print(rm.getColumnName(i)+":"+rs.getObject(i)+" "); } System.out.println(""); } rs.close(); st.close(); cn.close(); } catch(Exception e){ e.printStackTrace(); } } } 結果は java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at Iwate1.main(Iwate1.java:17)

  • シンボルを見つけられませんのエラー原因

    Windows 8.1, Java 6です。 参考書通りに入れたので間違えているはずがないのですが、 Inquiry.java:33: シンボルを見つけられません。 シンボル: メソッド executeUpdate(java.lang.String[]) 場所 : java.sql.Statement の インタフェース ResultSet rs = st.executeUpdate(qry); となっています。何が原因でしょうか? package mybeans; import java.util.*; import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class Inquiry implements Serializable { private ArrayList<String> colname; private ArrayList<ArrayList> data; public Inquiry() { try{ String url = "jdbc:mysql://localhost:3306/work;create=true"; String usr = ""; String pw = ""; Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/work","割愛","割愛"); DatabaseMetaData dm = cn.getMetaData(); ResultSet tb = dm.getTables(null, null, "inquiry", null); Statement st = cn.createStatement(); String[] qry = {"INSERT INTO inquiry VALUES ('いとう', '22', '名古屋市', '西区', '企画部', 2)"}; ResultSet rs = st.executeUpdate(qry);  ←ここがエラー箇所 rs.close(); st.close(); cn.close(); } catch(Exception e){ e.printStackTrace(); } } public ArrayList getData() { return data; } public ArrayList getColname() { return colname; } }

    • ベストアンサー
    • Java
  • java.lang.NoClassDefFoundErrorというエラーが出ます

    ご質問させて頂きます。 自分のPC(XP)からTelnetで LINUX(Red Hat Linux release 9 (Shrike))に接続しています。 サンプルを参考にして以下のコードを作ってみました。 これは、PostgreSQLで作成したデータベース(aa)の テーブル(test)のデータを表示させようとしています。 import java.sql.*; public class sample1{  public static void main(String [] args){   String driver = "org.postgresql.Driver";   String url = "jdbc:postgresql://192.178.215.230/home/postgres/data/aa";   try{     Class.forName(driver);     Connection con = DriverManager.getConnection(url,"postgres","aaaa");     Statement st = con.createStatement();     ResultSet rs = st.executeQuery("SELECT * FROM test");      System.out.println("shainno shimei ");     while ( rs.next() ){        System.out.println(" "+rs.getInt("shainno")+" "+ rs.getString("shimei"));     }     rs.close();      st.close();      con.close();     }catch (SQLException sqlEx){     System.out.println("SQLERROR: " + sqlEx.toString());   }catch (Exception ex){     ex.printStackTrace();   }  } } これを実行すると、 [postgres@localhost postgres]$ java sample1 以下のようなエラーが出てします。 Exception in thread "main" java.lang.NoClassDefFoundError: sample1 ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • JavaでOracle9iのデータベースにアクセスしたいのですが

    JavaでOracleのデータベース上のテーブルにアクセスして、 ウェブブラウザで表示したいのですが、 参考として以下の文を入手はしたのですが、 それぞれの文の意味がよく分かりません。 import java.sql.*; public class JDBCExample { public static void main(String args[]) throws SQLException { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@dlsun137:5521:sol1", "scott", "tiger"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select ename, empno, sal from emp"); while(rs.next()){ String name= rs.getString(1); int number = rs.getInt(2); double salary = rs.getDouble(3); System.out.println(name+" "+number+" "+salary); } rs.close(); conn.close(); } } 見た感じ、テーブルそのものを表示する記述ではないような気がするのと、 仮にこのクラスを作ったとして、このクラスだけで望んだ結果を得られるのでしょうか? どなたか、よろしくお願いいたします!

    • ベストアンサー
    • Java
  • javaからmysqlに接続ができません。

    よろしくお願いします。 JavaからMySqlに接続ができなくて困っています。 <環境> OS:Windows XP JDK : jdk1.6.0_02 JDBC Driver for MySQL : mysql-connector-java-5.1.5-bin.jar Java、MySql単体では正常に動作しているようですが、ドライバを認識できず、JavaからMySqlに接続することができません。 ---コード------------------------------------------ import java.net.*; import java.sql.*; public class SqlSample1{ String url = "jdbc:mysql://localhost/test_db"; String user = "root";//ユーザ名 String pass = "admin";//パスワード Connection con = null; //コンストラクタ public SqlSample1(){ init();//初期化 fin();//終了 } //初期化 public void init(){ try{ //ドライバのロード Class.forName("org.gjt.mm.mysql.Driver"); //MySQLサーバへの接続 con = DriverManager.getConnection(url,user,pass); System.out.println("Connected!!"); }catch(SQLException e){ System.err.println("SqlException:\n"+e.toString()); }catch(Exception e){ e.printStackTrace(); } } //終了:開放 public void fin(){ try{ con.close(); System.out.println("Closed."); }catch(SQLException e){ System.err.println("SqlException:\n"+e.toString()); }catch(Exception e){ e.printStackTrace(); } } public static void main(String args[]){ SqlSample1 ss1=new SqlSample1(); } } ----------------------------------------------------------- ----エラーメッセージ--------------------------------------- SqlException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure Last packet sent to the server was 0 ms ago. java.lang.NullPointerException at SqlSample1.fin(SqlSample1.java:41) at SqlSample1.<init>(SqlSample1.java:18) at SqlSample1.main(SqlSample1.java:53) ------------------------------------------------------------ ※C:\mysql-connector-java-5.1.5の下のmysql-connector-java-5.1.5-bin.jarファイルにCLASSPATHを設定しています。 初心者のためへたくそな質問になっているかもしれません。 申し訳ありません。 上記の情報が不十分な場合はご指摘をお願い致します。

  • データ数をカウントしたいのですが

    JAVAのJDBCを使いMySqlを操作しデータ数を取得するプログラムです。自分なりに考えたプログラムは Connection con = null; String sql = "select count(*) from テーブル名"; // コネクションを作成する。 con = DriverManager.getConnection(url, user, pass); Statement st = con.createStatement(); // SQLを実行する。 ResultSet rs = st.executeQuery(sql); String count = rs.getString("count(*)"); 実行した結果上手く出来ないのですが、この部分での間違いはありますか?

    • ベストアンサー
    • Java
  • javaのプログラムについて

    java始めたばかりの者です。 class sample1 { public static void main(String[] args) { for(int i=1; i<=5; i++){ for(int j=0; j<i; j++){ System.out.println("*"); } System.out.println("\n"); } } } これを実行すると * * * * * * * * * * * * * * * こうなってしまい * ** *** **** ***** このようにするにはどうしたらいいのでしょうか??

    • ベストアンサー
    • Java
  • DBへ問合せた後の処理について。

    btn2.setEnabled(false); btn3.setEnabled(false); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try{ String drv = "org.postgresql.Driver"; String url = "jdbc:postgresql:postgres"; String usr = "postgres"; Class.forName(drv); Connection cn = DriverManager.getConnection(url, usr); Statement st = cn.createStatement(); String qry1 = "SELECT * FROM getuji WHERE 年度 = '1984';"; ResultSet rs = st.executeQuery ( qry1 ); while(rs.next()){ int t = rs.getInt("年度"); } st.close(); cn.close(); } catch(Exception f){f.printStackTrace();} if (t != 0 ){ btn2.setEnabled(true); } else{ btn3.setEnabled(true); } } }); btn1を押すとDBへ問合せ、データが有る場合はbtn2が使えるようになり、データがない場合はbtn3が使えるようになる、という風にしたいのですが、コンパイル時に シンボルがありません。 変数 t if (t != 0 ){ とエラーた出てしまいます。何かよい方法はないでしょうか?上記以外のやり方でもけっこうですので教えてください。

    • ベストアンサー
    • Java