小编Dus*_*sty的帖子

在PostgreSQL中返回插入的行

我目前正在开发一个报告生成servlet,它可以聚合来自多个表的信息并生成报告.除了返回结果行之外,我还将它们存储到报告表中,以便以后不需要重新生成它们,并且如果从中抽取它们的表将被擦除,它们将保持不变.为了做后者,我有一个表单的声明(注意:x是外部生成的,实际上是这个语句中的常量):

INSERT INTO reports
   (report_id, col_a, col_b, col_c)
SELECT x as report_id, foo.a, bar.b, bar.c
FROM foo, bar
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我需要第二个查询来实际返回结果行,例如

SELECT col_a, col_b, col_c
FROM reports
WHERE report_id = x
Run Code Online (Sandbox Code Playgroud)

这工作正常,因为它只涉及单个表,不应该是昂贵的,但似乎我应该能够直接返回插入的结果,避免第二个查询.有没有一些语法可以做到这一点,我找不到?(我应该注意,我在数据库工作方面相当新,所以如果正确答案只是运行第二个查询,因为它只是稍微慢一些,所以就这样吧)

postgresql

16
推荐指数
2
解决办法
1万
查看次数

复制java中类似类之间的字段

我有一对类,其中一个的字段是另一个字段的子集,超集类的getter都是可预测的名字(getFoo()).有没有办法有效地将所有公共字段从超集类复制到子集类,或者至少自动生成代码来执行此操作.

我应该注意到:

  • 由于各种原因,我无法编辑超集类,也无法在整个过程中使用它们以避免必须进行数据复制.
  • 我可以在子集类中创建新方法,但我不能更改它们的字段.
  • 我们有很多这样的对,有些类有很多字段,所以手工做这件事至少可以说是笨拙的.
  • 一位同事提出了一种创建泛型复制方法的方法,该方法使用java反射来获取任意两个类,以字符串形式迭代,执行字符串操作以确定getter名称,然后执行它以自动设置字段子集类.这很糟糕,但似乎有效.我真的希望有更好的方法.

编辑:一些简单的代码请求

public class SuperClass {
  private int foo;
  private int bar;
  private float bat;
  public int getFoo() { return foo; }
  public int getBar() { return bar; }
  public float getBat() { return bat; }
}

public class SubClass {
  private int foo;
  private float bat;
}

//wanted
public static copySuperFieldsToSubMethod(Object super, Object sub) { ??? }

// also acceptable would be some way to autogenerate all the assignment 
// …
Run Code Online (Sandbox Code Playgroud)

java

12
推荐指数
1
解决办法
9922
查看次数

sscanf包装函数在C中前进字符串指针

我有一个函数,它进行一系列调用sscanf(),然后,在每个函数之后,更新字符串指针以指向未被消耗的第一个字符,sscanf()如下所示:

if(sscanf(str, "%d%n", &fooInt, &length) != 1)
{ 
   // error handling
}
str+=length;
Run Code Online (Sandbox Code Playgroud)

为了清理它并避免重复这几次,我想把它封装成一个很好的实用函数,看起来如下所示:

int newSscanf ( char ** str, const char * format, ...)
{
  int rv;
  int length;
  char buf[MAX_LENGTH];
  va_list args;

  strcpy(buf, format);
  strcat(buf, "%n");
  va_start(args, format);
  rv = vsscanf(*str, buf, args, &length);  //Not valid but this is the spirit
  va_end(args);
  *str += length;

  return rv;
}
Run Code Online (Sandbox Code Playgroud)

然后我可以简化下面的调用来删除附加参数/簿记:

if(newSscanf(&str, "%d", &fooInt) != 1)
{ 
   // error handling
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我找不到一种方法将&length参数直接附加到arg列表的末尾或其他内部newSscanf().有没有办法解决这个问题,或者我是否也可以在每次通话时手动处理簿记?

c scanf variadic-functions

7
推荐指数
1
解决办法
2498
查看次数

Java中静态和非静态最终原始字段之间的性能差异

我最近遇到了一个声明了以下字段的类:

private final int period = 1000;
Run Code Online (Sandbox Code Playgroud)

在这个特殊的情况下,作者原本打算使它也是静态的,因为价值在任何时候都无法改变,没有真正的功能理由不宣布它是静态的,但它让我想知道Java如何对待最终vs最终的静态原语.

特别是:

1)最终的静态基元是如何存储的?它们是否只是直接编译成使用它们的表达式?

2)如果它们实际上是分配存储,那么包含类的每个实例是否必须维护对该位置的引用?(在这种情况下,对于小于4个字节的基元,该类的每个实例实际上都会比直接包含基元的情况更大,就像它在非静态情况下那样)

3)编译器现在是否足够智能,以确定在上述情况下,变量是"有效静态的",因为不可能让不同的实例包含不同的值,因此优化它与最终的静态值相似?

java static final private

7
推荐指数
1
解决办法
4416
查看次数

C++相当于Python len()函数?

我有一个整数,需要找出它中有多少位数.

c++

6
推荐指数
5
解决办法
3082
查看次数

在Java中键入本地集合的约定

我最近遇到了一组代码,它实例化了本地地图如下:

HashMap<String, Object> theMap = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)

通常,当我看到使用HashMaps(并自己使用它们)时,局部变量就是Map(接口),而不是绑定到特定的实现.显然,如果Map可以将其实例化为Map各种类型(例如,接受参数),则这是必需的.但是,在类似于上面的内容的情况下,它在同一点被定义和实例化,是否只有使用接口类型的潜在原因,或者它只是样式/约定?

java coding-style naming-conventions

2
推荐指数
2
解决办法
158
查看次数

算术移位

逻辑右移和算术右移有什么区别?

objective-c bit-shift

1
推荐指数
1
解决办法
1878
查看次数