开发者社区> 问答> 正文

使用CloudFoundry连接Mysql数据库出现问题 400 请求报错 

我在jsp页面中插入以下语句,为什么会出错呢?
错误如下:
javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
<% String str = ""; Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://localhost:10100/dabc98d7befac43df8d0bc7d69577718e" +   "?useUnicode=true&characterEncoding=gb2312&autoReconnect=true&failOverReadOnly=false"; Connection con= DriverManager.getConnection(url,"u7T3cy8R52Xun","pWJpeuwrSiChH"); Statement smt=con.createStatement(); String sql = "select * from admins"; ResultSet rs = smt.executeQuery(sql); while(rs.next()) {  str = rs.getString(1);
out.print(str); }
%>

但是在java文件中直接执行下列语句没问题啊.
String str = ""; Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://localhost:10100/dabc98d7befac43df8d0bc7d69577718e" +   "?useUnicode=true&characterEncoding=gb2312&autoReconnect=true&failOverReadOnly=false"; Connection con= DriverManager.getConnection(url,"u7T3cy8R52Xun","pWJpeuwrSiChH"); Statement smt=con.createStatement(); String sql = "select * from admins"; ResultSet rs = smt.executeQuery(sql); while(rs.next()) {  str = rs.getString(1);
System.out,print(str);
}
这是为什么呢?是CloudFoundry的问题,还是我这边的问题啊?求高手赐教,感激不尽。

展开
收起
kun坤 2020-05-29 23:24:28 707 0
1 条回答
写回答
取消 提交回答
  • 请参见我的cf学习笔记,看看能不能对你有所帮助
    http://my.oschina.net/kzhou/blog/99134 ######回复 @曹波 : 多交流、相互学习######嗯,很有帮助啊,原来我通过service通道获取的那个mysql的用户名跟密码不对啊,那个应该是用于连接数据库建表所用到的用户名跟密码吧?跟程序中用的不一样,用你的那个jsp页面获取的那个才是正确的,谢谢了,问题解决了。######贴的代码无法确定...######工程里就这些代码啊?前者是放在jsp页面中的,后者是直接在一个java类中执行的。但是在jsp页面中的那个出现问题。###### 因为你的url pwd name写死了……是要获取动态的,虽然你创建service复制下来的是这些数据。

    JSONObject credentials = new JSONObject(VCAP_SERVICES)
     .getJSONArray("mysql-5.1").getJSONObject(0).getJSONObject("credentials");
    ######原来CF给的mysql可以有两个用户名跟密码啊。问题解决了,谢谢######你的意思是用户名跟密码是动态分配的?我试了好几次都是一样的啊。而且为什么直接在java代码中执行没问题呢。但是在jsp页面中执行就不行呢。你上面写得那个JSONObject是获取什么的?VCAP_SERVICES这个变量又是哪儿来的啊?######要获取他们的DS######怎么获取啊?能举个例子吗?######
    RdbmsServiceInfo mysql = new CloudEnvironment().getServiceInfo("lewole", RdbmsServiceInfo.class);
    RdbmsServiceCreator ds = new RdbmsServiceCreator();
    dataSource = ds.createService(mysql);
    ######谢谢###### 用VCAP_SERVICES参数得到的连接信息用Navicat for mysql连接不上,当open Tunnel mysql时得到的信息能连接还能操作数据库。数据源要选择哪个?是用用VCAP_SERVICES参数得到的吗?######嗯,另一个只是方便让你操作数据库。
    2020-05-29 23:24:36
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像