Java无法连接到我的MySQL数据库
我一直试图连接到我的MySQL数据库,但它无法连接到它。当运行我的应用程序时,我使用mysql-java-connector.jar运行它,但它仍然无法工作 以下是我正在使用的连接方法: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="
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的访问。