无线&移动互联网技术研发

换位思考·····
posts - 19, comments - 53, trackbacks - 0, articles - 283
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
这个是我在wap项目中用到的DB BEAN。
这个看起来,使用起来都会很方便。感觉封装的很好,其实不然。这里用的并不是SQL预编译,PreparedStatement。每每在使用的时候都是直接合成后送到这里。安全性非常的不好。很容易引起SQL注入性侵入。另外这样写的通用性非常的不好。表现的最典型的就是update。下面先看做法,再贴两个使用的实例:


package com.yixun.wap;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/** *//** *//** *//**
 * 
 * @descripte get DB connection
 * 
@author Gavin.lee
 * @date 2009-5-18下午03:11:34
 * 
@version 1.0
 *
 
*/


public class DBBean {
    
private String Driver = "";
    
private String Url ="";
    
private String Username ="";
    
private String Password ="";
    
public CallableStatement cstmt;
    
private Statement statement = null;
    
private Connection conn = null;
    
private ResultSet rs = null;

    
public DBBean() {
        Properties prop 
= new Properties();
        
try {
            
//load class by absolute path
            InputStream is = Class.forName("com.yixun.wap.DBBean").getResourceAsStream("/dbsource.properties");
            prop.load(is);
            
if (is != null{
                is.close();
            }


            Driver 
= prop.getProperty("Driver");
            Url 
= prop.getProperty("Url");
            Username 
= prop.getProperty("Username");
            Password 
= prop.getProperty("Password");

            System.setProperty(
"jdbc.drivers", Driver);
            Class.forName(Driver);
            conn 
= DriverManager.getConnection(Url,Username,Password);
            
        }
 catch (ClassNotFoundException e) {
            System.out.println(
"Unable to load driver.\n" + e.getMessage());
        }
 catch (IOException e) {
            System.out.println(
"Unable to read File stream.\n" + e.getMessage());
        }
 catch (SQLException e) {
            System.out.println(
"Unable to get the connection.\n" + e.getMessage());
        }

    }

    
    
public Connection getConnection(){             
        
return (conn);
    }

    
    
public ResultSet executeQuery(String sql) {
        rs 
= null;
        
try {
            statement 
= conn.createStatement();
            rs 
= statement.executeQuery(sql);
        }
 catch (SQLException ex) {
            System.err.println(
"aq.executeQuery: " + ex.getMessage());
            System.err.println(
"aq.executeQuerystrSQL: " + sql);
        }

        
return rs;
    }

    
    
public void executeUpdate(String sql) {
        
try {
            statement 
= conn.createStatement();
            statement.executeUpdate(sql);
        }
 catch (SQLException ex) {
            System.err.println(
"aq.executeUpdate: " + ex.getMessage());
            System.err.println(
"aq.executeUpadatestrSQL: " + sql);
        }

    }

    
    
public ResultSet executeWapProc(String procName, Object[] params) {
        rs 
= null;
        
try {
            
int index = 0;
            cstmt 
= conn.prepareCall(procName);
            
for (Object obj : params) {
                index
++;
                cstmt.setObject(index, obj);
            }

            rs 
= cstmt.executeQuery();
        }
 catch (SQLException ex) {
            System.err.println(
"NewsDbBean**:" + ex.getMessage());
        }

        
return rs;
    }


    
public void destroy() {
        
try {
            
if(statement != null)
            statement.close();
            
if(cstmt != null)
            cstmt.close();
            conn.close();
        }
 catch (Exception e) {
            e.printStackTrace();
        }

    }

}




dbsource.properties文件:
#dbsource.properties
Driver = net.sourceforge.jtds.jdbc.Driver
Url = jdbc:jtds:sqlserver://121.14.110.49:1433/wubai_wapcp
Username = wap
Password = esunxyz500wan!^wap



使用实例:

DBBean db  = new DBBean();
String sql1 
= "select cpusername,cppassword from logininterface where cpsid='"+ this.ck + "'";

ResultSet rs 
=null;
  
try{
   rs 
= db.executeQuery(query);
   
while(rs.next()){
    un
=rs.getString("cpusername");
    pw
=rs.getString("cppassword");
   }

   
  }
catch(Exception e){
   System.err.println(e.getMessage());
  }


String sql2 
= "insert into BuyService values('"+un+"','"+pw+"','"+0+"','"+this.lotid+"','"+this.playid+"','"+this.expect+"','"+this.allmoney+"','"+this.zhushu+"','"+this.beishu+"','"+this.title+"','"+this.codes+"','"+this.ck+"','"+this.dest_src+"','"+this.R_des+"','"+this.R_um+"','"+this.R_id+"',getdate(),'"+super.getHZFID()+"')";
try{
  db.executeUpdate(inset);
  }
catch(Exception e){
   e.printStackTrace();
  }
finally{
   rs
=null;
   db.destroy();
  }

存储过程的使用:"在sql server 中:exec wap_biz_addContentClick'001'"
    public void addClick(String id){
        NewsDbBean dbBean 
= new NewsDbBean();
        Object[] ob 
= new Object[1];
        ob[
0]=id;
        
try {
            String procName
="{call wap_biz_addContentClick(?)}";
            dbBean.executeWapProc(procName, ob);
        }
 catch (Exception e) {
            e.printStackTrace();
        }
finally{
            dbBean.destroy();
        }

    }

update这里我就不写了,操作类似上面,就因为它没有使用预编译sql,每需要一次跟新,就需要一条sql语句。所以通用性非常不好。

只有注册用户登录后才能发表评论。


网站导航: