У меня есть метод Connect(), который имеет строковый параметр, этот параметр является входом от пользователя. У меня есть 2 базы данных: test и test2, но я могу подключиться только к тестированию db с пользовательского ввода. Должен ли я внести изменения на сервер, на котором размещается 2 dbs, чтобы иметь возможность подключаться к любой базе данных, которую пользователь пишет ???Подключиться к базе данных ввода пользователя
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");
}
}
СТЕК TRACE:
Enter the Db's name: test2 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user ''@'localhost' to database 'test2' Cannot connect to database test2 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.Util.getInstance(Util.java:381) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910) at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3923) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1273) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:718) at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:46) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:270) at medapp.DBConnect.Connect(DBConnect.java:19) at medapp.MedApp.main(MedApp.java:29)
Почему вы говорите, вы можете подключить только к 'test' базы данных? Что произойдет, если пользователь войдет в 'test2'? – RealSkeptic
Исключение вызывается и вводится здесь catch (SQLException se) { System.out.println («Не удается подключиться к базе данных» + База данных); } –
при вводе теста это печатает Подключается к тесту !!! –