Java 使用JDBC连接到Openshift数据库
我花了很多时间试图弄清楚如何通过Java项目连接到Openshift的mysql数据库。我已经创建了MySQL数据库、PhpMyAdmin和TomCat 7 cartriges。我配置了Putty,甚至设置了ssh(不知道为什么),并获得了以下信息: 问题是JDBC,我收到错误通信链接失败。。。我在Eclipse中使用jdbc的登录信息,请参见以下内容:Java 使用JDBC连接到Openshift数据库,java,mysql,jdbc,javafx,openshift,Java,Mysql,Jdbc,Javafx,Openshift,我花了很多时间试图弄清楚如何通过Java项目连接到Openshift的mysql数据库。我已经创建了MySQL数据库、PhpMyAdmin和TomCat 7 cartriges。我配置了Putty,甚至设置了ssh(不知道为什么),并获得了以下信息: 问题是JDBC,我收到错误通信链接失败。。。我在Eclipse中使用jdbc的登录信息,请参见以下内容: String USERNAME = System.getenv("admixxxxxxxx"); String PASSWORD = Sys
String USERNAME = System.getenv("admixxxxxxxx");
String PASSWORD = System.getenv("gxxxxxxxxxxx");
String DB_NAME = System.getenv("nautxxxx");
String URL = System.getenv("127.x.xxx.x:3306") + "/" + DB_NAME;
最后:
connection = DriverManager.getConnection("jdbc:mysql://" + URL, USERNAME , PASSWORD);
我的代码在UwAmp localhost上工作,但无法连接到Openshift。请帮助我,出了什么问题。您使用的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);
首先,在应用程序中包含用户和密码等敏感信息是一种不好的做法,因此我强烈建议不要直接在代码中使用user/password/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>]
将列出所有环境变量,因此查找所有以OPENSHIFT\u MYSQL\u
开头的文件,因为这些文件包含环境变量的值以及连接到数据库的凭据
最后,您可以将这些变量用于:
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
参数
编辑:
编辑了几个部分以消除混淆,并进一步完成了答案。我也遇到过类似的问题。当我在本地机器上测试并连接到本地主机mysql数据库时,一切都很好,但当我将其部署到Openshift时,它就不起作用了
最终我发现问题在于Openshift mysql数据库中的表名以小写字母开头,而在我的java代码中,我的查询是以大写字母开头的,例如“Users”,而不是“Users”。My local db的设置与Openshift db相同,但问题是My local是Windows,不区分大小写,而Openshift服务器是。请看这里:
“数据库和表名在Windows中不区分大小写,在大多数Unix中也不区分大小写。”为什么使用System.getenv()?因为我搜索并找到了这些代码示例,我不知道为什么它必须是Sys.getenv(),你应该质疑谷歌给你带来了什么,否则你将成为复制粘贴的受害者。要么研究使用的方法,要么简单地调试或打印字符串值,看看它们包含什么。谢谢你的评论,我很荣幸能收到这样的命令,我只是在没有时间理解真正的意思的时候这样做,但我需要知道。即将在我们学院上课,所以没有太多时间,只是有很多工作……f1sh,我试了很多次,想在浏览器中打开那个链接,检查它是否发送到某个页面,例如:127.8.238.2:3306/nautilius,回答:这个页面不可用。也许问题在于,我是否需要从数据库中输入一些信息?但我认为不,所有信息都是正确的,错误不可能是错误的。在浏览器中打开该“链接”不会显示任何内容,因为端口3306上的sql实例不讲http。这不是一个有效的测试…感谢你的明确回答,是的,我认为在本地主机上使用类似的链接不是一个好主意,是的,但对普通主机来说不是。我在官方Openshift页面上发现我确实可以使用rhc工具,但你能告诉我为什么rhc ssh-als.env
给我所有的环境变量,但不是$OPENSHIFT\u MYSQL\u xxx
它给我的只是OPENSHIFT\u MYSQL\u DB\u主机,OPENSHIFT\u MYSQL\u DB\u端口
等等。。。。我想那是,因为我没有得到第一个命令,不知道为什么。最后一个命令没有找到:D。我会尝试修复它。更新:可能我输入的命令有误,我是这样做的:rhcsh-a nautilius
,或者rhcsh-a
或者rhcsh-a
@salvadorjuan,谢谢你的建议,不要在公共场合包含任何明智的信息,如用户和密码,我很高兴了解并得到你的帮助。当我达到10个徽章时,我将编辑帖子,因为我是新来的。如果您没有将rhc工具配置为具有默认凭据,那么必须添加一个新参数rhc ssh-a-l
,可能这就是它不起作用的原因,而应用程序名称只是应用程序名称,没有
,并且您不需要包含整个域。是的,当我说$OPENSHIFT\u MYSQL\u xxx
时,xxx
是由于代表所有选项的惰性键入,而$
是指它是一个环境变量,稍微编辑了一下anser,试图进一步澄清:)
System.getenv('OPENSHIFT_MYSQL_DB_USERNAME')
System.getenv('OPENSHIFT_MYSQL_DB_PASSWORD')
// and so on with all the variables that you need