【发布时间】:2015-05-28 07:40:58
【问题描述】:
我有一个带有字符串参数的 Connect() 方法,这个参数是用户的输入。我创建了 2 个数据库:test 和 test2,但我只能从用户输入连接到 test db。我应该对托管 2 个数据库的服务器进行更改,以便能够连接到用户写入的任何数据库吗???
public void Connect(String DataBase) {
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/" + DataBase);
st = con.createStatement();
System.out.println("Connected to " + DataBase + " !!!");
con.close();
}catch(SQLException se){
System.out.println("Cannot connect to database " + DataBase);
}
catch(Exception ex){
System.out.println("Error: " + ex);
}
}
主要方法
// DB1Connect connect = new DBConnect("test");
//connect.getData();
Scanner scanner = new Scanner(System.in);
System.out.println("Choose from these choices");
System.out.println("-------------------------\n");
System.out.println("1 - Connect to a specific DB schema");
System.out.println("2 - List DB schema structure: tables, fields, types");
System.out.println("3 - List table structure: fields, types");
System.out.println("4 - Quit");
int choice = scanner.nextInt();
switch(choice) {
case 1:
System.out.println("Enter the Db's name:");
String dbName = scanner.next();
DBConnect connect = new DBConnect();
connect.Connect(dbName);
break;
case 2:
break;
default:
System.out.println("Incorrect option");
}
}
堆栈跟踪:
输入数据库的名称:
测试2
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 用户''@'localhost'拒绝访问数据库'test2'
无法连接到数据库 test2
在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
在 java.lang.reflect.Constructor.newInstance(Constructor.java:422)
在 com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
在 com.mysql.jdbc.Util.getInstance(Util.java:381)
在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910)
在 com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3923)
在 com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1273)
在 com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)
在 com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:718)
在 com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:46)
在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
在 java.lang.reflect.Constructor.newInstance(Constructor.java:422)
在 com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
在 com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
在 java.sql.DriverManager.getConnection(DriverManager.java:664)
在 java.sql.DriverManager.getConnection(DriverManager.java:270)
在 medapp.DBConnect.Connect(DBConnect.java:19)
在 medapp.MedApp.main(MedApp.java:29)
【问题讨论】:
-
为什么说只能连接
test数据库?如果用户输入test2会发生什么? -
抛出异常进入这里 catch(SQLException se){ System.out.println("无法连接数据库" + DataBase); }
-
当输入被测试时,它会打印 Connected to test!!!
-
如何将
se.printStackTrace()添加到catch并将完整的堆栈跟踪复制到您的问题? -
您在问题下方有一个
edit链接。写“这是堆栈跟踪”之类的内容,然后粘贴堆栈跟踪,然后在其开头添加<pre>并在其末尾添加</pre>以对其进行格式化。