Java无法连接到我的MySQL数据库

Java无法连接到我的MySQL数据库,java,mysql,connect,Java,Mysql,Connect,我一直试图连接到我的MySQL数据库,但它无法连接到它。当运行我的应用程序时,我使用mysql-java-connector.jar运行它,但它仍然无法工作 以下是我正在使用的连接方法: public static void createConnection() { try { Class.forName("com.mysql.jdbc.Driver").newInstance();//opens class String IP="

我一直试图连接到我的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)`
java.sql.SQLException:拒绝用户'daniel_voteuser'@'localhost'的访问(使用密码:YES)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
在com.mysql.jdbc.MysqlIO.checkErrorPacket上(MysqlIO.java:4120)
在com.mysql.jdbc.MysqlIO.checkErrorPacket上(MysqlIO.java:4052)
在com.mysql.jdbc.MysqlIO.checkErrorPacket上(MysqlIO.java:925)
在com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1704)上
在com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1250)上,与SQL数据库的连接失败!
位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2465)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2498)
位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283)
位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:822)
位于com.mysql.jdbc.JDBC4Connection(JDBC4Connection.java:47)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:411)
位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
位于com.rs.database.mysql.impl.Highscores.createConnection(Highscores.java:34)
位于com.rs.Launcher.main(Launcher.java:113)`

有人能帮我解决这个错误吗?我已经尝试解决这个问题好几天了,但我没有成功:(

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

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


可能的解决办法 步骤1。检查是否可以在MySQL控制台中使用数据库

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

$ mysql -h localhost -u YourUser -pYourPassword
如果失败,则说明
YourUser
YourPassword
错误。如果一切顺利,并且您看到MySQL提示,请尝试以下操作:

mysql> use YourDatabase;
然后尝试一些
select
查询,以确保您可以使用数据库

步骤2。将权限授予您的用户

如果无法使用数据库,则必须向
您的用户
授予使用数据库的权限。以root用户身份登录MySQL,并向
您的用户
授予权限:

mysql> grant all on YourDatabase.* to 'YourUser'@'localhost'
查看参考手册,了解
grant
的用法


希望这对您有所帮助

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

con = DriverManager.getConnection("jdbc:mysql://"
    + MYSQL_SERVER + ":3306" + "/" + MYSQL_DB_NAME 
    + "?user=" + MYSQL_USERNAME
    + "&password=" + MYSQL_PASSWORD);

以下是我成功的秘诀:

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) {}
        }
public void connectToDatabase(字符串用户名、字符串密码、字符串lastname)
{
连接=空;
String url=“jdbc:mysql://localhost:3306/javabase";
尝试
{
System.out.println(“连接数据库…”);
connection=DriverManager.getConnection(url、用户名、密码);
System.out.println(“数据库已连接!”);
语句stmt=connection.createStatement();
String query=“从用户中选择firstname,其中lastName类似\”“+lastName+”\”;
ResultSet rs=stmt.executeQuery(查询);
int columns=rs.getMetaData().getColumnCount();
消息=新的StringBuilder();
while(rs.next())
{

对于(int i=1;我认为具有该权限的用户是否有权访问数据库?您的数据库是否允许外部连接?我如何使我的数据库允许外部连接?localhost有什么问题?我应该更改吗?您提供的密码正确吗?从异常消息看,登录信息不正确或错误数据库中不存在gin。它是正确的,我只是删除了数据库,以便其他人无法登录:pHow我可以让我的数据库允许连接吗?@DekuleguttaHeisann检查我的编辑:它显示了一个可能的解决方案嘿,我试着按照你说的做,但现在我遇到了另一个问题…我无法再连接到我的数据库:/ERROR 1045(28000):用户“SECRET”@“localhost”的访问被拒绝(使用密码:是)@DekuleguttaHeisann然后您的用户和密码出现问题。请记住,两者都是区分大小写的。也许您的解决方案是以root用户身份输入MySQL并重置用户密码。请查看参考手册,了解如何管理MySQL用户帐户。@DekuleguttaHeisann如果您不能以root用户身份登录,则必须询问系统管理员trator以root用户身份登录并重置密码。好的,那很可能是用户名/密码问题。不可能,因为我已经测试了MySQL workbench 5.2 CE的连接,当我用它连接到数据库时,它工作正常。只有Java,我无法连接到它…密码中有特殊/外来字符吗?(反斜杠等)请尝试更改密码。或者您可以尝试使用字符串IP=“127.0.0.1:3306”而不是本地主机,甚至可以使用字符串IP=“address=(protocol=tcp)(host=::1)(port=3306)”来处理通过IPv6的访问。