将在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="https://img-blog.csdn.net/20150412001326383?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZW1pbHlSUg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
点击服务管理==》管理mySQL,进入网页版、操作你的数据库啦~~~
好啦~~~今天就到这里,记住,每一次的错误都是在为你的成功铺路,最重要是学会自己分析问题、解决问题。