java JDBC无法连接到openshift上的mysql数据库
我设法用phpMyAdmin和其他工具在OpenShift上建立了MySQL数据库。 我被告知数据库的主机名和端口分别是$OPENSHIFT_MYSQL_DB_host和$OPENSHIFT_MYSQL_DB_port,我把它们放在我的上下文中。xml文件如下:
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/burgerjoint</param-value>
</context-param>
<context-param>
<param-name>user</param-name>
<param-value>admin******</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>*********</param-value>
</context-param>
设置连接的代码是:
public void contextInitialized(ServletContextEvent event) {
// Connect
String driver = event.getServletContext().getInitParameter(PARAM_DRIVER);
String url = event.getServletContext().getInitParameter(PARAM_URL);
String username = event.getServletContext().getInitParameter(PARAM_USERNAME);
String password = event.getServletContext()
.getInitParameter(PARAM_PASSWORD);
try {
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, username,
password);
event.getServletContext().setAttribute(ATTR_CONNECTION, connection);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
但问题是服务器上的连接是空的,我不明白为什么。我做错什么了吗?当我在localhost上尝试它时,代码可以工作。据我所知,我有所有必要的图书馆:
谢谢你的帮助:)
更新
我修改了连接代码如下:
{
if (connection != null) return connection;
try
{
Properties dbProperties = new Properties();
InputStream input = DatabaseUtil.class.getClassLoader().getResourceAsStream(DB_PROPERTIES_FILE);
dbProperties.load(input);
String url = "";
if (appIsDeployed)
{
String host = System.getenv("$OPENSHIFT_MYSQL_DB_HOST");
String port = System.getenv("$OPENSHIFT_MYSQL_DB_PORT");
String name = "burgerjoint";
url = "jdbc:mysql://" + host + ":" + port + "/" + name;
} else
{
url = dbProperties.getProperty(PARAM_URL);
}
String driver = dbProperties.getProperty(PARAM_DRIVER);
String username = dbProperties.getProperty(PARAM_USERNAME);
String password = dbProperties.getProperty(PARAM_PASSWORD);
Class.forName(driver);
connection = DriverManager.getConnection(url, username, password);
但它仍然提供空连接。System.getenv("$OPENSHIFT_MYSQL_DB_HOST")
和System.getenv("$OPENSHIFT_MYSQL_DB_PORT")
的值为空
# 1 楼答案
如果您使用的是MySQL盒带,则连接到数据库的信息位于应用程序的环境变量中。如果您使用的是JDBCpure,那么首先需要检索这些值. e、 g:
字符串url中的
jbossas
是模式。使用您的模式(burgerjoint
)进行更改# 2 楼答案
这是不正确的:
美元符号表示您认为将替换一个合适的主机和数据库名称,但事实并非如此
对主机名和数据库名进行编码以查看其是否有效,然后了解。属性文件将其外部化
# 3 楼答案
删除美元符号:
它会很好地工作(我在我的机器和OpenShift上测试了它)