51Testing软件测试论坛

标题: 关于数据库查重问题 [打印本页]

作者: huominghui    时间: 2005-6-9 12:29
标题: 关于数据库查重问题
相信大家对平凡的查询数据库都有很深的认识,这里说的是查询的思路是什么的问题。遇到在数据库中查重怎么来做。这里一个例子:“在同一个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());
                }
        }


%>










基本思路就是这样,代码运行可能会有点小问题,请大家发现指出。
作者: wzb521    时间: 2005-6-14 09:09
table1  
xh      xm
1001  1
1002  2
2001  3
把所有的100开头的学号插入到TABLE2中


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

这是一次性插入


如果一个一个取,写个存储过程,用游标就应该可以了
作者: ljftgg    时间: 2005-7-1 10:17
用模糊查询就可以吧.
作者: 豆豆冤    时间: 2007-3-6 15:14
标题: 回复 #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%'




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2