我的源代码:
//input = List<Employee> employee
String sql = "Select project_name from employee where id = :id and name = :name";
RowMapper<String> rowMapper = (rs, rowNum) ->
{
String s = rs.getString("project_name");
return s;
};
MapSqlParameterSource params;
List<String> finalProjectList = new ArrayList<String>();
List<String> employeeProjectList = null;
for(Employee e : employee)
{
params = new MapSqlParameterSource();
employeeProjectList = new ArrayList<String>();
params.addvalue("id",e.getId());
params.addvalue("name",e.getName());
employeeProjectList = namedParameterJdbcTemplate.query(sql, params, rowMapper);
finalProjectList.addAll(employeeProjectList);
}
注意:请回答没有IN子句的select查询,而不是update或insert操作。我知道,对于更新和插入,namedparameterJDBCtemplate
提供了一个batchUpdate方法。
不幸的是,你并没有告诉我们你的问题是什么。但有几件事似乎有问题。
>
finalProjectList.addall(finalProjectList)
只是一个花哨的NOOP,因为finalProjectList
是空的,并且将保持这种状态。这应该是finalprojectlist.addall(employeeProjectList)
吗?
您正在一个紧密的循环中多次运行相同的语句。在一个单一的语句中转换它可能更有效,或者至少比目前少得多。这可以通过使用UNION
组合select语句的多个副本来实现,或者如果您知道它们是不同的UNION ALL
。当然,您必须更改参数名,因此它们是唯一的。
或者,也可以使用in-子句。我知道你明确地要求解决方案,但你上面有,你没有给出理由,所以我在这一节中忽略这个限制。挑战在于您有两个参数要筛选。这本身似乎很奇怪,因为其中一个参数名为id
,这表明它应该是唯一的。下面的解决方案假设有一个字符,您可以保证它不出现在ID
中。我使用_
和一个示例。那么下面的语句应该起到这个作用:
SELECT project_name
FROM employee
WHERE id IN :ids
AND CONCAT(id, name) IN :idnames
查询参数IDs
和IDnames
需要设置为ID
值的集合,即连接ID+“_”+名称
。中的第一个将限制第二个
要处理的行数,并希望使用索引,而第二个
不能使用索引,但执行正确的筛选。
由于只选择单个列,因此可以使用
QueryForList
或QueryForObject
并删除RowMapper
。
问题内容: 可以说我的网页中包含以下代码段: >这是一些文字> 我希望WebDriver在此文本中选择“一些”,就像用户选择它一样。我应该怎么做?我知道如何获取>元素: println打印“这是一些文本”。 我尝试将键发送到该元素,该键曾经可以工作(在selenium 2.0b中),但是我现在正在使用selenium 2.6.0,但它停止了工作: 有人有想法吗?我正在使用FirefoxDriver
一条指令可以有零或多个操作数-指令操作的数据。零操作数的一个例子是NOP(no operation)。操作数可以在下面的位置: 位于指令本身(立即数) 位于寄存器(EAX, EBX, ECX, EDX, ESI, EDI, ESP, 或者EBP,如果是32位操作数;AX, BX, CX, DX, SI, DI, SP, 或者BP,如果是16位操作数;AH, AL, BH, BL, CH, CL,
那么,在学习使用选择支之前,首先必须要对标签进行说明。 如果要让玩家进行选择,就必须控制选择之后,跳跃到对应的剧本继续执行。这时候,控制这种跳转的标记,就是标签。 标签是行头标记有 * 符号的一行。到现在为止的范例中已经出现一些标签了。比如说・・・ [waittime=200] *start|开始 [cm] 你好。 像这样。这种情况下,这里就定义了这样一个标签 *start 。而 | (竖
通话时可选择的操作 通话时若按下按钮,会显示选项选单。可保留通话或显示个人信息。 保留 保留通话。 拨号盘 输入号码。 可向对方传送音频信号。可于录音机等,需输入号码的通话时使用。 挂断 切断通话。 检视个人信息 显示对方的个人信息。
我试图批量插入一个表,然后用新生成的s读回完整的对象。 然而,这个方法给了我以下错误:。请参阅下面的堆栈跟踪。 如果我只想批量插入而不回读,一切都会好起来的。那我就用 但是,我还需要用插入的值的s读回它们,但不确定我可以使用什么方法。 TLDR:我想批量插入,然后使用读取插入的行,但找不到正确的方法。是否在单个方法中提供批量插入和选择?
问题内容: 我有一个使用JDBC的Java应用程序,该应用程序每天在服务器上运行一次,并与也在同一服务器上运行的MySQL数据库(v5.5)进行交互。该应用程序正在查询并遍历表中的 所有 行。 该表目前很小(约5000行),但将无限期地增长。我的服务器内存有限,我不认为应用程序的内存消耗不确定。 如果我在运行查询之前使用过,我不清楚这里发生了什么。例如,如果我使用类似: 这是如何适当控制潜在的大型