小编Old*_*eon的帖子

MERGE是SQL2008中的原子语句吗?

我使用MERGE声明作为UPSERT添加新记录或更新当前记录.我有多个线程通过多个连接和多个语句驱动数据库(每个线程一个连接和语句).我一次批处理语句50.

duplicate key在考试期间遇到违规行为,我感到非常惊讶.我希望这是不可能的,因为MERGE它将作为单个交易执行,或者是它?

我的Java代码如下:

private void addBatch(Columns columns) throws SQLException {
  try {
    // Set parameters.
    for (int i = 0; i < columns.size(); i++) {
      Column c = columns.get(i);
      // Column type is an `enum` with a `set` method appropriate to its type, e.g. setLong, setString etc.
      c.getColumnType().set(statement, i + 1, c.getValue());
    }
    // Add the insert as a batch.
    statement.addBatch();
    // Ready to execute?
    if (++batched >= MaxBatched) {
      statement.executeBatch(); …
Run Code Online (Sandbox Code Playgroud)

java sql upsert sql-server-2008

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

我应该关闭FileChannel吗?

我今天遇到了一个我们的实用工具类的问题.它是文件的助手,包含一些静态文件复制例程.以下是与测试方法一起提取的相关方法.

问题是有时setLastModified调用失败,返回false.

在我的PC上(Windows 7,最新的Java),我有时会收到"setLastModified failed"消息(大约25次中的1000次).

我现在通过删除FileChannel.close调用解决了这个问题,但我更愿意理解为什么会发生这种情况,即使这是正确的解决方案.

有没有其他人得到同样的问题?

private void testCopy() throws FileNotFoundException, IOException {
  File src = new File("C:\\Public\\Test-Src.txt");
  File dst = new File("C:\\Public\\Test-Dst.txt");

  for (int i = 0; i < 1000; i++) {
    copyFile(src, dst);
  }
}

public static void copyFile(final File from, final File to) throws FileNotFoundException, IOException {
  final String tmpName = to.getAbsolutePath() + ".tmp";
  // Copy to a .tmp file.
  final File tmp = new File(tmpName);
  // Do the transfer.
  transfer(from, tmp);
  // Preserve time.
  if …
Run Code Online (Sandbox Code Playgroud)

java filechannel

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

有没有一种安全的方法来判断JDBC连接是否仍然正常?

我们有一个Web服务器处理来自客户端的请求.此Web服务器的一个组件包含与数据库的连接.

在开始使用之前,我需要能够识别连接是否已关闭或在某种程度上不再起作用.目前我做的事情如下:

// Decide connection details on alias.
private String alias = null;
// I must have my own because I prepare statements.
private Connection connection = null;

public Connection getConnection() {
  try {
    if ( connection.isClosed() ) {
      // Start afresh.
      connection = null;
    }
    // ** More tests here to check connection is ok.
    if (connection == null) {
      // Make a new connection.
      connection = Connections.getConnection(alias);
    }
  } catch (SQLException ex) {
    // Cause a NPE further …
Run Code Online (Sandbox Code Playgroud)

java connection connection-pooling jdbc

12
推荐指数
3
解决办法
2万
查看次数

等于和可比较集

我在这里发布了一些代码,正确解决了海报的问题.OP希望删除重复项并将某些特殊项目放在列表顶部.我使用了TreeSet一个特殊的Comparable课程,它包含了Locale他们正在努力实现他们想要的东西.

然后我开始思考......正如你所做的那样...我通过0compareTo方法返回来消除重复,而不是trueequals实现返回,因为需要做的是正确地指示副本Set(从定义中)Set).

我不反对使用这种技术但是我使用的是什么可能被视为无证件的功能?我可以安全地假设继续这样做会继续发挥作用吗?

java equals compareto comparable treeset

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

使用ajaxSubmit替换DOM的各个部分时,我应该怎么处理tinyMCE?

在多标签页上,一些标签submit处理通过一个标签更改其他标签的内容ajaxSubmit.如果其他选项卡包含有效tinyMCE编辑,在更换内容之前应该对该选项卡执行什么操作以及在替换后我应该做什么(如果有的话)?

目前,代码tinyMCE.execCommand("mceRemoveControl", true, ed_id);在目标选项卡中的所有编辑器上执行,并依赖于系统的正常功能,以便在更改后将其恢复.这就是必要的吗?我tinyMCE在更改后在代码中遇到了模糊的异常,但很难发现原因.

错误本身是SCRIPT5022:IndexSizeError - tiny_mce.js(1,78075)但我怀疑这是特别相关的.

TinyMCE v3.4.5

javascript ajax jquery tabs tinymce-3

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

Lambdas和putIfAbsent

我在这里发布了一个答案,其中代码演示了如何使用read putIfAbsent方法ConcurrentMap:

ConcurrentMap<String, AtomicLong> map = new ConcurrentHashMap<String, AtomicLong> ();

public long addTo(String key, long value) {
  // The final value it became.
  long result = value;
  // Make a new one to put in the map.
  AtomicLong newValue = new AtomicLong(value);
  // Insert my new one or get me the old one.
  AtomicLong oldValue = map.putIfAbsent(key, newValue);
  // Was it already there? Note the deliberate use of '!='.
  if ( oldValue != …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

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

一些Java 7警告 - 如何删除它们

我终于试图摆脱Java 7所产生的所有新编译器警告.我这两个人离开了,我无法理解.有没有办法摆脱它们而不压制它们?

构造一般类型的对象数组(我可以在数组中创建一个?):

  static final int N = 10;
//warning: [unchecked] unchecked conversion
  static final Set<Widget>[] queued = new ConcurrentSkipListSet[N];
//required: Set<Widget>[]
//found:    ConcurrentSkipListSet[]
Run Code Online (Sandbox Code Playgroud)

通用varargs(似乎几乎发生在我接受泛型类型的varargs的地方):

class Foo<T> {
//warning: [unchecked] Possible heap pollution from parameterized vararg type T
  public void add(T... entries) {
//where T is a type-variable:
//T extends Object declared in class Foo
Run Code Online (Sandbox Code Playgroud)

顺便说一句:我已经:

  // Add many entries to the list.
  public void add(List<T> entries) {
    // ...
  }

  // Add a number of entries.
  public void add(T... …
Run Code Online (Sandbox Code Playgroud)

java netbeans compiler-warnings

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

有两次获得完全相同的对象引用的可能性有多大

我有时会认为,如果oldObject != newObject那时对象已经改变了 - 在大多数情况下这似乎是一个公平的假设,但它真的是一个错误的假设吗?

简而言之,在什么情况下,以下代码可以打印"相同!"?

static WeakReference<Object> oldO = null;
...

Object o = new Object();
oldO = new WeakReference(o);

// Do some stuff with o - could take hours or even days to complete.
...

// Discard o (or let it go out of scope).
o = null;

// More stuff - could be hours or days later.
...
o = new Object();

// Later still.
if ( o == oldO.get() ) {
  System.out.println("Same!");
}
Run Code Online (Sandbox Code Playgroud)

我意识到这确实是远程可能的,因为对象引用本质上是对象的内存地址(或者可能在某些JVM中).但它有多大可能?我们是否在实际发生之前谈论了几十年的运行时间? …

java

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

synchronized的用例(new Object())

在最近的回答中,我建议可以在包含我们需要的变量的对象上实现volatileby 的功能(asker无法访问代码中的变量).synchronizingvolatile

这让我觉得我实际上不需要阻塞包含对象,我只需要实现内存屏障.由于synchronized实现同步内存屏障,如果我只需要内存屏障(在这种情况下),实际上更好的是synchronized(new Object())用来实现我的内存屏障确保锁永远不会争用?

java multithreading synchronization shared-memory

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

线程之间的Java同步列表.最佳实践

当发生某些更改时,我正在创建数据库日志记录引擎.这些更改将被推送到一个线程中的队列,该线程每隔50ms处理队列中的25个LogObject.

我正在考虑使用Collections.synchronizedList()来保存我仍然需要在线程中处理的对象.

主应用程序线程通过ThreadObjInstance.LogList.add(new LogObject("Something to log");我在线程中将LogObjects推送到列表中LogObject x = LogList.shift();来处理它.

但是我觉得可能有更好的方法可以做到这一点,或者这是一种完全可以接受的方法吗?或者我应该使用ArrayBlockingQueue来处理他的情况?或者另一个同步的列表对象......有很多选择.

这是我第一次使用线程,所以我试图弄清楚作业队列的最佳方法是什么,以及用于维护它的对象.我可以直接将内容添加到线程列表中吗?或者我需要在线程中使用同步方法吗?

问题基本上是:

  1. 在哪里存储同步的对象列表以在两个线程之间进行处理(在处理线程或主线程中?)
  2. 从列表中添加/删除项目的最佳做法是什么?通过synchronized函数或直接在List对象上?
  3. 构建作业队列时,我对List对象的选择是什么?

java multithreading

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