Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JDBC连接到Openshift数据库_Java_Mysql_Jdbc_Javafx_Openshift - Fatal编程技术网

Java 使用JDBC连接到Openshift数据库

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

我花了很多时间试图弄清楚如何通过Java项目连接到Openshift的mysql数据库。我已经创建了MySQL数据库、PhpMyAdmin和TomCat 7 cartriges。我配置了Putty,甚至设置了ssh(不知道为什么),并获得了以下信息:

问题是JDBC,我收到错误通信链接失败。。。我在Eclipse中使用jdbc的登录信息,请参见以下内容:

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-a
ls.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