51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 5492|回复: 3
打印 上一主题 下一主题

关于数据库查重问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2005-6-9 12:29:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
相信大家对平凡的查询数据库都有很深的认识,这里说的是查询的思路是什么的问题。遇到在数据库中查重怎么来做。这里一个例子:“在同一个table中有‘张三’,‘张三33333’,‘张三4444’。那么要求把属于‘张三’的人都找出来并把这些‘张三insert到另外一张表里。’”。对于这个问题是怎么来处理呢?因为数据库中有很多人的名字,最快的方法是什么呢?这里可以采用从数据库中第一个数据取出来,然后再对这些数据进行比较查重。比较完第一个后再比较第二个。这样依次比较。下面我举一个实际的例子。简单用jsp连接数据库查重。





index.jsp




<%@ page import="java.io.*,
                                java.util.*,
                                java.sql.*"
%>


<%@ include file="function.jsp"%>

<%@page contentType="text/html; charset=gb2312"%>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="rogId" content="FrontPage.Editor.Document">
<title>New Page 1</title>
</head>





<body>


<table border="1" width="100%">
  <tr>
    <td width="50%">
      <p align="center">id</td>
    <td width="50%">
      <p align="center">name</td>
  </tr>
  <%

          try{
          String  sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
          Class.forName(sDBDriver);
         
          String sConnStr="jdbc:microsoft:sqlserver://172.31.11.211:1433;DatabaseName=webflow";
          
          String username="sa";
          String password="ecseflow2005";          
          
          
         Connection conn = DriverManager.getConnection(sConnStr,username,password);               
        java.sql.Statement stmt=conn.createStatement();

         String sql = "select * from bakkk";
         ResultSet rs = stmt.executeQuery(sql);
         
         
         

         
         
         while(rs.next()){
         
               

                String str = rs.getString("name").trim();
       
       
try{




               
                if(isRepeat22(str.substring(0,2))){

                System.out.println("************************");
                System.out.println(str);       
                System.out.println("***********************");               
                //addStr(rs.getString(1),rs.getString(2));       
                update111(rs.getString("id"),rs.getString("name"));

         
         
         }
         
                
         
         

else{

         
  %>
  
  

  <%
                     }

}catch(SQLException ex){

System.out.println(ex.getMessage());
}finally{
                try{
                        if(stmt2 != null) {stmt2.close();
                        if(conn2 != null) conn2.close();               
                }catch(Exception e){
                        System.out.println(e.getMessage());
                }
                         }
        }
                }catch(Exception e){
                 
                          System.out.println(e.getMessage());
                  }finally{

                try{

                        if(rs != null) rs.close();
                        if(stmt != null) stmt.close();
                        if(conn != null) conn.close();

                        }catch(Exception e){

                        System.out.println(e.getMessage());
        }


}
  
  %>
</table>


</body>

</html>




function.jsp




<%@ page import="java.util.StringTokenizer,
                 java.text.SimpleDateFormat,
                 java.sql.*"%>
<%!


        public boolean isRepeat22(String str) throws Exception{
          boolean f = false;       
        try{




         String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
          Class.forName(sDBDriver);
          
        String sConnStr="jdbc:microsoft:sqlserver://172.31.11.211:1433;DatabaseName=webflow";
          
          String username="sa";
          String password="ecseflow2005";
         Connection conn = DriverManager.getConnection(sConnStr,username,password);
         java.sql.Statement stmt=conn.createStatement();

          
         
                       
         // java.sql.Statement stmt=conn.createStatement();
          String sql = "select count(*) from bakkk where name like '%"+str+"%'";
          ResultSet rs = stmt.executeQuery(sql);
          if(rs.getInt(1) > 2){
           f = true;       
        }else{
           f = false;       
          }       
        }catch(Exception e){

                System.out.println(e.getMessage());
                }
        return f;
        }       



        public void addStr(String str1,String str2) throws Exception{
        try{
          String  sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
          Class.forName(sDBDriver);
          
          String sConnStr="jdbc:microsoft:sqlserver://172.31.11.211:1433;DatabaseName=webflow";
          
          String username="sa";
          String password="ecseflow2005";
          
         
          Connection conn2 = DriverManager.getConnection(sConnStr,username,password);       
          java.sql.Statement stmt2=conn2.createStatement();
          String sql2 = "insert into bakkk1 (id,name) values ("+str1+","+str2+")";
          stmt2.executeUpdate(sql2);
          conn2.commit();       
       
          
        //  System.out.println(sql2);
          }catch(Exception ex){
                System.out.println(ex.getMessage());
                }

        }                                                  


        public void update111(String str1,String str2) throws Exception{
try{
          String  sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
          Class.forName(sDBDriver);
          
          String sConnStr="jdbc:microsoft:sqlserver://172.31.11.211:1433;DatabaseName=webflow";
          
          String username="sa";
          String password="ecseflow2005";       
          String sql = "update users set UFD6 = '"+str1+"' where NAME like '%"+str2+"%'";
          Connection conn = DriverManager.getConnection(sConnStr,username,password);       
          java.sql.Statement stmt=conn.createStatement();        
          stmt.executeUpdate(sql);
          conn.commit();       
          }catch(Exception ex){
                System.out.println(ex.getMessage());
                }
        }


%>










基本思路就是这样,代码运行可能会有点小问题,请大家发现指出。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏

该用户从未签到

2#
发表于 2005-6-14 09:09:11 | 只看该作者
table1  
xh      xm
1001  1
1002  2
2001  3
把所有的100开头的学号插入到TABLE2中


insert into  table2
select * from table1 where table1.xh like '%100%'

这是一次性插入


如果一个一个取,写个存储过程,用游标就应该可以了
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2005-7-1 10:17:08 | 只看该作者
用模糊查询就可以吧.
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-3-6 15:14:16 | 只看该作者

回复 #2 wzb521 的帖子

如果表2是新表,使用select into 语句将一张表得数据析取到另一张新表中,
select  xm
into   table2
from  table1
where  table1.xh like '100%'

如果表2是已存在得表,则使用 insert into 命令将一个表得数据添加到另一个表中,
insert into  table2
select  xm
from table1
where  table1.xh like '100%'
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-5 13:54 , Processed in 0.072197 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表