你的意思是不修改文本文件的内容直接写进去吗?可以直接把文本文件读进一个String然后插入就行了

解决方案 »

  1.   

    是这样的。。 jFresH_MaN(TM)前辈。别人从SQL SERVER里面导出来了数据,放在了txt文档里面,我想把这些数据导入到我的本地sql server里面。
    能不能在程序里面将文件名作为参数,一次性导完?
    或者象您说的读到String里面再插入。。可是我的记录可能有10万条哦希望您能进一步指点谢谢了~~~~
      

  2.   

    10w条?
    那就不能象我这么做了你的txt文件里面数据是不是按数据库表结构存放数据的呢?
    如果是这样,那就要解析出数据,然后再写入数据库了
    这样效率会很低的
    你为什么不直接使用sqlserver的工具来导入数据呢
      

  3.   

    SQLServer不是可以直接导入的吗?
      

  4.   

    能不能动态的生成BAT文件,并在程序里面调用它呢?。。
    或者有别的方法
      

  5.   

    看来你这个问题还是要用java来实现
    生成bat不可行。首先要根据你的格式把文本文件里面的数据解析出来
    放在二维数组或者嵌套容器里面
    然后再一行一行地插入
    思路就是这样。
    具体的代码帮不了你了
      

  6.   

    假设test表有三个数据字段:
    t_a,t_b,t_c  nvarchar(20)在文本文件中假设有三条记录(test.txt):
    a1,b1,c1
    a2,b2,c2
    a3,b3,c3
    (一行中只能有一条记录,每条记录的字段之间用“,”隔开(中文(中国)输入法的逗号))下面是java文件(核心程序完整,楼主自己试试):连接数据库;(自己写)     String a="";
         String b="";    
         String c="";  //存放三个字段的值     Transaction tx = null;
         BufferedReader br = null;
         int lineCount = 0;
      try{     br = new BufferedReader(new FileReader(filename));
         String line = br.readLine();
         while(line!=null){                       //如果记录不为空,就继续读取
                  String[] temp=line.split(",");  //字段之间以逗号分割
              for (int i=0;i<temp.length ;i++ )
               {
                    String field=temp[i];
                    switch(i){
                              case 0:         //第一个字段
                                 a=field;
                                 break;
                              case 1:         //第二个字段
                                  b=field;
                                  break;
                              case 2:         //第三个字段                              c=field;
                                  break;                          }
               插入数据库;(自己写)            }     关闭数据库连接;(自己写)
              }  }
      catch (Exception exp) {      System.out.println(exp.getMessage());
        }
      

  7.   

    sorry, 插入数据库;(自己写) 这一段,应该放在for循环外面,while循环里面,位置放错了
      

  8.   

    yinleiyoung(星际孤虹) 前辈。。
    我感觉还是有问题哦。
    您的意思是每次读一行吧。
    但是我发现您是不是只读了第一行,没有往下面读呢?。。
      

  9.   

    Transaction tx = null;
    ~~~~~~~~~~~
    事务吧。。好象这段中没用到这个东西哦
      

  10.   

    String str=null;
    while((str=br.readLine())!=null)
    ........
    yinleiyoung(星际孤虹)的方法改一改!
    这个方法也不是很好!
    如果将文本是格式化的工具,你可以用:
    Runtime类的exec调用dos下执行的sqlserver导入工具bcp
      

  11.   

    楼上的前辈,我现在不能用DTS,只能在程序中导,还请您多多指点。您能说说yinleiyoung(星际孤虹)的方法不好在哪里吗?。。谢谢您了~
      

  12.   

    yinleiyoung(星际孤虹)的方法也是用输入输出流,每一行每一行的读入10w条数据记录也很吃亏吧!况且要经过很多转换!
    import java.util.*;
    import java.io.*;
    public class Run{
     static void prt(){
    System.out.println("Hello");
    }
    public static void main(String args[])throws Exception{
    Process p=Runtime.getRuntime().exec("bcp sturesult..rs in d:/result.txt -c -Sxing -Usa -P12388321");
            BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
    String str=null;
    int i=0;
    while(true){
    if(i<30){ if((str=br.readLine())!=null)
    {
    i++;
    System.out.println(str);
    }
    else
    i++;
    }else
    break;
    }

    }
    }这是我刚刚写的一个导入数据程序,主要是针对sqlserver的,运行成功,
      

  13.   

    以上的只是简单的测试,很多地方你要改一下:
    sturesult是数据库名,rs是表名 xing是服务器名,后面的是密码和用户名
    d:\result.txt是数据文本文件!我的测试结果如下:
    &iquest;&ordf;&Ecirc;&frac14;&cedil;&acute;&Ouml;&AElig;...1000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 10001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 20001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 30001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 40001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 50001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 60001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 70001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 80001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 90001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 100001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 110001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 120001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 130001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 140001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 150001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 160001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 170001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 180001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 190001000 &Aacute;&ETH;&Euml;&Iacute;&micro;&frac12; SQL Server&iexcl;&pound;&ordm;&Iuml;&frac14;&AElig;&Euml;&Iacute;&sup3;&ouml;: 20000&Ograve;&Ntilde;&cedil;&acute;&Ouml;&AElig;&Aacute;&Euml; 20221 &ETH;&ETH;&iexcl;&pound;&Ecirc;&yacute;&frac34;&Yacute;°ü&micro;&Auml;&acute;ó&ETH;&iexcl;&pound;¨×&Ouml;&frac12;&Uacute;&pound;&copy;: 4096&Ecirc;±&Ouml;&Oacute;&Ecirc;±&frac14;&auml;&pound;¨&ordm;&Aacute;&Atilde;&euml;&pound;&copy;: &sup1;&sup2;    531
    哎呀,在editplus中显示正常中文,复制到这儿就是乱码,晕!
    反正导入成功,你参考一下!
      

  14.   

    bcp这种批处理命令,,可以在程序中调用吗?
    有点看不懂zhutouzip(Speak out!-shyboy) 前辈的函数
    :)能说详细点吗?
    感谢。
      

  15.   

    安装完sqlserver后,安装程序会自动设置path的,你在命令行下可以用bcp这个命令!
    bcp命令是sqlserver的一种导入工具,你看看sqlserver的联机文档,上面有介绍的,我已经说了参数的意义了,我再说一次:
    bcp dbname.dbowner.tablename in 导入文件 -c -S服务器名称 -U用户名 -P密码 
    如果你不写dbowner的话就直接dbname..tablename,比如你的数据库是aaa,表名bbb,则为aaa..bbb
    导入文件是你的数据文件路径,-S后面跟的是服务器名称,比如localhost,ip等等
    用户名为系统中存在的用户,比如sa 密码是这个用户的密码
      

  16.   

    是这样的。。
    我听别人说,,BCP是批处理命令,似乎不能在程序中调用,只在DOS等其他方式使用,。。
    不知道是不是真的。
      

  17.   

    恩。。谢谢 zhutouzip(Speak out!-shyboy)了
    我马上去试。争取早日成功~