java保存数据的方法,java解析json格式文件,再保存在数据库怎么做?

java解析json格式文件,再保存在数据库的方法:

1:定义一个实体类

2:用jsonlib将json字符串转为Java对象

3:用jdbc或hibernate将java对象存入数据库

直接读写文件,再把读出来的文件内容格式化成json,再用JDBC、Mybatis或者其他框架将json数据存入数据库。

假设实体类是这样的:

publicclassElectSet{
publicStringxueqi;
publicStringxuenian;
publicStringstartTime;
publicStringendTime;
publicintmenshu;
publicStringisReadDB;
//{"xueqi":,"xuenian":,"startTime":,"endTime":,"renshu":,"isReadDB":}
publicStringgetXueqi(){
returnxueqi;
}
publicvoidsetXueqi(Stringxueqi){
this.xueqi=xueqi;
}
publicStringgetXuenian(){
returnxuenian;
}
publicvoidsetXuenian(Stringxuenian){
this.xuenian=xuenian;
}
publicStringgetStartTime(){
returnstartTime;
}
publicvoidsetStartTime(StringstartTime){
this.startTime=startTime;
}
publicStringgetEndTime(){
returnendTime;
}
publicvoidsetEndTime(StringendTime){
this.endTime=endTime;
}
publicintgetMenshu(){
returnmenshu;
}
publicvoidsetMenshu(intmenshu){
this.menshu=menshu;
}
publicStringgetIsReadDB(){
returnisReadDB;
}
publicvoidsetIsReadDB(StringisReadDB){
this.isReadDB=isReadDB;
}
}

有一个json格式的文件,存的信息如下:

Sets.json:
{"xuenian":"2007-2008","xueqi":"1","startTime":"2009-07-1908:30","endTime":"2009-07-2218:00","menshu":"10","isReadDB":"Y"}

具体操作:

/*
*取出文件内容,填充对象
*/
publicElectSetfindElectSet(Stringpath){
ElectSetelectset=newElectSet();
Stringsets=ReadFile(path);//获得json文件的内容
JSONObjectjo=JSONObject.fromObject(sets);//格式化成json对象
//System.out.println("————"jo);
//Stringname=jo.getString("xuenian");
//System.out.println(name);
electset.setXueqi(jo.getString("xueqi"));
electset.setXuenian(jo.getString("xuenian"));
electset.setStartTime(jo.getString("startTime"));
electset.setEndTime(jo.getString("endTime"));
electset.setMenshu(jo.getInt("menshu"));
electset.setIsReadDB(jo.getString("isReadDB"));
returnelectset;
}
//设置属性,并保存
publicbooleansetElect(Stringpath,Stringsets){
try{
writeFile(path,sets);
returntrue;
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
returnfalse;
}
}
//读文件,返回字符串
publicStringReadFile(Stringpath){
Filefile=newFile(path);
BufferedReaderreader=null;
Stringlaststr="";
try{
//System.out.println("以行为单位读取文件内容,一次读一整行:");
reader=newBufferedReader(newFileReader(file));
StringtempString=null;
intline=1;
//一次读入一行,直到读入null为文件结束
while((tempString=reader.readLine())!=null){
//显示行号
System.out.println("line"line":"tempString);
laststr=laststrtempString;
line;
}
reader.close();
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(reader!=null){
try{
reader.close();
}catch(IOExceptione1){
}
}
}
returnlaststr;
}

将获取到的字符串,入库即可。

用JAVA写软件在不使用数据库的前提下,怎么保存数据

这种问题一般是保存在一个文件里,至于是jar外还是里面看你的程序怎么写了,应该说都可以实现。可以写成xml文件存在jar包里面,当然也可以放在jar外面,只要文件的路径是正确的就可以了。

java程序中怎样用文件存储数据

对于一些小文件,我们可以一次性读取它的所有字节,然后一次提交到数据库
///
///这个方法演示了如何一次提交所有的字节。这样导致的结果是:应用程序立即需要申请等同于文件大小的内存
staticvoidSubmitFileByOnce(){
stringfile=@"F:\功夫熊猫.rmvb";//文件大小为519MB
byte[]buffer=File.ReadAllBytes(file);
using(SqlConnectionconn=newSqlConnection("server=(local);database=demo;integratedsecurity=true")){
using(SqlCommandcmd=conn.CreateCommand())
{
cmd.CommandText="INSERTINTOFiles(FileName,FileContents)VALUES(@fileName,@fileContents)";
cmd.Parameters.AddRange(
new[]
{
newSqlParameter("@fileName",file),
newSqlParameter("@fileContents",buffer)
});
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
}
但是,上面的方法有几个问题,主要体现在如果文件比较大的话
它需要一次性很大的内存,具体数据等同于文件大小。因为File.ReadAllBytes方法是将所有字节全部读入到内存。
它会导致提交失败,就是因为数据太大了。数据库也会拒绝。
那么,我就对这个方法做了一下改进,将文件拆分为5MB一段,也就是说,此时每次申请的内存只有5MB。这就大大地提高了可用性。
///这个方法是将文件切分为5MB的块,每次只是提交5MB,所以可能多次提交,但内存占用就比较小
staticvoidSubmitFileStepByStep(){
stringfile=@"F:\功夫熊猫.rmvb";//以这个文件为例,大小为519MB,一共需要的时间大约94秒。还是有点慢的,所以还可能需要进行压缩
FileStreamfs=newFileStream(file,FileMode.Open);
byte[]buffer=newbyte[5*1024*1024];
intreadCount;
using(SqlConnectionconn=newSqlConnection("server=(local);database=demo;integratedsecurity=true"))
{
conn.Open();
while((readCount=fs.Read(buffer,0,buffer.Length))>0)
{
using(SqlCommandcmd=conn.CreateCommand())
{
cmd.CommandText="INSERTINTOFiles(FileName,FileContents)VALUES(@fileName,@fileContents)";
cmd.Parameters.AddRange(
new[]
{
newSqlParameter("@fileName",file),
newSqlParameter("@fileContents",buffer)
});
cmd.ExecuteNonQuery();
}
}
conn.Close();
}
}
这样的话,有一个后果就是一个文件,可能在数据库中会有多条记录。所以在读取的时候,我们需要对其进行合并
staticvoidDownloadFile(){
stringfile=@"F:\功夫熊猫.rmvb";
stringdestfile=@"E:\Temp\Temp.wmv";
using(SqlConnectionconn=newSqlConnection("server=(local);database=demo;integratedsecurity=true"))
{
using(SqlCommandcmd=conn.CreateCommand())
{
cmd.CommandText="SELECTFileContentsFROMFilesWHEREFileName=@fileName";
cmd.Parameters.AddRange(
new[]
{
newSqlParameter("@fileName",file),
});
conn.Open();
SqlDataReaderreader=cmd.ExecuteReader();
FileStreamfs=newFileStream(destfile,FileMode.Append,FileAccess.Write);
while(reader.Read())
{
byte[]buffer=(byte[])reader[0];
fs.Write(buffer,0,buffer.Length);
}
fs.Close();
reader.Close();
conn.Close();
}
}
}

免责声明:本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即在【本页面底部评论留言】通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意

(0)
投稿专栏的头像投稿专栏官方
上一篇 2024年3月12日
下一篇 2024年3月12日

相关推荐

发表回复

登录后才能评论