我花了很多时间试图弄清楚如何通过我的Java项目连接到Openshift的mysql数据库。我创建了MySQL数据库,PhpMyAdmin和TomCat 7 cartriges。我配置了Putty,我甚至设置了ssh(不知道为什么)并获取这些信息:
environment variables with Ruby or PuTTY terminal
问题在于JDBC,我收到ERROR通信链接失败...我在Eclipse中使用jdbc登录信息,请参阅下面的内容:
patientid | admitdate | status | guid | Filter
1 | 2013-09-25 | 1 | 50 | update
1 | 2014-03-25 | 1 | 11 | insert
1 | 2014-04-09 | 1 | 51 | update
1 | 2015-01-22 | 1 | 52 | update
2 | 2015-12-13 | 1 | 53 | update
2 | 2014-10-10 | 1 | 15 | insert
3 | 2015-10-11 | 1 | 55 | update
3 | 2015-12-27 | 1 | 17 | insert
4 | 2011-01-01 | 1 | 27 | update
4 | 2011-01-01 | 1 | 20 | insert
最后:
SELECT p.patientid , p.admitdate, p.status,
CASE WHEN datediff(day, p.admitdate, ps.startdate) < 30
THEN 'Update'
ELSE 'Insert'
END AS filter,
CASE WHEN datediff(day, p.admitdate, ps.startdate) < 30
THEN ps.guid
ELSE p.guid
END AS guid
FROM (SELECT , row_number() OVER(PARTITION BY patientid ORDER BY flag) AS rowno
FROM patient) AS p
OUTER APPLY (SELECT TOP 1 ps.*
FROM patientstatus ps
WHERE ps.patientid=p.patientid
AND ps.startdate >= p.admitdate
AND ps.status = 2
ORDER BY ps.check) AS ps
WHERE p.status = 1
AND p.rowno = 1
我的代码在UwAmp localhost上工作,但无法连接到Openshift。请帮助我,这是错的。
答案 0 :(得分:1)
您使用System.getenv
错误地(并且不成功)。
System.getenv
用于获取环境变量的值。调用System.getenv("gxhaixUc9V94");
并未提供密码,而是null
,因为很可能没有名称为gxhaixUc9V94
的环境变量。
为什么你要使用getenv!?
试试这个:
String USERNAME = "adminwmxLs6V";
String PASSWORD = "gxhaixUc9V94";
String DB_NAME = "nautilius";
String URL = "127.8.238.2:3306" + "/" + DB_NAME;
// [...]
connection = DriverManager.getConnection("jdbc:mysql://" + URL, USERNAME , PASSWORD);
答案 1 :(得分:1)
首先,在您的应用程序12 Factor: Configuration中包含用户和密码等任何敏感信息都是不好的做法,因此我强烈建议不要直接在代码中使用用户/密码/ db名称。此外,您不应该在任何地方发布真实凭证,这是一个很大的安全风险。
现在回答您的问题,Openshift提供包含这些值的环境变量。我没有在Openshift上尝试过MySQL数据库,但确实使用过MongoDB,它给了我以下变量:
$OPENSHIFT_MONGODB_DB_USERNAME
$OPENSHIFT_MONGODB_DB_PASSWORD
$OPENSHIFT_MONGODB_DB_DATABASE
$OPENSHIFT_MONGODB_DB_HOST
$OPENSHIFT_MONGODB_DB_PORT
所以它可能会给你相同的MySQL变量,为了确保你可以ssh
进入你的应用程序并检查环境变量,使用rhc工具,你可以这样做:
rhc ssh -a <app-name> [-l <username>]
其中<app-name>
表示openshift中应用程序的名称,即您首次创建应用时使用的名称。
或者,如果您没有将rhc工具配置为使用默认的openshift凭据,或者如果您使用多个帐户,则必须通过-l
和您的Openshift登录提供帐户名称。发出命令后,如果密码未存储在会话中,也会要求您输入密码。
一旦你的应用程序有一个shell,.env
目录存储系统环境变量,作为文件,每个文件代表一个变量,文件名是变量名,文件内容是变量值
ls .env
将列出所有环境变量,因此请查找以OPENSHIFT_MYSQL_
开头的所有文件,因为这些文件包含具有连接到数据库的凭据的环境变量的值。
最后,您可以将这些变量用于:
System.getenv('OPENSHIFT_MYSQL_DB_USERNAME')
System.getenv('OPENSHIFT_MYSQL_DB_PASSWORD')
// and so on with all the variables that you need
更新:
还有rhc env-list
命令列出了应用程序中的所有环境变量,这也需要-a
和-l
个参数。
修改:
编辑了几个部分以消除混淆并完成答案。
答案 2 :(得分:0)
我有类似的问题。当我在我的本地机器上测试并连接到我的localhost mysql数据库时,一切正常,但是当我将它部署到Openshift时,它无法工作。
最终我发现问题是Openshift mysql数据库中的表名以小写字母开头,在我的java代码中,我的查询是用表名的大写首字母写的,例如。 '用户',而不是'用户'。我的本地数据库设置与Openshift数据库相同,但问题是我的本地是Windows并且不区分大小写,而Openshift服务器是。见这里:Are table names in MySQL case sensitive?
“Windows中的数据库和表名称不区分大小写,并且在大多数Unix中都区分大小写。”