为什么这个程序在第二次进入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");
}
}
答案 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”)
答案 3 :(得分:0)
找到了bug listing at MySQL,它提供了此错误,但使用了不同的技术。但是,在描述中它表明它与重新授权不发送数据库信息有关,所以也许这就是你在这里遇到的。
有些事情对我来说很奇怪(虽然不知道它们会对你的错误产生什么影响)
或许将这两行移到do
循环
DataBase s = new DataBase();
s.LoadDriver();