java 对象 数据库中_Java将对象直接在数据库中存取的方法
背景
最近在做一个java桌面应用的时候,考虑到要保存一些数据。
而我需要存储的类,其中有一些变量是object类型的,使用时需要动态解析。这就给存入数据库带来了一些麻烦。于是,我考虑把整个对象直接存入数据库。
java序列化与反序列化
Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。
JDBC
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
sqlite
sqlite是一款轻量级的数据库,嵌入到程序的进程中执行,大大提高了效率。
我选用sqlite数据库来完成这一目的。
使用java控制sqlite数据库需要sqlite的JDBC,需自行安装。
详解
下面用一个demo来介绍整个过程。
public class SqliteDB {
Connection conn;
Statement stat;
//连接到数据库
public SqliteDB(){
try {
Class.forName("org.sqlite.JDBC");
conn=DriverManager.getConnection("jdbc:sqlite:ifttt.db");
stat=conn.createStatement();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//Task是在别处定义的类。作为例子使用。
public Task readDB(){
try {
stat=conn.createStatement();
ResultSet rs = stat.executeQuery("select * from tasks;");
/* *将数据库中的数据读到一个byte数组中 *通过ByteArrayInputStream传入ObjectInputStream中 *从ObjectInputStream读出object对象并强制转换成Task */
byte[] data=rs.getBytes(1);
ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(data);
ObjectInputStream objectInputStream=new ObjectInputStream(byteArrayInputStream);
Task task=(Task)(objectInputStream.readObject());
byteArrayInputStream.close();
objectInputStream.close();
rs.close();
stat.close();
conn.close();
return task;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public void saveDB(Task task){
try {
stat.executeUpdate("drop table if exists tasks;");
stat.executeUpdate("create table tasks (task);");
PreparedStatement prep=conn.prepareStatement("insert into tasks values(?);");
/* *使用ObjectOutputStream将对象序列化, *传入ByteArrayOutputStream中, *最后输出到一个byte类型的数组中 *而这样的数组可以直接存入数据库 */
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(arrayOutputStream);
objectOutputStream.writeObject(task);
objectOutputStream.flush();
byte[] data=arrayOutputStream.toByteArray();
prep.setBytes(1, data);
prep.addBatch();
arrayOutputStream.close();
objectOutputStream.close();
conn.setAutoCommit(false);
prep.executeBatch();
conn.setAutoCommit(true);
stat.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
java 对象 数据库中_Java将对象直接在数据库中存取的方法相关推荐
- java静态类如何赋值_Java class对象说明 Java 静态变量声明和赋值说明
先看下JDK中的说明: java.lang.Object java.lang.ClassInstances of theclass Class represent classes and interf ...
- java访问对象的属性_java访问对象的属性和行为详细介绍
每一个对象都会有属于自己的属性和行为,下面的文章就对java访问对象的属性和行为做了一下详细的介绍. 对象的属性和行为在类当中体现为成员变量和成员方法,其中成员变量对应对象的属性,成员方法对应对象的行 ...
- java判断空对象为空_Java判断对象是否为空(包括null ,)的方法
本文实例为大家分享了Java判断对象是否为空的具体代码,供大家参考,具体内容如下 package com.gj5u.publics.util; import java.util.List; /** * ...
- java mysql教程基于_java基于jdbc连接mysql数据库功能实例详解
本文实例讲述了java基于jdbc连接mysql数据库的方法.分享给大家供大家参考,具体如下: 一.JDBC简介 Java 数据库连接,(Java Database Connectivity,简称JD ...
- java 消息服务框架_Java消息服务 在 Spring Boot 中的使用
原标题:Java消息服务 在 Spring Boot 中的使用 当前环境 Mac OS 10.11.x docker 1.12.1 JDK 1.8 SpringBoot 1.5 前言 基于之前一篇&q ...
- java opencv 读取视频_java使用OpenCV从视频文件中获取帧
本文实例为大家分享了java使用OpenCV从视频文件中获取帧的具体代码,供大家参考,具体内容如下 实现功能:使用Java获取mp4.mov.avi等视频文件中的图像帧,每秒获取一帧图像,并保存 环境 ...
- word中添加java代码怎么写_Java如何在word文档中写一个段落?
在Java编程中,如何在word文档中写一个段落? 注意:需要访问网址:http://poi.apache.org/download.html , 下载一个Apache POI软件包.这里下载最新版本 ...
- java hook 和反射_Java反射与hook混用反射某支付的方法
反射某支付软件apk的方法 思路: 1.可以先取得某支付软件的classLoader,可以通过hook某支付软件的必须方法(如:LauncherActivity的attachBaseContext方法 ...
- java final修饰符_java final修饰符详解,final修饰方法
之前给大家讲过java final修饰符final修饰变量方面的知识,那么下面要继续给大家讲到的就是final修饰方法方面的知识,一起来了解一下吧. final修饰的方法不能被重写,假如因为一些原因, ...
最新文章
- Mysql服务器问题(2013.3.5日发现)
- 百度广告点击软件_网络营销百问百答之64,如何提升企业百度广告点击率
- 关于人工智能引擎的最初分析文档
- javascript 相关小的知识点集合
- git克隆远程仓库的时候断电了,使用git-fetch断点续传
- oracle数据库选件,一句话为你解读Oracle数据库选件
- ORACLE 日期转换
- Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
- sis地址发布器_【一起练翻译-9.1】关于提词器、真实、川普和演讲
- 阿里巴巴大数据计算平台MaxCompute全套攻略
- 计算机服务无法启动,Win7系统下windows firewall服务无法启动怎么解决【图文】
- androrid按键事件
- rstudio文件保存_R 和 RStudio 的安装及 R Profile 的配置 amp; 初识 R 语言数据爬取
- RocketMQ的长轮询消费方式
- 思科交换机配置ipv6实验
- 3D灯光教程仅需三个步骤,用ThingJS体验极速开发!
- 把kali装到U盘里
- 地下管线探测重点与难点分析
- 解决:mysql报错ERROR 1049 (42000): Unknown database ‘数据库‘
- IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 2
热门文章
- Flume-NG源码分析-整体结构及配置载入分析
- 数据结构总结1(火车进栈/兔子与兔子/括号画家/Editor/邻值查找/最大子序和/前缀统计/Phone List/The XOR Largest Pair)
- ECC椭圆曲线加解密原理详解(配图)
- 今日软件分享:可以自动生成自画像的软件
- 转载:房价暴涨:欧美很紧张 中国一点都不急
- mysql常用employee表数据
- 前端自动打包部署服务器
- 网络优化推广公司如何控制客户网站的网络流量?
- sql建表+主键+外键
- 各占半壁江山 Apple Pencil和S Pen谁更有优势