如题:
一大堆文件夹,文件夹里还有文件夹,里面有.txt文本文件,数据存在文本文件里,现在要将数据导入到oracle 9i 中,要求插入的数据不能重复,(假设只有一个字段username),用b/s做 还要做进度条现在的问题是:
一 文件夹里的文件多,如何加快读取?
二 插入数据很慢(唯一性判断),如何解决?打算建的表():
create table users
(
username varchar2(100),
primary key(username)
)有没有好的解决方案呢?

解决方案 »

  1.   

    我自己的想法是:
    一:读取文件夹的文件用多线程读取
    二:数据插入分两种方法:
    1 users表不设主键,首先不管三七二十一,先全部插入进数据库中,然后去除掉重复的数据
    2 将users表的username设为主键,不管三七二十一,都执行插入操作,即使重复也没关系,反正插入不会成功
      

  2.   

     个人觉得可以先整理所有txt文本数据写到一个txt当中,再进行数据导入。 数据导入最好用存储过程来做。
      

  3.   

    先读取数据,存入dataset中,再往数据库丢。
    最好用多线程防止程序无响应
    知道记录总数,做进度条就很容易了
      

  4.   

    另外:将数据先存入HASH表可以避免数据重复。
      

  5.   


    這個貌似不是很理想吧...讀入一定的數量,再Insert...
      

  6.   

    我做过类似的东西,但是数据量没有你说的这么大,我的方法是在先创建一个备份文件夹和一个错误文件夹,在数据库的里面的usename 字段做唯一索引,这样能够保证唯一性,读完的数据转存到备份文件夹的相应目录下,写入错误的时候或者程序错误的时候转存在错误的文件夹中,这样对查找问题会方便些,由于没有那么大的数据量,所以我没有使用进度条。你这个就要用了。如果有不明白的可以问我。.cn
      

  7.   

    是一次性将所有的数据全部存入到dataset中再往数据库里丢?
    这么大的数据量我没有试过,文本文件将近2G,将近有2000个文本文件,我想读取每一个文本文件我就开一个线程,不知道普通的电脑受不受得了
    进度条我已经做好了
      

  8.   

    现在的问题是:username字段唯一性后,每次插入的时候是不是还要检测这个数据是否存在?还是不用检测了?如果是需要插入前进行唯一性检测的话,每一个都要跑到数据库里查一下,总感觉不是很好,有没有更好的办法?如果不用检测的话,直接try catch掉?
      

  9.   

    不知道 你读取完数据后保存成xml文件 再分几个文件插入
      

  10.   

    Hashtable hb = new Hashtable();
                for (int i = 0; i < 100000000;i++ )
                {
                    hb.Add(i, i);
                }
    我电脑的内存是2G,运行后发现卡住了,任务管理器一看内存消耗2.5G以上,赶忙关掉进程
    卡了半天才回过神来。。
      

  11.   

    建立dataset,导入表的约束,读入文本内容.
    首先,根据文件名建立同义词
    然后,将文本文件整理到一个文件夹下
    最后,我的可以给你一个工具,进行导入
    你可以联系我,通过我的mail