control userpasswords2实现winXP自动登录

       最近在看设计模式,为了练练手,写了个采用策略模式的数据库操作,可完成插入,删除,更新操作,查询的操作似乎有点困难,主要是其他操作都不需要返回值,而查询是要返回值的,策略模式好像需要返回值类型必须相同(或全无返回值),因为是通过Context统一调用操作方法的,即操作方法必须相同,不知道有没有好的解决办法,希望高手能给些指点,先谢了。

数据库sql Server,库:lesson,表:test,项:id(int primary key),name(varchar),age(int)
代码不算难,所有就没写什么注释
DataBaseContext.java类:
package  com;

import  java.util.Map;

public   class  DataBaseContext  {
  DataBaseSuper dbs;
  
public void setOperate(DataBaseSuper dbs){
    
this.dbs=dbs;
  }

  
public void excuteOperate(){
    
this.dbs.operate();
  }

}
DataBaseSuper.java类:
 
package  com;

import  java.sql.Connection;
import  java.sql.Statement;
import  java.sql.DriverManager;
import  java.sql.ResultSet;
import  java.util.Map;
import  java.util.Iterator;
import  java.util.Map.Entry;

public   abstract   class  DataBaseSuper  {
  Connection conn;
  Statement stmt;
  
public void openDB() throws Exception{
    Class.forName(
"com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
      String url 
=
          
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=lesson";
      String user 
= "sa";
      String password 
= "123";
      conn 
= DriverManager.getConnection(url, user, password);
      stmt 
= conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                  ResultSet.CONCUR_UPDATABLE);
  }

  
public void closeDB() throws Exception{
    stmt.close();
    conn.close();
  }

  
public abstract void operate();//具体完成操作的方法
}

class  Insert  extends  DataBaseSuper {
  Map map;
  
public Insert(Map map){
    
this.map=map;
  }

  
public void operate(){
    
try {
      openDB();
      String s1
="";
      String s2
="";
      Iterator iterator
=map.entrySet().iterator();
      
while(iterator.hasNext()){
        Map.Entry entry
= (Map.Entry)iterator.next();
        String key
=(String)entry.getKey();
        String value
=(String)entry.getValue();
        s1
+=key+",";
        s2
+="'"+value+"'"+",";
      }

      s1
=s1.substring(0,s1.length()-1);
      s2
=s2.substring(0,s2.length()-1);
      String sql
="insert into test("+s1+") values("+s2+")";
      stmt.executeUpdate(sql);
      closeDB();
    }

    
catch (Exception ex) {
      ex.printStackTrace();
    }

  }

}

class  Delete  extends  DataBaseSuper {
  Map map;
  
public Delete(Map map){
    
this.map=map;
  }

  
public void operate(){
    
try {
      openDB();
      String s
="";
      Iterator iterator
=map.entrySet().iterator();
      
while(iterator.hasNext()){
        Map.Entry entry
= (Map.Entry)iterator.next();
        String key
=(String)entry.getKey();
        String value
=(String)entry.getValue();
        s
+=key+"='"+value+"' and ";
      }

      s
=s.substring(0,s.length()-5);
      String sql
="delete from test where "+s;
      stmt.executeUpdate(sql);
      closeDB();
    }

    
catch (Exception ex) {
      ex.printStackTrace();
    }

  }

}

class  Update  extends  DataBaseSuper {
  
int id;
  Map map;
  
public Update(int id,Map map){
    
this.id=id;
    
this.map=map;
  }

  
public void operate(){
    
try {
      openDB();
      String s
="";
      Iterator iterator
=map.entrySet().iterator();
      
while(iterator.hasNext()){
        Map.Entry entry
= (Map.Entry)iterator.next();
        String key
=(String)entry.getKey();
        String value
=(String)entry.getValue();
        s
+=key+"='"+value+"',";
      }

      s
=s.substring(0,s.length()-1);
      String sql
="update test set "+s+" where id='"+id+"'";
      stmt.executeUpdate(sql);
      closeDB();
    }

    
catch (Exception ex) {
      ex.printStackTrace();
    }

  }

}

下面是一个测试类,没有用反射实现(下回有空再实现一下吧,呵呵)

Test.java
 
import  java.util.Map;
import  java.util.HashMap;

public   class  Test  {
  
public static void main(String args[]){
    DataBaseContext dbc
=new DataBaseContext();
    Map map
=new HashMap();
    map.put(
"name","丁丁");
    map.put(
"age","21");
    dbc.setOperate(
new Insert(map));
    
int id=1;
    map.put(
"age","24");
    dbc.setOperate(
new Update(id,map));
    map.put(
"name","丁丁");
    dbc.setOperate(
new Delete(map));
    dbc.excuteOperate();
  }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值