你的意思是不修改文本文件的内容直接写进去吗?可以直接把文本文件读进一个String然后插入就行了
解决方案 »
- Java Web程序做功能更新的时候能不能手写补丁打上吗?具体要怎么操作呢?
- 在线等:weblogic启动后不断报数据库连接错误
- Hibernate One-to-One的问题
- iframe遮盖
- 一个页面登陆成功后再刷新另外一个页面
- JSP下载EXECL文件时报错:java.lang.IllegalStateException: getOutputStream() has already been called for this response
- 我想用JSTL里的fn.tld,请问我如何引用?为什么我像引用c标签那样引用却无效?
- 推荐一款好的开源portal产品
- 在jsp中使用javabean的问题?
- JSP页面调用JNI问题
- 如何让后台的一个服务每隔二个小时自动重起!????
- 超连接上的提示是怎么实现的?
能不能在程序里面将文件名作为参数,一次性导完?
或者象您说的读到String里面再插入。。可是我的记录可能有10万条哦希望您能进一步指点谢谢了~~~~
那就不能象我这么做了你的txt文件里面数据是不是按数据库表结构存放数据的呢?
如果是这样,那就要解析出数据,然后再写入数据库了
这样效率会很低的
你为什么不直接使用sqlserver的工具来导入数据呢
或者有别的方法
生成bat不可行。首先要根据你的格式把文本文件里面的数据解析出来
放在二维数组或者嵌套容器里面
然后再一行一行地插入
思路就是这样。
具体的代码帮不了你了
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());
}
我感觉还是有问题哦。
您的意思是每次读一行吧。
但是我发现您是不是只读了第一行,没有往下面读呢?。。
~~~~~~~~~~~
事务吧。。好象这段中没用到这个东西哦
while((str=br.readLine())!=null)
........
yinleiyoung(星际孤虹)的方法改一改!
这个方法也不是很好!
如果将文本是格式化的工具,你可以用:
Runtime类的exec调用dos下执行的sqlserver导入工具bcp
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的,运行成功,
sturesult是数据库名,rs是表名 xing是服务器名,后面的是密码和用户名
d:\result.txt是数据文本文件!我的测试结果如下:
¿ªÊ¼¸´ÖÆ...1000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 10001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 20001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 30001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 40001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 50001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 60001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 70001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 80001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 90001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 100001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 110001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 120001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 130001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 140001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 150001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 160001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 170001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 180001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 190001000 ÁÐË͵½ SQL Server¡£ºÏ¼ÆËͳö: 20000ÒѸ´ÖÆÁË 20221 ÐС£Êý¾Ý°üµÄ´óС£¨×Ö½Ú£©: 4096ʱÖÓʱ¼ä£¨ºÁÃ룩: ¹² 531
哎呀,在editplus中显示正常中文,复制到这儿就是乱码,晕!
反正导入成功,你参考一下!
有点看不懂zhutouzip(Speak out!-shyboy) 前辈的函数
:)能说详细点吗?
感谢。
bcp命令是sqlserver的一种导入工具,你看看sqlserver的联机文档,上面有介绍的,我已经说了参数的意义了,我再说一次:
bcp dbname.dbowner.tablename in 导入文件 -c -S服务器名称 -U用户名 -P密码
如果你不写dbowner的话就直接dbname..tablename,比如你的数据库是aaa,表名bbb,则为aaa..bbb
导入文件是你的数据文件路径,-S后面跟的是服务器名称,比如localhost,ip等等
用户名为系统中存在的用户,比如sa 密码是这个用户的密码
我听别人说,,BCP是批处理命令,似乎不能在程序中调用,只在DOS等其他方式使用,。。
不知道是不是真的。
我马上去试。争取早日成功~