java序列化 怎么插入新的对象_java序列化对象 插入、查询、更新到数据库

java序列化对象 插入、查询、更新到数据库 :

实现代码如下:

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.sql.Blob;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.Statement;

/**

*

* handle serial object with oracle dbStore

* eg: create table TEST_OBJECTSTORE ( CLASSNAME VARCHAR2(256), CONTENT BLOB )

* @author Administrator

*

*/

public class ObjectSerialStore {

private String tableName;

private String classNameColumn;

private String serialObjColumn;

/**

* construct

*

* @param tableName

* @param classNameColumn

* @param serialObjColumn

*/

public ObjectSerialStore(String tableName, String classNameColumn,

String serialObjColumn) {

this.tableName = tableName;

this.classNameColumn = classNameColumn;

this.serialObjColumn = serialObjColumn;

}

public final void storeSerialObject(Connection dbConn,String className,Object serialObj){

PreparedStatement pstmt = null;

try {

ByteArrayOutputStream byteArray = new ByteArrayOutputStream();

ObjectOutputStream objOuts = new ObjectOutputStream(byteArray);

objOuts.writeObject(serialObj);

final byte[] objBytes = byteArray.toByteArray();

pstmt = dbConn.prepareStatement("insert into "+ this.tableName +" ("

+this.classNameColumn+", "+this.serialObjColumn

+") values (?,?)");

pstmt.setString(1, className);

ByteArrayInputStream bis = new ByteArrayInputStream(objBytes);

pstmt.setBinaryStream(2, bis,objBytes.length);

pstmt.execute();

} catch (Exception e) {

System.out.println("The error when serial obj:"+e.getMessage());

} finally {

close(null,pstmt,dbConn);

}

}

/**

* update the serial Object

* @param dbConn close after use

* @param className serialObj.getClass().getName() or OBJ.class.getName()

* @param serialObj

*/

public final void updateSerialObject(Connection dbConn, String className,

Object serialObj){

PreparedStatement pstmt = null;

ResultSet rs = null;

try {

ByteArrayOutputStream out = new ByteArrayOutputStream();

ObjectOutputStream objOuts = new ObjectOutputStream(out);

objOuts.writeObject(serialObj);

final byte[] objBytes = out.toByteArray();

pstmt = dbConn.prepareStatement("update "+this.tableName+" set "+this.serialObjColumn+"=? where "+this.classNameColumn+"=?");

ByteArrayInputStream input = new ByteArrayInputStream(objBytes);

pstmt.setBinaryStream(1, input, objBytes.length);

pstmt.setString(2, className);

pstmt.execute();

input.close();

out.close();

objOuts.close();

} catch (Exception e) {

System.out.println("The error when update serial obj:"+e.getMessage());

} finally {

close(rs,pstmt,dbConn);

}

}

public final Object getSerialObject(Connection dbConn,String className){

Statement stmt = null;

ResultSet rs = null;

Object returnObj = null;

try{

stmt = dbConn.createStatement();

rs = stmt.executeQuery("select "+this.serialObjColumn+" from "+this.tableName+" where "+this.classNameColumn+"='"+className+"'");

Blob blob = null;

if(rs.next()){

blob = rs.getBlob(this.serialObjColumn);

}

byte[] getBytes = blob.getBytes(1, (int)blob.length());

ObjectInputStream objInput = new ObjectInputStream(new ByteArrayInputStream(getBytes));

returnObj = objInput.readObject();

objInput.close();

}catch(Exception e){

System.out.println("The error when deserial obj:"+e.getMessage());

}finally{

close(rs,stmt,dbConn);

}

return returnObj;

}

private void close(ResultSet rs,Statement stmt,Connection conn){

if(rs != null){

try{

rs.close();

}catch(Exception e){}

}

if(stmt != null){

try{

stmt.close();

}catch(Exception e){}

}

if(conn != null){

try{

conn.close();

}catch(Exception e){}

}

}

}

java序列化对象 插入、查询、更新到数据库 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以这样实现:首先,比较两个实体类字段值,如果不同,则使用ES API更新索引;其次,可以使用Java 8流式编程的方式,对实体类属性进行对比,不同则进行更新操作;最后,使用Apache Commons Lang库提供的ObjectUtils工具类,可以实现把Java对象以JSON格式插入ES索引。 ### 回答2: 以下是一个用Java编写的示例代码,用于比较两个对象实体类的字段值并进行更新操作,并插入ES索引: ```java import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.RequestOptions; import java.io.IOException; public class ObjectComparisonDemo { public static void main(String[] args) { YourEntityClass object1 = getObject1(); // 第一个对象实例 YourEntityClass object2 = getObject2(); // 第二个对象实例 if (!object1.equals(object2)) { // 检查两个对象是否不同 // 更新对象1的字段值为对象2的字段值 object1.setField1(object2.getField1()); object1.setField2(object2.getField2()); // ... 更新其他字段 // 插入ES索引 RestHighLevelClient client = createElasticsearchClient(); IndexRequest request = new IndexRequest("your_index_name"); request.source(object1.toJson(), XContentType.JSON); try { IndexResponse response = client.index(request, RequestOptions.DEFAULT); if (response.getResult() == IndexResponse.Result.CREATED) { System.out.println("数据插入ES索引成功!"); } else { System.out.println("数据插入ES索引失败!"); } } catch (IOException e) { e.printStackTrace(); } finally { try { client.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 创建Elasticsearch客户端 private static RestHighLevelClient createElasticsearchClient() { // 根据实际情况配置Elasticsearch连接参数并创建客户端 return new RestHighLevelClient(/* Elasticsearch连接参数配置 */); } // 返回第一个对象实例的示例方法,请根据实际情况替换成自己的实现 private static YourEntityClass getObject1() { YourEntityClass object1 = new YourEntityClass(); // 设置对象1的字段值 object1.setField1("value1"); object1.setField2("value2"); // ... 设置其他字段的值 return object1; } // 返回第二个对象实例的示例方法,请根据实际情况替换成自己的实现 private static YourEntityClass getObject2() { YourEntityClass object2 = new YourEntityClass(); // 设置对象2的字段值 object2.setField1("updatedValue1"); object2.setField2("updatedValue2"); // ... 设置其他字段的值 return object2; } } // 你的实体类示例,请根据实际情况替换成自己的实现 class YourEntityClass { private String field1; private String field2; // ... 其他字段 // getter和setter方法 public String getField1() { return field1; } public void setField1(String field1) { this.field1 = field1; } public String getField2() { return field2; } public void setField2(String field2) { this.field2 = field2; } // JSON序列化方法 public String toJson() { // 根据实际情况将对象转为JSON字符串 // 使用第三方库,如Gson、Jackson等 return /* 返回JSON字符串 */; } } ``` 这个示例程序包含了以下内容: 1. `YourEntityClass`类:代表你的实体类,其中包含了需要对比的字段和相关的getter和setter方法。 2. `getObject1()`和`getObject2()`方法:实例化第一个和第二个对象实例的示例方法,你需要根据实际情况替换成自己的实现。 3. `RestHighLevelClient`类:用于与Elasticsearch服务进行交互,你需要根据实际情况配置Elasticsearch连接参数并创建客户端。 4. 对象实例的字段值对比逻辑:通过比较两个对象实例的字段值是否相等,如果不相等,则将对象1的字段值更新对象2的字段值。 5. 在字段值更新后,将对象1的内容插入到Elasticsearch索引中。 ### 回答3: 在Java中,对比两个对象实体类字段的值并进行更新操作,然后插入ES索引的示例代码如下: 首先,我们假设有一个实体类Person,它有几个字段:id、name、age。 ```java public class Person { private long id; private String name; private int age; // 省略构造函数、getter和setter方法 } ``` 接下来,我们使用一个的Person对象实例来和已有的Person对象进行对比,判断是否有字段值不同,然后进行更新操作和插入ES索引。 ```java Person existingPerson = ...; // 已有的Person对象 Person newPerson = ...; // 的Person对象 // 对比id字段 if (existingPerson.getId() != newPerson.getId()) { existingPerson.setId(newPerson.getId()); } // 对比name字段 if (!existingPerson.getName().equals(newPerson.getName())) { existingPerson.setName(newPerson.getName()); } // 对比age字段 if (existingPerson.getAge() != newPerson.getAge()) { existingPerson.setAge(newPerson.getAge()); } // 更新操作 update(existingPerson); // 插入ES索引 insertIntoES(existingPerson); ``` 上述代码逐个字段对比,如果字段值不同就进行更新操作。在实际应用中,可能需要根据具体的业务需求来调整对比逻辑。 更新操作和插入ES索引的具体实现方法根据使用的技术栈不同而有所差异,比如使用Hibernate时,可以使用`Session.update()`方法更新数据库记录;使用Elasticsearch时,可以使用相应的Java客户端库来插入ES索引。 总之,以上示例代码提供了一个基本的框架,通过对比字段值的方式来实现更新操作和插入ES索引。根据具体的业务需求和技术栈选择相应的实现方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值