0

我一直在尝试连接到我的 MySQL 数据库,但它不会连接到它。运行我的应用程序时,我使用 mysql-java-connector.jar 运行它,但它仍然无法工作。

这是我正在使用的连接方法:

public static void createConnection() {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();//opens class
            String IP="localhost:3306";//connection ip
            String DB="SECRET";//database name
            String User="SECRET";//username
            String Pass="SECRET"; //password
            con = DriverManager.getConnection("jdbc:mysql://"+IP +"/"+DB, User, Pass); //creates connection
            stmt = con.createStatement();
        } catch (Exception e) {//catches if connection failed
            System.out.println("Connection to SQL database failed!");//tells you it failed @ the run.bat
            e.printStackTrace();
        }
    }

变量:

  public static Connection con = null;
  public static Statement stmt;
  public static boolean connectionMade;

这是我尝试连接到我的数据库时遇到的错误:

java.sql.SQLException: Access denied for user 'daniel_voteuser'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:925)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1704)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1250)Connection to SQL database failed!

    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2465)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2498)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:822)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.rs.database.mysql.impl.Highscores.createConnection(Highscores.java:34)
    at com.rs.Launcher.main(Launcher.java:113)`

谁能帮我解决这个错误?几天来我一直试图解决这个问题,但我还没有成功:(

4

3 回答 3

0

异常消息描述了正在发生的事情。

这不是语法错误,而是身份验证失败的情况:您的用户-密码组合无效,或者用户没有使用数据库的权限。


可能的解决方案

步骤 1.检查是否可以在 MySQL 控制台中使用数据库

由于您在 工作localhost,我假设您可以使用您的用户名和密码输入 MySQL。因此,在终端中:

$ mysql -h localhost -u YourUser -pYourPassword

如果这失败了,那么YourUser或者YourPassword是错误的。如果一切顺利并且您看到 MySQL 提示符,请尝试以下操作:

mysql> use YourDatabase;

然后尝试一些select查询,以确保您可以使用数据库。

步骤 2.向您的用户授予权限

如果您不能使用数据库,那么您必须授予YourUser使用数据库的权限。以 root 身份登录 MySQL 并授予以下权限YourUser

mysql> grant all on YourDatabase.* to 'YourUser'@'localhost'

查看参考手册以了解grant.

希望这可以帮助你

于 2013-04-02T19:54:20.990 回答
0

您可以尝试以下语法来创建连接作为替代:

con = DriverManager.getConnection("jdbc:mysql://"
    + MYSQL_SERVER + ":3306" + "/" + MYSQL_DB_NAME 
    + "?user=" + MYSQL_USERNAME
    + "&password=" + MYSQL_PASSWORD);
于 2013-04-02T19:58:05.947 回答
0

这是我成功使用的:

public void connectToDatabase( String username, String password, String lastname)
{
    Connection connection = null;
    String url = "jdbc:mysql://localhost:3306/javabase";
        try 
        {
            System.out.println("Connecting database...");
            connection = DriverManager.getConnection(url, username, password);
            System.out.println("Database connected!");
            Statement stmt = connection.createStatement();
            String query = "select firstname from user where lastName like \"" + lastname + "\"";
            ResultSet rs = stmt.executeQuery(query);

            int columns = rs.getMetaData().getColumnCount();
                    message = new StringBuilder();

                    while (rs.next()) 
                    {
                    for (int i = 1; i <= columns; i++) 
                    {
                            message.append(rs.getString(i) + " ");
                    }
                    message.append("\n");
                    }

                    System.out.println(message);  // print table contents          
        } 
        catch (SQLException e) 
        {
            throw new RuntimeException("Cannot connect the database!", e);
        }       
        finally 
        {
            System.out.println("Closing the connection.");
            if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
        }

我通过不同的方法传递用户名、密码和查询的内容,但您可以在适合您的任何地方定义它们。

于 2014-01-28T20:57:52.710 回答