将在myeclipse写好的web项目发布到新浪云服务器上,需要修改一些文件以及代码,我们是以tomcat为服务器的,数据库选用的是oracle,但是新浪云采用的是 mySQL,很显然,使用JNDI配置Tomcat的数据连接池是用不了的,基于oracle的简单sql语句,mySQL也可以运行,但是分页、伪列、序列、都是不被支持的,将oracle语句转为mySQL语句,请看链接: <a target=_blank href="http://http//user.qzone.qq.com/377513462?ptlang=2052" target="_blank" style="font-family: Arial, Helvetica, sans-serif;">oracle语句转mysql语句所遇到的问题</a>
第一期项目看来没让我受够教训,这次居然直接在源码上改的,忘了备份,导致每次需要看页面都要上传新浪云,没豆子了呀~~~希望大家谨记。
这个是基于oracle数据库的查询语句,将mySQL转换回来的时候,只记得改语句,忘了参数的位置和值的计算,报出错误,无效的列索引。看了好一会才注意到是这里的问题。
<pre name="code" class="java">int max=pagesize*pageno; int min=0; if(pageno!=1){ min=max-1; } String sql="select topicid,title,content,publishtime,modifytime,tbl_topic.userid,boardid,uname from tbl_topic join tbl_user on tbl_user.userid=tbl_topic.userid where boardid=? limit ?,?"; List<Object> params=new ArrayList<Object>(); params.add(bid); params.add(min); params.add(max);
mySQL的语句简单明了一些,特别是分页,limit 就解决了需要依靠伪列来解决同样问题的oracle 。
//分页查询 topic 信息 public List<Topic> findlist(Integer bid, Integer pageno,Integer pagesize) { //注意这里的max 和 min 与 mySQL 不一致 List<Topic> list=null; int max=pagesize; int min=(pageno-1)*pagesize+1; String sql="select * from (select A.*,ROWNUM RN from (select topicid,title,content,publishtime,modifytime,tbl_topic.userid,boardid,uname from tbl_topic join tbl_user on tbl_user.userid=tbl_topic.userid where boardid=?) A where ROWNUM <=? ) where RN >=?"; List<Object> params=new ArrayList<Object>(); params.add(bid); params.add(max); params.add(min); try { list=db.findMutiObject(Topic.class, sql, params); if(list!=null){ for(Topic c:list){ String topicid=c.getTopicid(); sql="select count(*) from tbl_reply where topicid=? "; params.clear(); params.add(topicid); int replycount=(int)db.findDouble(sql, params); c.setReplycont(replycount); } } } catch (Exception e) { throw new RuntimeException(e); } return list; }
--分页查询bid 对应的 所有topic 和topic对应的发帖人 select * from ( select A.*,ROWNUM RN from ( select topicid,title,content,publishtime,modifytime,tbl_topic.userid,boardid,uname from tbl_topic join tbl_user on tbl_user.userid=tbl_topic.userid where boardid=7 ) A where ROWNUM <=3 ) where RN >=1;
好了,上面是从新浪云转为 tomcat的小问题解决。下面我们看如何将tomcat服务器上的应用发布到云端。新浪云 文档中心:
SAE的MySQL数据库提供了主从数据库,我们可以向主数据库写数据,同时从从库里面读取数据。你可以使用原生态的JDBC来操作数据库,同样你也可以使用hibernate这种持久层框架来操作数据库。
下面给出两个JDBC操作数据库的例子
// 使用主库写数据 使用SaeUserInfo提供的静态方法获取应用的AccessKey和SecretKey String username=SaeUserInfo.getAccessKey(); String password=SaeUserInfo.getSecretKey(); String driver="com.mysql.jdbc.Driver"; Class.forName(driver).newInstance(); Connection con=DriverManager.getConnection(url,username,password); // 使用从库读数据 String URL="jdbc:mysql://r.rdc.sae.sina.com.cn:3307/app_myappname"; String sql = "SELECT * FROM app_table"; // 通过SaeUserInfo提供的静态方法获取应用的access_key和secret_key String Username=SaeUserInfo.getAccessKey(); String Password=SaeUserInfo.getSecretKey(); String Driver="com.mysql.jdbc.Driver"; Class.forName(Driver).newInstance(); Connection con=DriverManager.getConnection(URL,Username,Password);
<img src="http://img.blog.csdn.net/20150412001326383?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZW1pbHlSUg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
点击服务管理==》管理mySQL,进入网页版、操作你的数据库啦~~~
好啦~~~今天就到这里,记住,每一次的错误都是在为你的成功铺路,最重要是学会自己分析问题、解决问题。
时间: 2024-10-26 22:37:36