2009-02-25 5 views
6

do whileループに2回目に入ったときにこのプログラムが実行されない理由と例外が発生する理由「例外java.sql.SQLException:[MySQL] [ODBC 5.1ドライバ] [mysqld-5.0.51a-community -nt]データベースが選択されていません "「データベースが選択されていません」というSQLExceptionがなぜですか?

//import java.io.InputStream; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.Scanner; 
import java.util.Vector; 

public class DataBase { 

    public void LoadDriver() { 

     // Load the JDBC-ODBC bridge driver 
     try { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     } catch (ClassNotFoundException ee) { 
      ee.printStackTrace(); 
     } 
    } 

    // 2.open a data source name by means of the jdbcodbcdriver. 

    static void connect() throws SQLException { 

     // Connect to the database 
     Connection con = DriverManager.getConnection("jdbc:odbc:MySQL", "root", "admin"); 
     Statement stmt = con.createStatement(); 
     // Shut off autocommit 
     con.setAutoCommit(false); 


     System.out.println("1.Insert 2.Delete 3.Update 4.Select"); 
     Scanner s = new Scanner(System.in); 
     int x; 
     x = s.nextInt(); 

     String query; // SQL select string 
     ResultSet rs; // SQL query results 
     boolean more; // "more rows found" switch 
     String v1, v2; // Temporary storage results 

     Vector<Object> results = new Vector<Object>(10); 


     if (x == 1) { 

      try { 
       stmt.executeUpdate("INSERT INTO employee(emp_id,emp_name) VALUES ('122','shiva') "); 
      } catch(Exception e){System.out.println("Exception " +e);e.printStackTrace();} 
     } 

     if (x == 2) { 

      try { 
       stmt.executeUpdate("DELETE from employee where emp_id='102' "); 
      }catch(Exception e){System.out.println("Exception "+e);e.printStackTrace();} 
     } 

     if (x == 3) { 

      try { 
       stmt 
         .executeUpdate("UPDATE employee SET emp_name = 'madavan' where emp_id='20'; "); 
      } catch(Exception e){System.out.println("Exception "+e);e.printStackTrace();} 
     } 


     query = "SELECT * FROM employee "; 
     try { 
      rs = stmt.executeQuery(query); 
      // Check to see if any rows were read 
      more = rs.next(); 
      if (!more) { 

       System.out.println("No rows found."); 
       return; 
      } 

      // Loop through the rows retrieved from the query 
      while (more) { 

       v1 = "ID: " + rs.getInt("emp_id"); 
       v2 = "Name: " + rs.getString("emp_name"); 

       System.out.println(v1); 
       System.out.println(v2); 
       System.out.println(""); 

       results.addElement(v1 + "\n" + v2 + "\n"); 

       more = rs.next(); 
      } 
      rs.close(); 

     } catch (SQLException e) { 
      System.out.println("" + results.size() + "results where found."); 
     } 
     finally{stmt.close();} 
    } 

    public static void main(String[] args) throws SQLException { 
     String str = "y"; 
     do { 
      DataBase s = new DataBase(); 
      s.LoadDriver(); 
      DataBase.connect(); 
     Scanner sc = new Scanner(System.in); 
     System.out.println("DO u Want to PROCEED TO QUERY : "); 
     str = sc.next(); 
     } while (str !="n"); 
    } 

} 

答えて

2

私はあなたがデータベースを指定していないと推測します。 どのスキーマから選択するかを指定しなくても、どのテーブルで選択を行うことができますか? これは通常、接続文字列に設定されます。

+0

興味深いJdbcOdbcDriver – toad

+0

を使用しているされているので、私は、ODBC定義でその含まを推定でしょう..スキーマ名は、MySQLです?? – markt

+0

これはコンピュータ上のODBC定義の名前になります – toad

6

jdbc/odbcドライバを使用しない限り、私はまっすぐなmysql jdbcドライバを使用します。 mysqlから無料でダウンロードできます。

その後、

public void LoadDriver() { 

     // Load the JDBC-ODBC bridge driver 
     try { 
       Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException ee) { 
       ee.printStackTrace(); 
     } 
} 

static void connect() throws SQLException { 

     // Connect to the database 
     Connection con = DriverManager.getConnection("jdbc:mysql:host/databasename", "root", "admin"); 
     Statement stmt = con.createStatement(); 
... 
0

は、このエラーを与えるが、異なる技術を持つbug listing at MySQLを発見しました。ただし、この説明では、データベース情報を送信しない再認可に関連していることを示しているため、おそらくこれもここで遭遇しているものです。

あなたがクローズされていません

  • たら、あなたは唯一のドライバマネージャをロードする必要があります(彼らはあなたのエラーへの影響はあります場合は、no手掛かりが)私には奇妙なようはみ出しいくつかのもの

    • あなたの接続、それを閉じるか、同じものを使用するためにリファクタリングしてください。

    おそらく、ちょうどdoループ

    DataBase s = new DataBase(); 
    s.LoadDriver(); 
    
  • 1

    前に、ODBCソースは、実際にデータベースを選択するように設定されているために、これらの2行を移動しますか?例えば。別のODBCクライアントツールを使用してデータベースにアクセスできますか?

    JDBC文字列でデータベースを明示的に選択する必要がある場合は、「データベース」パラメータを使用してそのデータベースを指定できます。

    しかし、ODBC設定でデータベースを選択した方がより一般的です。実際、Clintが言及したように、ODBCの代わりに通常のMySQL JDBCドライバを使用するのはもっと普通です。

    しばらく(STR!= "N")

    That's not how you compare strings in Java.

    関連する問題