JDBC:数据库自定义类型与Java类的映射—将对象存储在关系数据库中(二)

这里利用PostgreSQL扩展的JDBC方法进行数据库自定义类型和Java类的映射关系,将Java对象插入关系数据库中。

步骤如下:

1.在数据库中自定义数据类型(CREATE TYPE TypeName AS) 2.在Java中新建对应的JavaBean,继承PGobject类,实现Serializable接口。 3.将数据库连接对象Connection接口强制转换成PGConnection,添加数据类型映射 ((PGConnection)connection).addDataType(TypeName, 类型对应JavaBean的类) 4.给JavaBean对象设置类型。利用setType方法,参数为数据库中的TypeName。 5.利用PreparedStatement的setObject方法设置。

下面给出实例代码:

自定义数据类型:

CREATE TYPE provider AS(
  name varchar(20),
  address varchar(20)
);

对应的Java类:

public class Student extends PGObject implements Serializable {
  private String name;
  private String address;

  public Student() {}

  public Student(String name, String address) {
    this.name = name;
    this.address = address;
  }

  public void setName(String name) {
    this.name = name;
  }
  public String getName() {
    return name;
  }

  public void setAddress(String address) {
    this.address = address;
  }
  public void getAddress() {
    return address;
  }
}

关系映射和数据插入:

try {
    String sqlStr = "INSERT INTO goods(id, name, price, type, provider) VALUES(?, ?, ?, ?, ?)";
    ((PGConnection)dbConnection).addDataType("provider", Provider.class);
    PreparedStatement pStatement = dbConnection.prepareStatement(sqlStr);
    pStatement.setInt(1, goods.getId());
    pStatement.setString(2, goods.getName());
    pStatement.setBigDecimal(3, goods.getPrice());
    pStatement.setString(4, goods.getType());
    goods.getProvider().setType("provider");
    pStatement.setString(5, goods.getProvider());
    pStatement.execute();
    pStatement.close();
} catch (Exception e) {
    e.printStackTrace();
}

搞了两天终于搞定了!有遇到类似问题的童鞋可以参考!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老九学堂

学编程能做什么工作?这5种高大上的工作你喜欢么!

学泥瓦工可以码砖头、学裁缝能做衣服,这个都有明确的方向。那我们学编程能从事那些工作呢?码农?岂止是码农!而且大家太小看码农了,码农也分了很多种,一起来看看吧!

1.7K40
来自专栏Golang语言社区

Golang学习笔记之方法(method)

一个方法只是一个函数,它有一个特殊的接收者(receiver)类型,该接收者放在 func 关键字和函数名之间。接收者可以是结构体类型或非结构体类型。可以在方法...

12440
来自专栏码匠的流水账

聊聊flink的MemCheckpointStreamFactory

flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointS...

9430
来自专栏程序员互动联盟

如何成为一名顶级的C/C++程序员?

从事c/c++开发已经差不多十几年了,C语言相对使用起来简单一些,做的项目多了经验积累多了,整体觉得更加可控一点,但是c++越做越觉得细节越多,也面试过几百人,...

28950
来自专栏码匠的流水账

聊聊flink的FsStateBackend

flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/StateBacken...

19770
来自专栏ACM算法日常

leetcode 14 | 最长公共前缀

分析:找到数组中长度最小的元素min(从后面更快的例子来看,这个好像不需要~),然后从min的第一字符开始,去查找剩余元素是否在相同位置是同一个字符。

14510
来自专栏Leetcode名企之路

【剑指offer】33.二叉树镜像

可以看到首先对根节点的左右进行翻转。 再递归的对左子树,以及右子树进行翻转。 之前讲过,链表的题目分为四个步骤:连过来、指针走、断后路、调状态。 二涉及到树的...

6620
来自专栏Java3y

一些常用的算法技巧总结

今天和大家讲讲,在做算法题时常用的一些技巧。对于平时没用过这些技巧的人,或许你可以考虑试着去看看在实践中能否用的上这些技巧来优化问题的解。

14230
来自专栏人工智能LeadAI

Pandas-层次化索引

层次化索引是pandas的一项重要功能,它能使你在一个轴上有多个索引级别,也就是说,它能使你以低维度形式处理高维度数据,比如下面的代码:

20620
来自专栏码匠的流水账

聊聊flink的MemoryBackendCheckpointStorage

本文主要研究一下flink的MemoryBackendCheckpointStorage

9240

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励