我使用Microsoft SQL Server JDBC Driver 2.0通过Java连接到SQL Server(2005).
如何从存储过程中获取返回值?我做的事情如下:
Connection connection = dataSource.getConnection()
CallableStatement proc = connection.prepareCall("{ call dbo.mySproc() }");
proc.execute();
Run Code Online (Sandbox Code Playgroud)
我应该使用execute()吗?的executeQuery()?的executeUpdate()?这些似乎都没有默认返回值,但我不确定如何实现它.
编辑1:要清楚,我知道如何调用存储过程.这个问题具体是关于如何获得返回值(而不是结果集).返回值是一个整数,通常在执行没有结果集的查询时生成,或者您RETURN 0在SQL中特别声明了类似的内容.
编辑2:executeUpdate()返回一个int,但是这个int与返回值不同.此外,OUT参数与返回值不同.
无效的表达式术语'<'
<asp:TextBox ID="txtPassword" runat="server"
Width="180px" TextMode="Password"
OnTextChanged="CheckPasswordStrength(<%= txtPassword.ClientID.ToString() %>,<%= lblMessage.ClientID.ToString() %>)"/>
Run Code Online (Sandbox Code Playgroud)
如果我像下面这样编写这个代码然后发生错误一个未处理的异常已经发生.服务器标记不能包含<%%>结构
<asp:TextBox ID="txtPassword" runat="server"
Width="180px" TextMode="Password"
OnTextChanged="CheckPasswordStrength("<%= txtPassword.ClientID.ToString() %>","<%= lblMessage.ClientID.ToString() %>")"/>
Run Code Online (Sandbox Code Playgroud)
当我在.cs文件中使用此代码时,每件事情都正常.
protected void Page_Load(object sender, EventArgs e)
{
txtPassword.Attributes.Add("onKeyUp", "PasswordCheck("+txtPassword.ClientID.ToString()+")");
txtPrimaryEmail.Attributes.Add("onKeyUp", "EmailChecker("+txtPrimaryEmail.ClientID.ToString()+")");
}
Run Code Online (Sandbox Code Playgroud) 我有一个查询,我想尽快执行.
这里是:
select d.InvoiceDetailId,a.Fee,a.FeeTax
from InvoiceDetail d
LEFT JOIN InvoiceDetail a on a.AdjustDetailId = d.InvoiceDetailId
Run Code Online (Sandbox Code Playgroud)
我在AdjustDetailId列上放了一个升序索引
然后,我使用"显示实际执行计划"运行查询,结果估计子树成本(最顶层选择节点之外)为2.07
然后我想,也许我可以做些什么来改进这个,所以我给左连接添加了一个条件,如下所示:
select d.InvoiceDetailId,a.Fee,a.FeeTax
from InvoiceDetail d
LEFT JOIN InvoiceDetail a on a.AdjustDetailId is not null
and a.AdjustDetailId = d.InvoiceDetailId
Run Code Online (Sandbox Code Playgroud)
我重新跑了,我的子树成本为.98.所以我想,很棒,我的速度提高了两倍.然后我点击显示客户端统计信息,然后点击两次查询执行4-5次,并且相信或不相信第一个查询平均更快.我不明白.顺便说一下,查询返回120K行.
任何见解?
也许我因为缓存而得到污点,但我不知道是否是这种情况或如何重置缓存.
编辑:好的,我google了如何清除查询缓存,所以我在查询之前添加了以下内容:
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)
然后我运行每个查询5次,第一个查询仍然快一点(13%).第一个查询:客户端处理时间:239.4第二个查询:客户端处理时间:290
所以我想问题是,你为什么这么认为?当表格的大小翻倍时,第二个查询会更快吗?或者左连接导致查询两次命中索引,因此它总是会变慢.
请不要激怒我,我只是想接受教育.
编辑#2:我需要获得所有的InvoiceDetails,而不仅仅是调整后的,因此左边的连接.
编辑#3:我试图用查询解决的真正问题是总结所有InvoiceDetail行,但同时也调整它们.所以最终似乎要执行的最佳查询如下.我认为做一个连接然后添加连接表将是唯一的方法,但似乎按条件分组最优雅地解决问题.
SELECT CASE WHEN AdjustDetailId IS NULL THEN InvoiceDetailId ELSE AdjustDetailId END AS InvoiceDetailId
,SUM(Fee + FeeTax) AS Fee
FROM dbo.InvoiceDetail d
GROUP BY CASE WHEN AdjustDetailId IS NULL THEN InvoiceDetailId ELSE …Run Code Online (Sandbox Code Playgroud) 作为一种验证形式,是否有任何方法可以防止在按下"确定"按钮时解除警报视图?
场景:我在alertview中有2个文本字段用于用户名/密码.如果两者都为空并且用户按下"确定",我不希望该警报被解除.
我有一个关于编码Swing UI的问题.如果我想制作带有某些选项的软件,例如在第一帧上我有三个按钮(New,Option,Exit).
现在,如果用户单击新按钮,我想将Frame中的整个内容更改为其他内容.我知道我必须使用addActionListener那个按钮.但我的问题是如何更改框架中的内容.创建新框架然后使用setVisible()不是我的选择.
frame.remove()如果需要删除几件事情,那么使用所有对象似乎很尴尬.还是正确的方式?
我正在使用第三方DLL,它希望在方法签名中使用名为"DaysOfWeek"的枚举.
我允许我的用户从ComboBox中选择星期几,但我最终得到了一个字符串.
如何将我的字符串与相应的枚举属性匹配?
谢谢!
运行我使用两个不同版本的Visual Studio构建的项目时遇到意外的访问错误.我的一般配置如下:
此项目构建,但在运行时崩溃,在某些STL代码中存在访问冲突.堆栈似乎表明我在调用流插入操作符期间通过了两个版本(8和9)的头文件.我意识到这是一个问题.
不知何故,这个电话:
ost << std::dec << port_; //(originating from an object in LibA)
Run Code Online (Sandbox Code Playgroud)
...通过以下堆栈跟踪下降:
std::basic_ostream::operator<<(...) (ostream:283, msvc 8.0 version <-- expected, since LibA was built with this version)
std::num_put::put(...) (xlocnum:888, msvc 8.0 version <-- expected, since LibA was built with this version)
std::num_put::do_put(...) (xlocnum:1158, msvc 9.0 version!! !@#$!%! <-- not expected, since LibA was built with msvc 8.0)
std::ios_base::flags() (xiosbase:374, msvc 9.0 version <-- follows from above)
Run Code Online (Sandbox Code Playgroud)
访问冲突发生在std :: ios_base …
我正在处理一些异步通信情况(事件驱动的XML解析,NSURLConnection响应处理等).我将尝试简要解释一下我的问题:
在我目前的场景中,有一个服务提供者(可以与xml解析器通信或进行一些网络通信)和一个可以要求服务提供者异步执行某些任务的客户端.在这种情况下,当服务提供者完成其处理时,它必须将结果传回给客户端.
我试图找到一种模式或经验法则来实现这种事情,我看到了3种可能的解决方案:
1.使用委托模式:客户端是服务提供者的委托,它将在任务完成时收到结果.
2.使用目标/操作方法:客户端要求服务提供者执行任务并传递一个选择器,该选择器必须在服务提供者完成任务后调用.
3.使用通知.
(更新)经过一段时间尝试解决方案#2(目标和行动)后,我得出的结论是,在我的情况下,最好使用委托方法(#1).以下是每个选项的优缺点,我看到它们:
授权方法:
1(+)选项1的优点是我们可以检查编译时错误,因为客户端必须实现服务提供者的委托协议.
1( - )这也是一个缺点,因为它导致客户端与服务提供商紧密耦合,因为它必须实现其委托协议.
1(+)它允许程序员轻松浏览代码并找到客户端的哪种方法,服务提供者正在调用以传递其结果.
1( - )从客户端的角度来看,一旦获得结果,找到服务提供者将调用的方法并不容易.它仍然很简单,只需转到委托协议方法,就是这样,但#2方法更直接.
1( - )我们必须编写更多代码:定义委托协议并实现它.
1( - )另外,委托模式应该用于委派行为.从语义上讲,这种情况不一定是授权的确切情况.
行动/目标方法
2(+)选项2的优点是,当调用服务提供者方法时,还必须指定指定回调操作的@selector,以便程序员知道将调用哪个方法来处理结果.
2( - )与此相反,在浏览服务提供商代码时很难找到在客户端中回调哪种方法.程序员必须转到服务调用,看看传递了哪个@selector.
2(+)这是一个更加动态的解决方案,可以减少部件之间的耦合.
2( - )也许是最重要的事情之一:它可能导致运行时错误和副作用,因为客户端可以将不存在的选择器传递给服务提供者.
2( - )使用简单和标准的方法(#performSelector:withArgument:withArgument :),服务提供者最多只能传递2个参数.
声明:
结论:此时,我会选择委托机制.这种方法提供了更高的安全性,并允许轻松浏览代码以跟踪向委托发送服务提供者操作结果的后果.关于这个解决方案的负面影响是:它是一个更静态的解决方案,我们需要编写更多的代码(协议相关的东西),从语义上讲,我们不是真正谈论委托,因为服务提供商不会委托任何东西.
我错过了什么吗?你推荐什么,为什么?
谢谢!
我想问一下您测试Java EE代码的首选方法?
我发现只有三个项目,它们试图帮助在Java EE环境中编写单元测试代码:
所以我想,
非常感谢...
我通过xslt渲染一个代码清单到html,我希望列表是逗号取消.假设我打算使用xsl:for-each ...
<xsl:for-each select="/Tickers/Ticker">
<xsl:value-of select="TickerSymbol"/>,
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
删除尾随逗号的最佳方法是什么?有没有比xsl更好的东西:for-each?
java ×3
objective-c ×2
sql-server ×2
asp.net ×1
c# ×1
cocoa ×1
delegation ×1
ejb-3.0 ×1
iphone ×1
java-ee-5 ×1
jdbc ×1
junit ×1
linker ×1
optimization ×1
performance ×1
return-value ×1
swing ×1
target ×1
uialertview ×1
unit-testing ×1
visual-c++ ×1
windows ×1
xslt ×1