目标:父类处理数据库连接及操作,并且将返回值Json标准化
1.父类
package com.fivesuo.zkapp.webservice;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import com.fivesuo.zkapp.Constant;
import com.fivesuo.zkapp.entity.CommonEntity;
public class BaseWebservice extends Constant{
private boolean onOff=false;//only if onOff is true, other method can be called
Connection conn = null;
DataSource ds = null;
ResultSet rs =null;
Statement stmt = null;
CommonEntity ret=null;
Logger log = null;
List<Object> list=new ArrayList<Object>();
String sql;
public BaseWebservice(){
log=Logger.getLogger(this.getClass().getName());
}
/**
* initial the webservice
* @return
* ERCODE:when error
* NORMAL:when normal
*/
public CommonEntity init(){
ret=new CommonEntity();
ret.setResult(NORMAL);
try{
javax.naming.Context initCtx = new InitialContext();
ds =(DataSource)initCtx.lookup(POOL);
conn = ds.getConnection();
stmt = conn.createStatement();
onOff=true;
}catch(NamingException e){
ret.setResult(ERCODE);
log.severe(e.getMessage());
}catch(SQLException e){
ret.setResult(ERCODE);
log.severe(e.getMessage());
}
return ret;
}
public String getSql(){
return sql;
}
public void execute(){
if(!onOff)return;
try{
stmt.execute(sql);
ret.setResult(NORMAL);
}catch(SQLException e){
close();
ret.setResult(ERCODE);
log.severe(e.getMessage());
close();
}
}
public void executeLargeUpdate(){
long num;
if(!onOff)return;
try{
num=stmt.executeLargeUpdate(sql);
ret.setResult(Long.toString(num));
}catch(SQLException e){
close();
ret.setResult(ERCODE);
log.severe(e.getMessage());
close();
}
}
public void executeUpdate(){
int num;
if(!onOff)return;
try{
num=stmt.executeUpdate(sql);
ret.setResult(Integer.toString(num));
}catch(SQLException e){
close();
ret.setResult(ERCODE);
log.severe(e.getMessage());
close();
}
}
public void executeQuery(){
if(!onOff)return;
try{
rs=stmt.executeQuery(sql);
ret.setResult(NORMAL);
}catch(SQLException e){
ret.setResult(ERCODE);
log.severe(e.getMessage());
close();
}
}
/**
* get the max rows
* @return
* -1 means no result
*/
public int getMaxRows(){
if(!onOff)return -1;
try{
ret.setResult(NORMAL);
return stmt.getMaxRows();
}catch(SQLException e){
ret.setResult(ERCODE);
log.severe(e.getMessage());
close();
}
return -1;
}
/**
* get the max rows
* @return
* -1 means no result
*/
public long getLargeMaxRows(){
if(!onOff)return -1;
try{
ret.setResult(NORMAL);
return stmt.getLargeMaxRows();
}catch(SQLException e){
ret.setResult(ERCODE);
log.severe(e.getMessage());
close();
}
return -1L;
}
public void SetSql(String sql){
this.sql=sql;
}
/**
* get the connection from the connection pool
* @return
*/
public Connection getConnection(){
return conn;
}
public void setConnection(Connection conn){
this.conn=conn;
}
/**
* get statement from the connection
* @return
*/
public Statement getStatement(){
return stmt;
}
public void setStatement(Statement stmt){
this.stmt=stmt;
}
/**
* get the Logger
* @return
*/
public Logger retLog(){
return log;
}
public void setLog(Logger log){
this.log=log;
}
public void close(){
if(!onOff)return;
log.info(this.getClass().getName()+":"+sql);
if(null!=rs){
try{
rs.close();
}catch (SQLException e) {
log.severe(e.getMessage());
}
rs=null;
}
if(null!=stmt){
try{
stmt.close();
}catch (SQLException e) {
log.severe(e.getMessage());
}
stmt=null;
}
if(null!=conn){
try{
conn.close();
}catch (SQLException e){
log.severe(e.getMessage());
}
conn=null;
}
return;
}
}
2.Constant 类
package com.fivesuo.zkapp;
public class Constant {
static protected final String ERCODE = "-1";
static protected final String NORMAL = "0";
static protected final String POOL="java:comp/env/jdbc/zkapp";
}
3.entity类
package com.fivesuo.zkapp.entity;
public class CommonEntity {
private String Result;
public String getResult(){
return Result;
}
public void setResult(String Result){
this.Result=Result;
}
}
4.使用方法
@Path("/CheckLoginNamePassword")
public class CheckLoginNamePassWord extends BaseWebservice{
@Context
HttpServletRequest request;
@Context
HttpServletResponse response;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Object getResult(@QueryParam("userId") String userId){
UserInfoEntity user;
log.info("weifaqiang:"+"started............");
init();
if(ret.getResult()==ERCODE){
close();
return ret;
}
sql ="select * from weian where userid="+userId;
executeQuery();
if(ret.getResult()==ERCODE){
close();
return ret;
}
try{
while(rs.next()){
user=new UserInfoEntity();
user.setUserId(rs.getString("userid"));
user.setPassword(rs.getString("password"));
user.setName(rs.getString("name"));
list.add(user);
}
}catch(SQLException e){
ret.setResult(ERCODE);
}
if(ret.getResult()==ERCODE){
close();
return ret;
}
return list;
}
5.简单说明
5.1.新建webservice类时,需要继承BaseWebservice
5.2.进行webservice初始化:init()
5.3.对execute cluster方法也进行了封装
5.4功能:
5.4.1.sql是父类变量,可以设定sql文
5.4.2.当有例外出现,父类ret类型返回值可以直接作为结果返回
5.4.3.将程序执行结果存入list,就可以标准Json格式返回