我一直在尝试连接到我的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)`
有人可以帮我解决这个错误吗?我已经试图解决这个问题好几天但我没有管理:(
答案 0 :(得分: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
的使用情况。
希望这有助于你
答案 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) {}
}
我正在通过其他方法传递用户名,密码和我查询的内容,但您可以在适合您的地方定义它们。