为什么'没有选择数据库'SQLException?

时间:2009-02-25 05:57:47

标签: java jdbc

为什么这个程序在第二次进入do while循环时没有执行,为什么它会给出异常“Exception java.sql.SQLException:[MySQL] [ODBC 5.1 Driver] [mysqld-5.0.51a- community-nt]没有选择数据库“

//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");
    }

}

4 个答案:

答案 0 :(得分: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();
...

答案 1 :(得分:2)

只是查看异常..我猜你没有指定数据库。 如何在不告诉它选择哪个模式的情况下对表进行选择? 这通常在连接字符串中设置..

答案 2 :(得分:1)

ODBC源实际上是否设置为选择数据库?例如。你可以通过另一个ODBC客户端工具访问数据库吗?

如果需要在JDBC字符串中显式选择数据库,则可以使用“database”参数执行此操作。

但是在ODBC设置中选择数据库会更常见。事实上,正如Clint所提到的,使用普通的MySQL JDBC驱动程序而不是ODBC仍然会更常见。

  

while(str!=“n”)

That's not how you compare strings in Java.

答案 3 :(得分:0)

找到了bug listing at MySQL,它提供了此错误,但使用了不同的技术。但是,在描述中它表明它与重新授权不发送数据库信息有关,所以也许这就是你在这里遇到的。

有些事情对我来说很奇怪(虽然不知道它们会对你的错误产生什么影响)

  • 您只需要加载一次驱动程序管理器
  • 您没有关闭连接,因此请关闭它或重构以使用相同的连接。

或许将这两行移到do循环

之前
DataBase s = new DataBase();
s.LoadDriver();
相关问题