博文

如何找出数据库中为空的记录(2008-02-25 08:33:00)

摘要:目前想要的是:判断一张表中,若每条记录有有一个属性值为空的属性,则删除此记录。how?......

阅读全文(1341) | 评论:0

vector的相等(2008-02-24 08:31:00)

摘要:判断两个vector是否相等,则可直接用equals方法,如下:   Vector<String> e1 = new Vector<String>();
  e1.add("3");
  Vector<String> e2 = new Vector<String>();
  e1.add("3");
  e1.add("3");
  System.out.println(e1.equals(e2)); 而两个Vector中的元素是否相等,则要用 decisionProperty.get(j).equals(decisionProperty.get(i))......

阅读全文(1622) | 评论:0

明天任务(2008-02-23 22:23:00)

摘要:目前能想到的如下: 1 如何将粗糙集约简后的与之前的Aprior算法结合起来 2 真实数据,尝试处理 3 数据清理,到底要做成什么样子 。。。。。......

阅读全文(1404) | 评论:0

ResultSet的结果如何判断是否为空(2008-02-23 22:20:00)

摘要:目前有三条语句需要执行并保存结果,每一条的结果不论有无都要记录下来,以便对其它相关数据进行处理。 之前最常用的这样的:   ResultSet rs = SqlFunction.getResultSet(sql);
  while (rs.next()) {
   decisionProperty.add(rs.getString(1));
  } 但是需要注意的是,如果直接用rs.next即把结果集为空的直接跳过去了,如果rs.next的指针一开始所在位置是第一个的上一个,并且不允许为空,若为空,则直接跳过,直至下一个不为空的开始记录。 这样的话,我就不知道哪条语句的执行结果为空了 看了看ResultSet的方法,也没有找到相应的方法,上网查了下,所用的方法均不能实现,因为不论是是getRow或者是getFetchsize均要求在rs.next不为空下才有意义,这样就不能得到我想要结果了。 但是似乎还有一个方法是可取的,就是用select count(*),若为0则说明为空。但是这样的话,所花费的很大的,不仅要查询次数据库,而且相应的存储空间也要增加,十分不划算。 后来群上有人说了下,能不能用ResultSet的last或者first方法,他的解释是,若结果集不为空,则指向最后一个,若结果集为空,则返回false。嗯,看来可以试一下。我直接在rs.next外调用了下这个方法,但是却报错如下:Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.last。。GOOGLE了下,有人提出如下解决方法: 在createStatement时,不用其默认的方法,而是如下所示createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY),然后再调用last方法就OK了 但很奇怪的是,我必须先用rs.next把结果存下来后,再判断rs.last,rs.next的不为空的结果才能正确保存,若两个顺序掉换,则rs.next的结果集不能正确保存,均为空。因为没有debug,所以细节不......

阅读全文(7147) | 评论:0

粗糙集的属性约简(2008-02-23 22:01:00)

摘要:粗糙集的属性约简规则如下,数据如下所示: a1 b1 c1 d1
a1 b2 c1 d2
a2 b3 c2 d3
a1 b2 c3 d3
a1 b1 c3 d3
a1 b3 c1 d3
a1 b4 c1 d1 最基本的:即,第一列属性去掉后,随后余下的属性进行查询时,相同的条件属性的决策属性没有冲突,则说明去掉第一列并没有不一致的数据产生,则说明第一列可去掉,如此循环,直到所有的决策属性都被判断完毕 说是很简单,但是实现起来细节问题很多,思路如下: 从第一个属性开始循环,直至最后一个条件属性,用余下的条件属性进行查询,分如下情况: if(在DB中无相同的条件属性) 则说明根本不可能产生不一致数据的机会,此属性可去掉 if(有相同的条件属性)则找出相应的决策属性,判断是否相等{     if(决策属性相等) 则说明相同的条件属性并没有产生不同的决策属性,可去掉     if(决策属性不相等) 则说明相同的条件属性产生了不同的决策,不可去掉(此属性起关键作用) } 问题: 判断一个Vector中的重复元素,并计算重复次数,并判断重复次数是否过半数以上,如下方法:  public boolean getSymbol(Vector<String> decisionProperty) {
  boolean isFlag = false;
  int length = decisionProperty.size();
  Vector<String> distinctDecProperty = new Vector<String>();
  Vector<Boolean> flag = new Vector<Boolean>();
  int i = 0;......

阅读全文(4255) | 评论:1

将不一致决策表改成一致决策表(2008-02-23 00:01:00)

摘要:在数据库中,经常有这样的数据: a1 b1 c1 d1
a1 b2 c1 d2
a2 b3 c2 d3
a1 b2 c3 d3
a1 b2 c1 d3 注意第二条和第五条数据,其中条件属性都为a1 b2 c1,但是决策属性却不相等,一个是d2一个是d3,即相同的条件属性却有不同的决策属性,即此决策表在粗糙集中称为不一致决策表,今天所做的就是把不一致决策表中的不一致数据去掉,使之成为一致决策表。 先用select property1,property2,property3 from answer_new group by property1,property2,property3 having count(*) > 1找出重复的数据的条件属性 然后用最简单的select id from answer_new where property1='a1' and property2='b2' and property3='c1'找出不一致数据的ID,并保存到idVector中 然后再交idVector中的数据只保留一个ID就好,其余的ID均delete掉,"delete from answer_new where id = " + id.get(j) 收获: 1 有些功能固然可以用编程实现,但是因与数据相关,要仔细思考能否用SQL语句来实现,这样会在编程上节省很多 2 有时把问题想复杂了并不是好事,例如存储时想用类propertyValue然后再保存到Vector中,但是最后的存储结构并不是像我想的那样。于是又折回来,直接用Vector存储 3 有时有的数据结果不一定非要存下来然后再处理,而是直接数据就数据地来处理,这样可以节省很多存储空间和编程上的麻烦。如,第二个的查询语句就是WHERE中的查询条件就是直接应用了第一个查询结果,而没有交其保存在V中 4 要注意数据什么时候该声明,什么时候该赋值,有的时候在不同的地方特别是在括号里外,结果会完全不一样 5 要多想,看有没有其它的方法到达相同的目的地,可能会很慢,但会很有收获。但是也不能想太多,呵呵 问题: 1第二个查询时的WHERE查询条件,是一个p......

阅读全文(2005) | 评论:0

iterator的简单用法(2008-02-22 22:04:00)

摘要:Iterator i1 = unconsistentNotes.iterator();
  while(i1.hasNext()){
   Vector<Object> o1 = (Vector<Object>) i1.next();
   Iterator i2 = o1.iterator();
   
   while(i2.hasNext()){
    String unconsistentConditional = "";
    PropertyValue p1 = (PropertyValue) i2.next();
    unconsistentConditional += p1.property + "='" + p1.value + "' and ";
    System.out.print(unconsistentConditional);
   }
   
   
  }......

阅读全文(1657) | 评论:0

删除数据库中重复记录的SQL语句(转) (2008-02-22 13:07:00)

摘要: 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢? 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1) 2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people 
where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)
and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1) 3、查找表中多余的重复记录(多个字段) 
select * from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae gr......

阅读全文(1832) | 评论:0

如何删除数据表格中的重复记录(2008-02-22 12:08:00)

摘要:有思路,但是效率太差,要不断的遍历整个数据库表格,在SQL中有没有简单的方法呢,正在寻找中。。。。。。 select id from answer_new
where (property1,property2,property3) IN
(select property1,property2,property3 from answer_new
group by property1,property2,property3
having count(*) > 1)                                  不完全正确 其中,select property1,property2,property3 from answer_new
group by property1,property2,property3
having count(*) > 1 查询出数据库中property1,property2,property3相同的数据a1 b2 c1 但是IN的用法是不对的,会提示出现‘第 2 行: ',' 附近有语法错误’或‘当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。’的错误提示信息,原因是IN时, in 里面的查询语句应该只写一个字段 难道只能一个property一个property的去相等么?有没有简便的方法? 目前想到的方法是这个,可也太复杂了吧: select ID from answer_new
where property1 IN
(select property1 from answer_new
group by property1,property2,property3
having count(*) > 1)
AND
(prope......

阅读全文(3128) | 评论:0

疑问:resultset中的next与get方法(2008-02-22 10:59:00)

摘要:resultset即是JDBC中执行数据库查询语句后的查询结果集合,例如保存此SQL语句select distinct property4 from answer_new的结果[d1, d2, d3],但是今天遇到了一个取出来的问题 因为我只要查询出一个property4就可以了,所以自己知道只有一列查询结果,因此就不想用rs.next方法,直接使用getString(int columnIndex) 方法(将columIndex直接赋值为1即可),但是却运行出如下错误: Exception in thread "main" java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position.
 at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
 at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
 at com.microsoft.jdbc.base.BaseResultSet.validateCursorPosition(Unknown Source)
 at com.microsoft.jdbc.base.BaseResultSet.getString(Unknown Source)
 at datamining.PropertyReduction.getDecisionProperty(PropertyReduction.java:30)
 at datamining.PropertyReduction.main(PropertyReduction.java:108) 后来查了些资料,加入rs.next方法就好了,如下:   while(rs.next()){
   decisionProperty.add(rs.getString(1));

阅读全文(4656) | 评论:0