怎样用Java实现从文本文档中读取数据并存入数据库

怎样用Java实现从文本文档中读取数据并存入数据库,第1张

不知道你要什么样的文本,文本中的内容是否是有格式的:

这里提供下思路,供参考:

1.文本文件,基本上式字符格式的了,可以用Reader  io流

2.如果是格式化的文本,可以按数据的长度读取,  readInt   readByte...

3.保存到数据库 当然用JDBC了,如果你读取出来封装成POJO了,也可以选择 OM框架

import java.io.BufferedReader

import java.io.FileInputStream

import java.io.IOException

import java.io.InputStreamReader

/**

 * 文件读取和写入数据库

 * @author  樊云升

 *

 */

public class FilesReader {

public FilesReader(){

}

/**

 * 读取文件内容

 * @param FILE

 * @return

 */

public String re_content(String FILE){

String content=""

 try{   

             BufferedReader bufRead=new BufferedReader(new InputStreamReader(new FileInputStream(FILE)))   

             String  str   

             while((str=bufRead.readLine())!=null){   

               content+=str+"\r\n"   

             }

 }catch(IOException ioe){

   ioe.printStackTrace()

 }

return  content

}

/**

 * 将特定字符写入数据库中(原来我写的是重写文件,你这里这里将content写入数据库就OK)

 * @param path

 * @return

 */

public boolean writeFile(String content){

try{

//数据库写入代码

                     }catch(Exception e){

  out.close()

  return false

 }

return true

}

public static void main(String[] args) {

String content=new FilesReader().re_content("D:\\AJAX.htm")

                new FilesReader().writeFile(content)

}

}

解决这种问题,

简单说,设那个大文件为big.txt

写一个程序生成一个big.idx数据文件,记录big.txt每一行的结束位置+1,每个位置用long类型存储。

比如得到数据内容(非文本):

[10][22][34][84] ....[2345312].....[50000000]

扫描一遍,生成这500MB的长度文件,比如有10万行,这个big.idx文件就有800KB左右。

就根据big.idx可以查找指定行数了,比如查第1234行

已知一个long占8个字节,打开

第1234行的起始位置的存储位置p=(1234-2)*8=9856

第1234行的长度len的位置lp=(1234-1)*8=9864

寻道big.idx的p处,在p处读取一个long为pos

寻道big.idx的lp处,在p处读取一个long为npos

pos中就记录big.txt中第1234行的起始位置

该行长度len=npos-pos

打开big.txt,查找pos位置,读len个字节,转换成字符串,

就读出了指定的1234行

把这个不大的big.idx的内容整理到内存中间,读取速度更快。

引经据典说,以上属于数据库基础的ISAM方法。

你好。请问什么数据库。oracle如下

数据库中提供了两种字段类型 Blob 和 Clob 用于存储大型字符串或二进制数据(如图片)。

Blob 采用单字节存储,适合保存二进制数据,如图片文件。

Clob 采用多字节存储,适合保存大型文本数据。

首先创建一个空 Blob/Clob 字段,再从这个空 Blob/Clob字段获取游标,例如下面的代码:

PreparedStatement ps = conn.prepareStatement( " insert into PICTURE(image,resume) values(?,?) " )

// 通过oralce.sql.BLOB/CLOB.empty_lob()构造空Blob/Clob对象

ps.setBlob( 1 ,oracle.sql.BLOB.empty_lob())

ps.setClob( 2 ,oracle.sql.CLOB.empty_lob())

ps.excuteUpdate()

ps.close()

// 再次对读出Blob/Clob句柄

ps = conn.prepareStatement( " select image,resume from PICTURE where id=? for update " )

ps.setInt( 1 , 100 )

ResultSet rs = ps.executeQuery()

rs.next()

oracle.sql.BLOB imgBlob = (oracle.sql.BLOB)rs.getBlob( 1 )

oracle.sql.CLOB resClob = (oracle.sql.CLOB)rs.getClob( 2 )

// 将二进制数据写入Blob

FileInputStream inStream = new FileInputStream( " c://image.jpg " )

OutputStream outStream = imgBlob.getBinaryOutputStream()

byte [] buf = new byte [ 10240 ]

int len

while (len = inStream.read(buf) >0 ) {

outStream.write(buf, 0 ,len)

}

inStream.close()

outStream.cloese()

// 将字符串写入Clob

resClob.putString( 1 , " this is a clob " )

// 再将Blob/Clob字段更新到数据库

ps = conn.prepareStatement( " update PICTURE set image=? and resume=? where id=? " )

ps.setBlob( 1 ,imgBlob)

ps.setClob( 2 ,resClob)

ps.setInt( 3 , 100 )

ps.executeUpdate()

ps.close()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6727182.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存