我正在调查Jooq,发现了一些我几乎找不到文档的东西——没有一个能完全诚实地回答我的问题。
我想做的是在表中有一列,比如permissions Variable bit(2000)(Postgres 9.5)
然而,Jooq对此所做的是将其视为varchar...这显然是不正确的,即使在一代。在这样的事情上,成功的捷径是什么?
我的课程正在进行中,但有了它,我可以存储不同的信息:
public class BitSetBinding implements Binding<String, BitSet> {
private static final long serialVersionUID = 1L;
@Override
public final void sql(final BindingSQLContext<BitSet> ctx) throws SQLException {
ctx.render().visit(DSL.val(ctx.convert(converter()).value())).sql("::bit");
}
@Override
public final void register(final BindingRegisterContext<BitSet> ctx) throws SQLException {
ctx.statement().registerOutParameter(ctx.index(), Types.VARCHAR);
}
@Override
public final void set(final BindingSetStatementContext<BitSet> ctx) throws SQLException {
throw new SQLFeatureNotSupportedException();
// this most likely won't work: ctx.statement().setString(ctx.index(), castToBit(convert(ctx.convert(converter()).value(),
// String.class)));
}
@Override
public final void set(final BindingSetSQLOutputContext<BitSet> ctx) throws SQLException {
throw new SQLFeatureNotSupportedException();
}
@Override
public final void get(final BindingGetResultSetContext<BitSet> ctx) throws SQLException {
// Get a result set, ie. convert something like '00000000' to a BitSet
final String fromDatabase = ctx.resultSet().getString(ctx.index());
ctx.convert(converter()).value(fromDatabase);
}
@Override
public final void get(final BindingGetStatementContext<BitSet> ctx) throws SQLException {
ctx.convert(converter()).value(ctx.statement().getString(ctx.index()));
}
@Override
public final void get(final BindingGetSQLInputContext<BitSet> ctx) throws SQLException {
throw new SQLFeatureNotSupportedException();
}
@Override
public Converter<String, BitSet> converter() {
return new BitSetConverter();
}
/**
* Converter referenced by jOOQ
*/
private static class BitSetConverter extends AbstractConverter<String, BitSet> {
private static final long serialVersionUID = 1L;
public BitSetConverter() {
super(String.class, BitSet.class);
}
@Override
public BitSet from(final String databaseObject) {
if (databaseObject == null) {
return null;
}
final BitSet bs = new BitSet();
int pos = databaseObject.indexOf('1');
while (pos != -1) {
bs.set(pos);
pos = databaseObject.indexOf('1', pos + 1);
}
return bs;
}
@Override
public String to(final BitSet userObject) {
if (userObject == null) {
return null;
}
final StringBuilder sb = new StringBuilder();
for (int k = 0; k < userObject.length(); k++) {
sb.append(userObject.get(k) ? '1' : '0');
}
return sb.toString();
}
}
}
我不确定将PostgreSQL的“位字符串”类型映射到java的设计决策是什么。lang.String
was。我甚至不排除一个疏忽,即即使它们被称为“位字符串”,它们也不是真正的字符串。
我认为最适合表示这一点的Java类型是位集
。因此,您理想的未来方式是实现表单的数据类型绑定:
public class VaryingBitBinding extends Binding<String, BitSet> {
// ...
}
并在JDBC级别实现它。然后,可以将此绑定挂接到代码生成器中:
<forcedType>
<userType>java.util.BitSet</userType>
<binding>com.example.VaryingBitBinding</binding>
<types>varying\ bit</types>
</forcedType>
问题内容: 我如何在for循环中创建变量变量? 这是循环: 在此循环中,我想为每次传递创建一个$ seat变量,但必须像这样递增。第一次通过应该是,下次通过:等等。 所以最后应该是: 等等。 因此$ _POST的变量和内容应该是动态的。 问题答案: 首先,除非缺少某些内容,否则我将为此使用数组。具有像变量,等趋于具有少得多的效用和是更为繁琐比使用的阵列。 话虽这么说,使用以下语法: 最后,PHP具
我有一个内联变量函数内联int foo(…) 我需要调用一个宏(我们称它为宏),它也是可变的 基本上,我需要将其所有输入参数传递给宏。由于使用了选项,将重新定义为另一个宏将是一个简单的解决方案,但我还需要来返回值<注意:我正在尝试连接已编写代码的两部分,不允许更改它们<代码>foo(…) 用于代码的第一部分,宏定义于第二部分。我要做的唯一一件事就是定义一个使用宏的foo(),我不能,因为它们都是可
变量绑定默认是不可变的,但加上 mut 修饰语后变量就可以改变。 fn main() { let _immutable_binding = 1; let mut mutable_binding = 1; println!("Before mutation: {}", mutable_binding); // 正确代码 mutable_binding += 1
本文向大家介绍python不可变变量?相关面试题,主要包含被问及python不可变变量?时的应答技巧和注意事项,需要的朋友参考一下 不可变对象是指不可以被引用改变的对象,如字符串 #
null null null 所以现在,如果我想把一个应用程序部署到舞台上,我可以简单地运行这个playbook命令: 例如,我将staging/group_vars/webserver中的app1目录的路径定义为“/var/www/staging.app1.com”。但是我也需要为app2部署到相同的服务器上,但是目录不同。是否可以在group_vars中使用条件变量? 所以如果我跑: 敬请指教
问题内容: 我正在努力使可变对象与不可变对象有关。使用可变对象会带来很多负面影响(例如,从方法中返回字符串数组),但是我很难理解它的负面影响。使用可变对象的最佳实践是什么?您是否应尽可能避免使用它们? 问题答案: 好吧,这有几个方面。 没有参考身份的可变对象会在奇数时间导致错误。例如,考虑使用基于值的方法的 : 当实例用作键时,实例在映射中“丢失”,因为实例和相等性基于可变值。这些值在映射之外更改