小编Ste*_*han的帖子

如何在C#中将Null值赋给Non-Nullable类型变量?

比如我已宣布,

双x;

现在我想分配

x = NULL我该怎么办?我已经看到了其他一些答案,但无法理解它们,这就是打开这个主题的原因.

c#

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

嵌套这样的try/finally子句是否安全?

由于这是一个关于try/finally子句行为的学术问题,我试图使用一个非常通用的例子.嵌套像这样的try/finally子句有什么危险吗?

openDatabaseConnection();
try {
    // Methods unrelated to cursor
    // ...

    String cursor_id = openCursor();
    try {
        useCursor(cursor_id);
    } finally {
        closeCursor(cursor_id);
    }

    // Methods unrelated to cursor
    // ...
} catch (Exception e) {
    genericLogError();
} finally {
    closeDatabaseConnection();
}
Run Code Online (Sandbox Code Playgroud)

具体来说,我很想知道closeCursor()以前是否保证会被调用closeDatabaseConnection().有没有理由嵌套一个finally子句,应该被认为是不好的做法?

java nested try-finally

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

使用Table Per Subclass时如何确保数据完整性?

通过将我的超类中的静态字段的属性设置为false,我在Grails中使用每个子类策略的.这样,Grails为我的超类创建了一个表,为每个子类创建了一个附加表.tablePerHierarchymapping

但是,虽然超类和子类记录共享相同的ID(主键),但没有外键约束来保持它们的一致性,即可以删除超类记录,使子类记录处于无效状态.我想知道是否有设置/属性使GORM以某种方式解决这个问题,例如通过约束.或者是我手动添加外键的唯一选择?


例如,给定以下域类作为超类:

class Product {
    String productCode

    static mapping = {
        tablePerHierarchy false
    }
}
Run Code Online (Sandbox Code Playgroud)

以下域类作为子类:

class Book extends Product {
    String isbn
}
Run Code Online (Sandbox Code Playgroud)

这导致创建两个表,即Product表和Book表.例如,当创建Book(通过脚手架页面)时,会在每个表中插入一条记录,它们唯一的链接就是每个表的ID值相同.具体来说,数据可能如下所示:

PRODUCT
Id      Version     ProductCode
1       1           BLAH-02X1

BOOK
Id      ISBN
1       123-4-56-7891011-1
Run Code Online (Sandbox Code Playgroud)

由于在数据库级别没有为这些表定义正式关系,因此可以删除其中一个记录并保留另一个记录,从而导致数据无效.显然我可以使用SQL在两个ID字段上手动创建外键约束,但我希望让Grails处理它.这可能吗?


使用Grails 2.2.1

grails inheritance foreign-keys grails-orm table-per-class

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

无法从C#执行大型批处理文件

我正在使用System.Diagnostics类从我的C#应用​​程序执行批处理文件,在整个过程中使用输出更新我的GUI,但是只要我的批处理文件超过一定数量的行,该过程就会挂起.确切的线条数量似乎有所不同,但我已经能够使用一个简单的批处理文件重现它,打印出"Hello Kitty"316次:

@echo off
echo Hello Kitty
echo Hello Kitty
Run Code Online (Sandbox Code Playgroud)

等等

如果我删除第316行,批处理文件执行正常,表单应用程序按预期运行,但是更多行导致进程无限期挂起,甚至不生成前300个hello kitty中的一个.

这是我执行批处理文件的代码:

process = new System.Diagnostics.Process();
process.StartInfo.FileName = batchName;
process.StartInfo.Arguments = " < nul";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.Start();
Run Code Online (Sandbox Code Playgroud)

这些在其他地方宣布:

protected Process process;
protected StreamReader output;
Run Code Online (Sandbox Code Playgroud)

我的主要表单做了这样的事情(简化了一点):

string output;

while (!proc.Process.HasExited)
{
    proc.Process.WaitForExit(200);

    if (proc.Process.HasExited)
    {
        output = proc.Output.ReadToEnd();
        rtbStatus.AppendText(output);
    }

    Application.DoEvents();
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会这样做,我在网上找到的例子都没有提到批处理文件的大小限制.请指教.

c# system.diagnostics batch-file

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

Grails - 在集成测试中不保存的域对象

我正在关注Grails In Action一书中的一个例子.我的集成测试失败,因为示例代码中的搜索返回空引用.我使用了对findAll()的调用,现在看来我的测试数据没有保存; all.size回归零.

void testBasicDynamicFinders() {

        new User(userId: 'glen', password: 'secret', profile: new Profile(email: 'glen@glensmith.com')).save()
        new User(userId: 'peter', password: 'sesame', profile: new Profile(homepage: 'http://www.peter.com/')).save()

        def all = User.findAll()
        assertEquals 2, all.size()
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用save(flush:true)无济于事.

我还在try ... catch结构中包含了一个save语句,但似乎没有引发任何异常.

Grails真的踢我的屁股.请帮我?

grails integration-testing

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

在Grails中使用Firebird数据库的步骤

我正在尝试将Grails应用程序连接到Firebird数据库.

我在用:

  • Grails 2.2.1
  • JDK 1.7
  • Firebird 2.5.2
  • Jaybird 2.2.2

到目前为止,这就是我所做的:

  • 我从http://www.firebirdsql.org/en/jdbc-driver/下载了Jaybird-2.2.2JDK_1.7.zip
  • 我解压缩此文件并将jaybird-2.2.2.jar复制到我的应用程序的lib文件夹中.
  • 在BuildConfig.groovy中,我添加runtime "org.firebirdsql.jdbc:jaybird:2.2.2"到依赖项部分.
  • 我编辑了DataSource.groovy,详情如下.

dataSource部分:

dataSource {
    pooled = false
    driverClassName = "org.firebirdsql.jdbc.FBDriver"
    dialect = "org.hibernate.dialect.FirebirdDialect"
    username = "SYSDBA"
    password = "masterkey"
}
Run Code Online (Sandbox Code Playgroud)

休眠部分:

hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = true
    cache.provider_class = 'org.firebirdsql.pool.FBSimpleDataSource'
}
Run Code Online (Sandbox Code Playgroud)

(我也有cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactorycache.provider_class = 'com.opensymphony.oscache.hibernate.OSCacheProvider'在分开的场合上面的部分,但也作出的任何差异).

运行我的Grails应用程序时,启动失败并出现一个巨大的错误,归结为以下消息:

java.lang.IllegalStateException: Could not load JDBC driver class [org.firebirdsql.jdbc.FBDriver]
Run Code Online (Sandbox Code Playgroud)

我已经远程搜索了网络,但我无法在任何地方找到有效的Grails/Firebird配置示例.有一个修复浮动,涉及复制minij2ee.jar,但这是一个不同的错误消息.此外,人们建议清空.grails文件夹 - 我试过这个,但无济于事.

有人可以建议,我怎样才能让Grails与Firebird合作?


这是完整的例外,虽然在启动期间似乎重复了几次:

->> 303 | innerRun in …
Run Code Online (Sandbox Code Playgroud)

grails firebird hibernate jdbc jaybird

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

使用 Oracle XMLType 时处理空值

我正在使用 Oracle 的 XMLType 函数从返回游标的存储过程获取 XML 数据。我的 SQL 看起来像这样:

select 
XMLType(
    package_name.storedProcName('PARAM1', 'PARAM2', 'PARAM3')
) as sresult 
from dual;
Run Code Online (Sandbox Code Playgroud)

在存储过程返回记录的情况下,这工作正常并且我得到了我期望的 XML 结果。但是,当该过程没有返回任何记录时,我收到以下错误:

ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 334
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我最好返回 null、空白字符串或其他值。当然,我希望避免每次发生这种情况时都引发 Oracle 异常。我可以做什么来实现这个目标?

澄清:我的问题是,当存储过程返回空游标时,XMLType 构造函数会引发异常。如何检测 SQL 查询中的空游标?(不幸的是,我没有机会在 Oracle 端进行编程 - 我正在编写 Java 客户端。)

xml oracle stored-procedures xmltype

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

引用游标在XMLType.createxml中丢失

我正在调用一个返回引用游标的函数,我XMLType.createxml用来将结果转换为XML,例如

select XMLType.createxml(package_name.storedProcName('PARAM1', 'PARAM2', 'PARAM3')) as sresult from dual;
Run Code Online (Sandbox Code Playgroud)

但是,我发现这有一个不受欢迎的副作用.似乎用于检索XMLType数据的游标永远不会关闭.使用这种技术多次调用函数后,我总是遇到以下错误:

ORA-01000: maximum open cursors exceeded
Run Code Online (Sandbox Code Playgroud)

我没有光标的句柄,因此我无法手动关闭它.此外,我们使用池化连接,因此没有连接重置可以自动释放这些游标.关于这个还能做什么?


这是我的Oracle版本(从v $版本返回):

Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production                          
CORE    10.2.0.5.0  Production                                      
TNS for HPUX: Version 10.2.0.5.0 - Production                   
NLSRTL Version 10.2.0.5.0 - Production
Run Code Online (Sandbox Code Playgroud)

(对于那些感兴趣的人,这里是我之前关于XMLType的问题的链接.)

sql oracle cursor xmltype

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