Java不会连接到我的MySQL数据库

时间:2013-04-02 19:49:31

标签: java mysql connect

我一直在尝试连接到我的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)`

有人可以帮我解决这个错误吗?我已经试图解决这个问题好几天但我没有管理:(

3 个答案:

答案 0 :(得分:0)

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

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


可能的解决方案

第1步。检查您是否可以在MySQL控制台中使用数据库

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

$ mysql -h localhost -u YourUser -pYourPassword

如果失败,则YourUserYourPassword错误。如果一切顺利,你看到MySQL提示,那么试试这个:

mysql> use YourDatabase;

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

第2步。向您的用户授予权限

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

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

查看参考手册以了解grant的使用情况。

希望这有助于你

答案 1 :(得分:0)

您可以尝试以下语法来创建连接:

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

答案 2 :(得分: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) {}
        }

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