简体   繁体   English

无法使用属性文件在Java中连接到MySql

[英]Cant Conect to MySql in java with properties file

I Encountered a really strange problem I don't know how to handle. 我遇到了一个我不知道如何处理的非常奇怪的问题。

My app connect to MySQL DB to fetch data, until yesterday I had the connection details hard coded in the code , and everything worked fine. 我的应用程序连接到MySQL DB来获取数据,直到昨天我在代码中对连接详细信息进行了硬编码,并且一切正常。

IE: IE:

connect = DriverManager.getConnection("jdbc:mysql://10.0.0.188:3306", "dudug", "qazqaz");

I have decided to make my application more modular , and have an option to change/set the connection details, and store it in a property file. 我决定使我的应用程序更具模块化,并可以选择更改/设置连接详细信息,并将其存储在属性文件中。

Now when I use the following code: 现在,当我使用以下代码时:

Class.forName("com.mysql.jdbc.Driver");

// setup the connection with the DB.

String user = props.getProperty("SqlUserName");
String pass = props.getProperty("SqlPassword");
String port = String.valueOf(props.getProperty("SqlPort"));
String addr = props.getProperty("SqlAddress");
connect =  DriverManager.getConnection("\"jdbc:mysql://" + addr + ":" + port + "\",\"" + user + "\",\"" + pass + "\"");

, I get an error message like this : ,我收到这样的错误消息:

java.sql.SQLException: No suitable driver found for "jdbc:mysql://10.0.0.188:3306?user=dudug&password=qazqaz"
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)

when debugging, both of the output connection strings are the same: 调试时,两个输出连接字符串都相同:

"jdbc:mysql://10.0.0.188:3306", "dudug", "qazqaz" “ jdbc:mysql://10.0.0.188:3306”,“ dudug”,“ qazqaz”

Only when I use the modular string I get a problem. 只有当我使用模块化字符串时,我才会遇到问题。

Anyone got any idea ? 有人知道吗?

Thnaks, Thnaks,

Dave. 戴夫。

UPDATE: 更新:

when is use this: 什么时候使用这个:

DriverManager.getConnection("jdbc:mysql://" + props.getProperty("SqlAddress") + ":" + String.valueOf(props.getProperty("SqlPort")) 
+ "," + props.getProperty("SqlUserName") + "," + props.getProperty("SqlPassword"));

or this: 或这个:

String user = props.getProperty("SqlUserName");
String pass = props.getProperty("SqlPassword");
String port = String.valueOf(props.getProperty("SqlPort"));
String addr = props.getProperty("SqlAddress");

connect =  DriverManager.getConnection("jdbc:mysql://" + addr + ":" + port + "," + user + "," + pass);

its just gets stuck, posting no error message. 它只是卡住,没有发布错误消息。

The problem is, that you are trying to build the parameters list of the getConnection() method. 问题是,您正在尝试构建getConnection()方法的参数列表。

"\"jdbc:mysql://" + addr + ":" + port + "\",\"" + user + "\",\"" + pass + "\"");

evaluates to 评估为

"jdbc:mysql://10.0.0.188:3306","dudug","qazqaz"

This is one String , even if it looks like a normal parameters list. 这是一个 String ,即使它看起来像一个普通的参数列表。 Eg this gets called: 例如,这称为:

DriverManager.getConnection("\"jdbc:mysql://10.0.0.188:3306\",\"dudug\",\"quazquaz\"");

and not 不是

DriverManager.getConnection("jdbc:mysql://10.0.0.188:3306", "dudug", "qazqaz");

What you want to do is: 您想要做的是:

String url = "jdbc:mysql://" + addr + ":" + port;
DriverManager.getConnection(url, user, password);

下载mysql-connector-java.jar并将其添加到您的类路径中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM