急读取文本文件中的内容存到数据库该如何实现
需要实现读取文本文件中的内容存到数据库,文本文件为每个字段之间用空格格开,
读入到程序后,需要按空格区分,然后将每行内容生成一个sql语句,
文本内容如下面的内容
张三 语文 83
李四 数学 93
把有像这样的文本读到数据库
读文件的功能我实现了,如何 将每一行 如 张三 和语文分开然后插到相应字段
读文件的代码如下:
<%@ page contentType= "text/html;charset=gb2312 "%>
<%@ page import = "java.util.*,java.io.* "%>
<%
String fSrcName= "c:/count.txt ";
String sTemp = " ";
try
{
FileReader fr = new FileReader(fSrcName) ;
BufferedReader br = new BufferedReader(fr) ;
String sLine = br.readLine() ;
while (sLine!=null){
sTemp = sLine.toString() ;
out.print( " <br> "+sTemp) ;
sLine = br.readLine() ;
}
fr.close() ;
}catch (Exception e){
e.printStackTrace(System.err) ;
}
%>
[解决办法]
String str=bufferedreader.readLine();
String[] arr=str.split( "\\s ");
for (int i=0;i <arr.length;i++)
{
preparedstatement.setString(i+1,arr[i]);
}
preparedstatement.executeUpdate();
大概是这样。/
[解决办法]
StringTokenizer st = new StringTokenizer(str, " ");
while(st.hasMoreTokens()){
return st.nextToken();
}
[解决办法]
每读一行,调用一下,然后把字符串数组里的东西弄出来扔进数据库就好了.
public static String[] fg(String str) {
return str.split( " ");
}
[解决办法]
你文本每行一般都有格式吧,都读出来转成字符串,在分割,放入数据库。没格式的话就作为一个字符串放进去吧
[解决办法]
String[] arr=sLine.split( "\\s ");
[解决办法]
给你个我做过的数据恢复的部分代码吧
//读取文件中的数据
public String[][] getfilemsg(String filename,int tablecount){
String[][] msg=null;//存储读取文件后的数据
String s=null;//文件的每一行记录
int j=0;//循环行号变量
try{
FileReader infile=new FileReader(filename);
BufferedReader in=new BufferedReader(infile);
//查询当前文件中数据总行数
while ((s=in.readLine())!=null)
{
j++;
}
if (j==0)
{
msg=null;
}
else
{
msg=new String[j][tablecount];
FileReader infile2=new FileReader(filename);
BufferedReader in2=new BufferedReader(infile2);
j=0;
//文件读取
while ((s=in2.readLine())!=null)
{
String Ftr=s;
StringTokenizer gall=new StringTokenizer(Ftr, "\u0007 ");
//通过分割符\u0007进行不同列的截断
for (int i=0;i <tablecount;i++)
{
String gtstr=gall.nextToken();
manage mg=new manage();
gtstr=mg.updatestr(gtstr, "\u0001 ", "\n ");
msg[j][i]=gtstr;
}
j++;
}
}
}catch(Exception e){
System.out.println(e);
}
return msg;
}
[解决办法]
//恢复数据库
public boolean restore(String tablename,String[][] msg,JProgressBar jProgressBar,JLabel jLabel){
boolean f=false;
System.out.println(tablename);
try{
//删除数据库中的原有记录
PreparedStatement del=con.prepareStatement( "delete from "+tablename);
del.execute();
String[][] columntype=getcolumntype(tablename,msg[0].length);
//String sql= "insert into "+tablename;//合成的SQL insert语句
//拼凑SQL语句
String sql= "insert into "+tablename;//合成的SQL insert语句
String sql1= "( ";//SQL insert语句的数据列名部分
String sql2= "( ";//SQL insert语句的value值部分
for(int j=0;j <msg[0].length;j++)
{
sql1=sql1+columntype[j][0]+ ", ";
sql2=sql2+ "?, ";
}
sql1=sql1.substring(0,sql1.length()-1);
sql1=sql1+ ") ";
sql2=sql2.substring(0,sql2.length()-1);
sql2=sql2+ ") ";
sql=sql+ " "+sql1+ " values "+sql2;
System.out.println(sql);
PreparedStatement ins=con.prepareStatement(sql);
for (int i=0;i <msg.length;i++)
{
//循环为PreparedStatement中的参数赋值
for (int k=0;k <msg[0].length;k++)
{
if (msg[i][k]== "\u0003 " || msg[i][k].equals( "\u0003 "))
{
ins.setString(k+1,null);
}
else
{
ins.setString(k+1,msg[i][k]);
}
}
int tt=i*100/msg.length;
jProgressBar.setValue(tt);
jLabel.setText( "已经整合 "+i+ "条数据 ");
ins.addBatch();
}
jLabel.setText( "正在批量提交表 "+tablename);
ins.executeBatch();
jProgressBar.setValue(100);
jLabel.setText( "已完成恢复 ");
f=true;
}catch(Exception e){
System.out.println(e);
}
return f;
}
[解决办法]
要考虑数据库是否放得下,
[解决办法]
readline方法好想不行
我绝的最好就是byte【】 b;
b.getbyte()
string s=new String(b);
Array arr=b.split( " ");
把文本里的都存放到数组里面去
[解决办法]
文件流读一行,再用String的split方法分割,就可以了
[解决办法]
分割也可用StringTokenier类做