- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想知道PostgreSQL的JDBC驱动42.2.8是否支持UDT映射?
我在 SQLData
实现上苦苦挣扎了一段时间,但遇到了错误:
org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of persistent.udt.fiscal.Partner. Use setObject() with an explicit Types value to specify the type to use.
at org.postgresql.jdbc@42.2.8/org.postgresql.jdbc.PgPreparedStatement.setObject(PgPreparedStatement.java:955)
at commons.dbcp2@2.5.0/org.apache.commons.dbcp2.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:519)
at commons.dbcp2@2.5.0/org.apache.commons.dbcp2.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:519)
CREATE TYPE fiscal.partner AS
(
type eik_type,
eik character varying(20),
vat character varying(20),
name character varying(255),
alternative_name character varying(255),
city character varying(255),
address text,
contact character varying(255),
description text,
bank fiscal.bank
);
CREATE TABLE fiscal.sales
(
id integer NOT NULL DEFAULT nextval('fiscal.sales_id_seq'::regclass),
date timestamp without time zone NOT NULL DEFAULT now(),
transaction_id integer NOT NULL,
transaction_date timestamp without time zone NOT NULL,
discount_type discount_type NOT NULL,
discount numeric(10,2) NOT NULL,
amount_discount numeric(10,2) NOT NULL,
amount_total numeric(10,2) NOT NULL,
amount_tax numeric(10,2) NOT NULL,
supplier_partner fiscal.partner NOT NULL,
supplier_workplace fiscal.workplace NOT NULL,
by_user_id character(4) COLLATE pg_catalog."default" NOT NULL DEFAULT current_setting('app.user_id'::text),
by_first_name character varying(255) COLLATE pg_catalog."default" NOT NULL DEFAULT current_setting('app.user_first_name'::text),
by_sur_name character varying(255) COLLATE pg_catalog."default" NOT NULL DEFAULT current_setting('app.user_sur_name'::text),
by_last_name character varying(255) COLLATE pg_catalog."default" NOT NULL DEFAULT current_setting('app.user_last_name'::text),
CONSTRAINT sales_pkey PRIMARY KEY (id, date),
CONSTRAINT sales_transaction_id_transaction_date_fkey FOREIGN KEY (transaction_date, transaction_id)
REFERENCES fiscal.transactions (date, id) MATCH SIMPLE
ON UPDATE RESTRICT
ON DELETE RESTRICT,
CONSTRAINT sales_transaction_id_transaction_date_fkey1 FOREIGN KEY (transaction_date, transaction_id)
REFERENCES fiscal.transactions_default (date, id) MATCH SIMPLE
ON UPDATE RESTRICT
ON DELETE RESTRICT,
CONSTRAINT sales_by_user_id_check CHECK (by_user_id ~ '[0-9A-Z]{4}'::text)
) PARTITION BY RANGE (date) ;
public class Partner implements SQLData {
public static final String TYPE = "fiscal.partner";
private String type;
private String eik;
private String vat;
private String name;
private String alternativeName;
private String city;
private String address;
private String contact;
private String description;
private Bank bank;
public Partner() {
}
@Override
public String getSQLTypeName() throws SQLException {
return TYPE;
}
@Override
public void readSQL(SQLInput stream, String typeName) throws SQLException {
....
}
@Override
public void writeSQL(SQLOutput stream) throws SQLException {
....
}
}
public boolean open(Location location, DiscountType discountType, BigDecimal discount, BigDecimal amountDiscount, BigDecimal amountTotal, BigDecimal amountTax) throws SQLException {
String query =
"insert into fiscal.sales (transaction_id, transaction_date, discount_type, discount, amount_discount, amount_total, amount_tax, supplier_partner, supplier_workplace) " +
"values (?, ?, ?::public.discount_type, ?, ?, ?, ?, ?::fiscal.partner, ?) " +
"returning id, date";
Map<String, Class<?>> map = new HashMap<>();
map.put(Partner.TYPE, Partner.class);
connection.setTypeMap(map);
try(PreparedStatement statement = connection.prepareStatement(query)) {
int index = 1;
statement.setLong(index++, transaction_id);
statement.setTimestamp(index++, Timestamp.valueOf(transaction_date));
statement.setString(index++, discountType.name());
statement.setBigDecimal(index++, discount);
statement.setBigDecimal(index++, amountDiscount);
statement.setBigDecimal(index++, amountTotal);
statement.setBigDecimal(index++, amountTax);
statement.setObject(index++, new Partner());
statement.setObject(index++, new Workplace());
try(ResultSet rs = statement.executeQuery()) {
if(rs.next()) {
sale_id = rs.getLong("id");
sale_date = rs.getTimestamp("date").toLocalDateTime();
return true;
}
return false;
}
}
}
最佳答案
这不会自动起作用;您必须自己将数据“序列化”为 PostgreSQL 复合类型的字符串表示形式,例如:
statement.setString(index++, "(42,string,\"string,with,comma\",,-1)");
在此示例中,类型由一个数字、两个字符串、一个 NULL 值和另一个数字组成。
如果您不需要它用于其他目的,您可以重写此类的 toString
方法来生成此表示形式。这会让事情变得简单。
关于java - PostgreSQL 映射 UDT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59175647/
我有 table emp(id,name,list>) 。这里地址是cassandra UDT定义为create TYPE address (hno int,street text); 。我试图使用下
官方文档告诉我们不要对主键使用 UDT。这有什么特别的原因吗?这样做的潜在缺点是什么? 最佳答案 这句话是为了劝阻用户不要对 PK 列不加区别地使用 UDT。 UDT 在其当前版本中的主要动机(即,考
假设我有一组 UDT。我按如下方式填充它: public type udtEmp Id as long Name as string end type dim col as new C
Cassandra 表和UDT CREATE TYPE IF NOT EXISTS phone_type( code TEXT, phone TEXT, ); CREATE TABLE I
我有一个 Java 应用程序,其中有 Spark-1.4.0 和 Cassandra-2.1.5 以及 Cassandra-Spark-connection-1.4。 0-M1. 在此应用程序中,我尝
多年来,我一直避免在 VBA 中使用 Public Type UDT,因为它们很难传递,而且我从来没有真正费心去理解为什么……直到现在 - 它是只需创建一个类模块并改为使用实际对象就更容易了。 但最近
我编写了一个返回用户定义类型的函数。 如果函数出现任何错误,我如何返回一个空的 UDT? 我尝试将函数设置为“无”,但它抛出“需要对象”错误。 提前致谢。 最佳答案 如果可能,请改用类/对象。甚至可以
This is my mssql UDT create type ConditionUDT as Table ( Name varchar(150), PackageId int );
这是我接收 UTD 消息的程序。我打算用它通过 wifi 接收 640*480 YUV 图像。我应该设置多大的缓冲区?是否可以在接收到第一张图像后设置缓冲区以找出实际大小? 下面是我的全部代码,但基本
我使用 UDT 库发送我的数据。但似乎无法正确发送 unsigned char* 数据。一方面我发送它就像 int rc = UDT::sendmsg(socket, full_data, size,
可以对卡住列使用聚类键吗? 也许: CREATE TYPE user_details ( email varchar, password varchar, createdAt timest
我想知道PostgreSQL的JDBC驱动42.2.8是否支持UDT映射? 我在 SQLData 实现上苦苦挣扎了一段时间,但遇到了错误: org.postgresql.util.PSQLExcept
我正在使用 netty + udt + rendezvous 测试此示例的修改版本: http://netty.io/4.0/xref/io/netty/example/udt/echo/rendez
我想要一种通用的方法来为任何 C++ 用户定义的类型创建唯一的编译时标识符。 例如: unique_id::value == 0 // true unique_id::value == 1 // tr
我有一个循环,它读取一堆 XML 文件,对于每个文件,它验证 XML 中的数据并将其加载到一些 UDT 中,然后对数据进行一些工作。 然后它返回到循环的开头,UDT 仍然有来自前一个 XML 的数据。
我尝试使用 SparkSQL (v.1.3.0) 访问 PostgreSQL 数据库。在这个数据库中,我有一个表 CREATE TABLE test ( id bigint, values dou
我需要根据 IP 地址存储有关用户位置的记录,但我不确定如何最好地对其进行建模。 对于每个地址,我们需要记录机器的详细信息(ipaddress、agentId)和机器的位置(isocode、城市)。此
我正在尝试通过 DB2 使用嵌套结构化类型 (UDT),但遇到了一些问题。 以下是为用例创建类型、表、函数和转换的 SQL 语句。每个语句都执行得很好,但是在尝试执行简单的操作时会发生错误从 t_au
我正在 Cassandra 2.1 中尝试使用 UDT,并且遇到了 InvalidTypeExeception。 我将表格设置为: session.execute("CREATE TYPE myke
我有一个 COM 服务器,其方法当前返回一个整数: [ object, uuid("..."), dual, helpstring("IMyCOMServer Inte
我是一名优秀的程序员,十分优秀!