当前位置: 首页 > 知识库问答 >
问题:

连接到用户输入数据库

严昊昊
2023-03-14

我有Connect()方法,它有一个字符串参数,这个参数是用户的输入。我创建了2个数据库:test和test2,但我只能从用户输入连接到test 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");
     }
}

堆栈跟踪:

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)

共有1个答案

池照
2023-03-14

与服务器建立连接后,尝试连接到数据库。

  public void Connect(String DataBase) {
            try{
                Class.forName("com.mysql.jdbc.Driver");
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306/");
                st = con.createStatement();
                st.execute("USE " + "[" + DataBase + "]");
                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);
            }  
        }

数据库是否需要验证?如果是,请尝试以下操作:

Properties connProperties;
connProperties = new Properties();
connProperties.setProperty("user", getUsername());
connProperties.setProperty("password",getPassword());

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/" + DataBase, connProperties);

此外,检查数据库是否存在也是一个好主意

stat.executeQuery("SELECT * FROM sys.sysdatabases");
 类似资料:
  • 我的Grails应用程序在开发模式下使用h2数据库(Grails应用程序的默认行为)。中的DB连接设置是 我正在尝试使用IntelliJ IDEA的数据库客户端工具为此数据库建立连接。我开始这样创建连接 然后在下面的对话框中,输入JDBC URL 并选择“模式”上的所有可用数据库 “Test Connection”(测试连接)按钮表示成功,但从红色圆圈中可以看到,没有找到任何表格。似乎我已经正确地

  • 首先要说的是,我对stackoverflow中的“提问”还不熟悉,所以如果我的问题不属于正确的类别,或者已经有人问过类似的问题,我表示歉意。我试图找到一个相关的问题,但我找不到。我的有点特别,这将作为我将来编程的一个例子。 我尝试创建的简单程序的流程是: > 起始编号为的,例如0 该数字递增1,直到该数字增加到100个数字,此时... 程序询问"Y/N"是否是,然后重复步骤1和2(每次重复这个过程

  • 我有一个多租户数据库。共享数据库有一个租户配置表,该表保存所有租户信息 每个租户数据库都有一个插入触发器,该触发器将新记录插入到将租户id附加到该记录的核心数据库中。 我需要知道插入来自哪个租户数据库,以便能够根据执行该过程的数据库设置租户id。 是否有一个唯一的ID相关的每个数据库,我可以依赖?

  • 在输入数据中,"i"可以被定义成"洲"(比如输入"Asia",代表亚洲),这样定义代表着从一个国家输出到一个"洲"。当"i"被设置成一个"洲"时,当相应的输出国家(即相对应的"e"中的国家)被选中时,整一个洲都会被点亮。洲名的输入参数如洲 - 参数表中所示。 使用方法: [         {                 // "e"不能设置成洲,输出必须是国家                

  • //我试图创建一个注册表单(html),但在我单击按钮后,php文件似乎不能正确执行,web浏览器显示了上面的php代码,我想知道php有什么问题

  • 创建数据库后,必须连接或启动数据库才能正常使用。 语法: 示例: 假设要连接 数据库,参考以下代码: 执行上面命令,得到以下结果: