我们有一个按日期划分数据的系统.因此,例如在SqlServer中,我们每月有一个数据库.每个月分区使用包含在C3P0连接池DataSource中的Jdbc驱动程序数据源.
经过一段时间后,分区的日期范围变得足够大,我们想要使其脱机.在这种情况下,我们只从可用列表中删除相关月份的DataSource.但是,理想情况下,当离线时我想"关闭"DataSource,以便池放弃所有与DB的连接.
DataSource没有密切的方法让我打电话所以我不知道如何清理它.
有什么建议?
我有一个字典,我将其与另一个字典进行比较(变量类型为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) 我正在考虑使用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做这个的方法.可能吗?
我有一个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做到这一点,但也许还有其他方法.
MySql是否有批量加载命令行工具,如bcp for SQLServer和sqlldr for Oracle?我知道有一个SQL命令LOAD INFILE或类似命令,但我有时需要将一个不同的文件块批量加载到MySQL数据库.
我遇到了我认为BinaryReader.ReadChars()方法的问题.当我在原始套接字NetworkStream周围包装BinaryReader时偶尔会出现流损坏,其中正在读取的流不同步.所讨论的流包含二进制序列化协议中的消息.
我已将此跟踪到以下内容
我认为发生的事情如下(在下面的例子中)
序列化代码试图解组下一个项目并因为流损坏而呱呱叫.
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)我一直试图通过我的查询来追踪问题.查询实际上是由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 …
我正在开发的项目非常庞大,我们开发了一个框架,可以轻松构建简单的UI屏幕.我们有两种基本类型:搜索(搜索参数+结果网格)和细节(一组编辑器,通常从一些模型对象填充).
该应用程序是所有C#.NET Winforms.
在细节中,我们有以下过程.
用户点击确定
这一切都适用于简单的东西,但在更复杂的情况下,我注意到上述方法可能并不是最顺利的.
上面提到的更复杂的情况是,细节表示模型对象,并且细节中嵌入了一个网格,其中包含可以添加和删除的"子"对象.通常,您希望启动子Detail并传入父模型对象,但此时它尚未完全填充/更新,因为只有在单击OK时才会发生.我发现自己有时会以恼人的方式解决这个问题,这引出了我以下问题.
在高级别,是细节屏幕的接受/最佳实践方法,就像我描述的那样,当控件更改时将值复制到模型对象,而不是等到单击确定?
如果是这样,在Winforms应用程序中,实现这一目标的最佳方法是什么?我发现有些文章提到Control.DataBindings但由于绑定时缺乏编译时安全性,因此它并不理想.我读过WPF有很好的绑定支持,但不幸的是,我没有使用WPF.
如果我做以下事情.
据我所知,Map已经"安全发布",因为其他线程是在Map完全填充后启动的,所以我认为从多个线程访问Map是可以的,因为在此之后它无法修改.
这是正确的吗?
一直在玩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"则相反,我感到有些惊讶.有人可以解释为什么这些会像我预期的那样出现.
c# ×4
java ×4
.net ×2
dictionary ×2
sql ×2
binaryreader ×1
binding ×1
bulkinsert ×1
c3p0 ×1
concurrency ×1
cross-join ×1
datasource ×1
equals ×1
indexing ×1
jodatime ×1
lifecycle ×1
mysql ×1
outer-join ×1
sql-server ×1
timezone ×1
validation ×1
winforms ×1