小编Mik*_*e Q的帖子

如何关闭java.sql.DataSource

我们有一个按日期划分数据的系统.因此,例如在SqlServer中,我们每月有一个数据库.每个月分区使用包含在C3P0连接池DataSource中的Jdbc驱动程序数据源.

经过一段时间后,分区的日期范围变得足够大,我们想要使其脱机.在这种情况下,我们只从可用列表中删除相关月份的DataSource.但是,理想情况下,当离线时我想"关闭"DataSource,以便池放弃所有与DB的连接.

DataSource没有密切的方法让我打电话所以我不知道如何清理它.

有什么建议?

java datasource c3p0

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

Dictionary.Equals()有实现吗?

我有一个字典,我将其与另一个字典进行比较(变量类型为IDictionary).执行d1.Equals(d2)会产生错误.在下面编写自己的代码会产生真实.两者都是System.Collections.Generic.Dictionary.我缺少的东西或根本Dictionary没有一个Equals是比较键/值执行?

private static bool DictEquals<K, V>(IDictionary<K, V> d1, IDictionary<K, V> d2)
{
    if (d1.Count != d2.Count)
        return false;

    foreach (KeyValuePair<K, V> pair in d1)
    {
        if (!d2.ContainsKey(pair.Key))
            return false;

        if (!Equals(d2[pair.Key], pair.Value))
            return false;
    }

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

c# dictionary equals

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

在Hibernate Validator中为每个属性生成错误代码

我正在考虑使用Hibernate Validator来满足我的要求.我想验证一个JavaBean,其中属性可能有多个验证检查.例如:

class MyValidationBean
{
   @NotNull
   @Length( min = 5, max = 10 )
   private String myProperty;
}
Run Code Online (Sandbox Code Playgroud)

但是如果此属性验证失败,我想要一个特定的错误代码与ConstraintViolation相关联,无论它是否由于@Required或@Length而失败,尽管我想保留错误消息.

class MyValidationBean
{
   @NotNull
   @Length( min = 5, max = 10 )
   @ErrorCode( "1234" )
   private String myProperty;
}
Run Code Online (Sandbox Code Playgroud)

像上面这样的东西会很好,但它不一定要像那样结构.我看不到用Hibernate Validator做这个的方法.可能吗?

java validation hibernate-validator

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

内存索引

我有一个Session的概念,它存储各种状态的对象.

有时我需要扫描Session以查找与特定查询匹配的对象,但是我做了很多,性能测试表明它已经成为某些领域的瓶颈.

因此,我想在Session上介绍索引的概念.

就像是...

public IDictionary<K, V> GetIndex<K, V>(Func<V, K> keySelector)
Run Code Online (Sandbox Code Playgroud)

但是我不确定如何像这样测试Func的"相等".显然我希望索引只能在第一次调用GetIndex和后续调用时再构建它.

我应该如何在内部映射这些以进行索引存在查找?

IDictionary<???, IDictionary<K, V>> indexes = ...
Run Code Online (Sandbox Code Playgroud)

基本上我应该如何存储???.也许我不能用Func做到这一点,但也许还有其他方法.

.net c# indexing dictionary

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

MySql批量加载命令行工具

MySql是否有批量加载命令行工具,如bcp for SQLServer和sqlldr for Oracle?我知道有一个SQL命令LOAD INFILE或类似命令,但我有时需要将一个不同的文件块批量加载到MySQL数据库.

mysql sql bulkinsert load-data-infile

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

BinaryReader.ReadChars()的问题

我遇到了我认为BinaryReader.ReadChars()方法的问题.当我在原始套接字NetworkStream周围包装BinaryReader时偶尔会出现流损坏,其中正在读取的流不同步.所讨论的流包含二进制序列化协议中的消息.

我已将此跟踪到以下内容

  • 它只在读取unicode字符串时发生(使用Encoding.BigEndian编码)
  • 只有当有问题的字符串被分成两个tcp数据包时才会发生(使用wireshark确认)

我认为发生的事情如下(在下面的例子中)

  • 调用BinaryReader.ReadChars()要求它读取3个字符(字符串长度在字符串本身之前编码)
  • 第一个循环在内部请求从网络流中读取6个字节(3个剩余字符*2个字节/字符)
  • 网络流只有3个字节可用
  • 3个字节读入本地缓冲区
  • 缓冲区交给解码器
  • 解码器解码1个字符,并将另一个字节保留在它自己的内部缓冲区中
  • 第二个循环内部请求读取4个字节!(2个剩余字符*2个字节/字符)
  • 网络流有4个可用字节
  • 4个字节读入本地缓冲区
  • 缓冲区交给解码器
  • 解码器解码2个字符,并在内部保留剩余的第4个字节
  • 字符串解码完成
  • 序列化代码试图解组下一个项目并因为流损坏而呱呱叫.

    char[] buffer = new char[3];
    int charIndex = 0;
    
    Decoder decoder = Encoding.BigEndianUnicode.GetDecoder();
    
    // pretend 3 of the 6 bytes arrives in one packet
    byte[] b1 = new byte[] { 0, 83, 0 };
    int charsRead = decoder.GetChars(b1, 0, 3, buffer, charIndex);
    charIndex += charsRead;
    
    // pretend the remaining 3 bytes plus a final byte, for something unrelated,
    // arrive next
    byte[] …
    Run Code Online (Sandbox Code Playgroud)

.net c# binaryreader

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

交叉连接行为(SQLServer 2008)

我一直试图通过我的查询来追踪问题.查询实际上是由HQL从HQL生成的,但生成的SQL没有达到我的预期.稍微修改SQL会产生正确的结果,但我不确定为什么修改应该有所不同.

原始查询(不返回任何行)

select sched.id, max(txn.dttm), acc.id
from PaymentSchedulePeriod sched 
cross join PaymentSchedulePayment pay
right outer join AccountTransaction txn on pay.accountTransactionFk=txn.id 
right outer join Account acc on txn.accountFk=acc.id 
where sched.accountFk=acc.id 
group by sched.id, acc.id
Run Code Online (Sandbox Code Playgroud)

修改后的查询 - 用逗号替换交叉连接(隐式交叉连接)

返回一行

select sched.id, max(txn.dttm), acc.id
from PaymentSchedulePeriod sched 
,PaymentSchedulePayment pay
right outer join AccountTransaction txn on pay.accountTransactionFk=txn.id 
right outer join Account acc on txn.accountFk=acc.id 
where sched.accountFk=acc.id 
group by sched.id, acc.id
Run Code Online (Sandbox Code Playgroud)

我的理解可能是不正确的,写作from Table1 a, Table2 b与写作是一样的from Table 1 a cross join Table2 …

sql sql-server outer-join cross-join sql-server-2008

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

我的方法是Winforms编码老派

我正在开发的项目非常庞大,我们开发了一个框架,可以轻松构建简单的UI屏幕.我们有两种基本类型:搜索(搜索参数+结果网格)和细节(一组编辑器,通常从一些模型对象填充).

该应用程序是所有C#.NET Winforms.

在细节中,我们有以下过程.

  • 加载 - 根据相应的模型对象填充编辑控件.在显示详细信息之前调用

用户点击确定

  • 验证 - 验证详细信息以确保一致性
  • 接受 - 将更新的控制值复制回模型

这一切都适用于简单的东西,但在更复杂的情况下,我注意到上述方法可能并不是最顺利的.

上面提到的更复杂的情况是,细节表示模型对象,并且细节中嵌入了一个网格,其中包含可以添加和删除的"子"对象.通常,您希望启动子Detail并传入父模型对象,但此时它尚未完全填充/更新,因为只有在单击OK时才会发生.我发现自己有时会以恼人的方式解决这个问题,这引出了我以下问题.

在高级别,是细节屏幕的接受/最佳实践方法,就像我描述的那样,当控件更改时将值复制到模型对象,而不是等到单击确定?

如果是这样,在Winforms应用程序中,实现这一目标的最佳方法是什么?我发现有些文章提到Control.DataBindings但由于绑定时缺乏编译时安全性,因此它并不理想.我读过WPF有很好的绑定支持,但不幸的是,我没有使用WPF.

c# lifecycle binding winforms

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

只读取它时是否必须使用线程安全的Map实现?

如果我做以下事情.

  • 创建一个HashMap(在最后一个字段中)
  • 填充HashMap
  • 用不可修改的包装器Map包装HashMap
  • 启动将访问但不修改Map的其他线程

据我所知,Map已经"安全发布",因为其他线程是在Map完全填充后启动的,所以我认为从多个线程访问Map是可以的,因为在此之后它无法修改.

这是正确的吗?

java concurrency multithreading

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

Joda时区计算

一直在玩Joda时区,发现以下看起来很奇怪.

我运行了以下代码

    DateTimeZone gmt = DateTimeZone.forID( "Etc/GMT" );
    DateTimeZone gmtPlusOne = DateTimeZone.forID( "Etc/GMT+1" );
    DateTimeZone gmtMinusOne = DateTimeZone.forID( "Etc/GMT-1" );

    System.out.println( new DateTime( gmt ).toString() );
    System.out.println( new DateTime( gmtPlusOne ).toString() );
    System.out.println( new DateTime( gmtMinusOne ).toString() );
Run Code Online (Sandbox Code Playgroud)

并得到以下输出

2011-10-24T13:00:12.890Z
2011-10-24T12:00:12.937-01:00
2011-10-24T14:00:12.937+01:00
Run Code Online (Sandbox Code Playgroud)

看到"gmtPlusOne"以-01:00落后一小时,而"gmtMinusOne"则相反,我感到有些惊讶.有人可以解释为什么这些会像我预期的那样出现.

java timezone jodatime

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