相关疑难解决方法(0)

ORM(对象关系映射)中的"N + 1选择问题"是什么?

"N + 1选择问题"通常被称为对象关系映射(ORM)讨论中的一个问题,我理解它必须为对象中看起来很简单的事情做出大量的数据库查询.世界.

有没有人对这个问题有更详细的解释?

orm select-n-plus-1

1507
推荐指数
16
解决办法
37万
查看次数

参数化SQL IN子句

如何参数化包含IN具有可变数量参数的子句的查询,比如这个?

SELECT * FROM Tags 
WHERE Name IN ('ruby','rails','scruffy','rubyonrails')
ORDER BY Count DESC
Run Code Online (Sandbox Code Playgroud)

在此查询中,参数的数量可以是1到5之间的任何值.

我不希望为此(或XML)使用专用存储过程,但如果有一些特定于SQL Server 2008的优雅方式,我对此持开放态度.

sql sql-server parameters

1020
推荐指数
29
解决办法
33万
查看次数

PreparedStatement IN子句替代?

将SQL IN子句与实例一起使用的最佳解决方法java.sql.PreparedStatement是什么,由于SQL注入攻击安全问题,多个值不支持这种解决方法:一个?占位符代表一个值,而不是值列表.

请考虑以下SQL语句:

SELECT my_column FROM my_table where search_column IN (?)
Run Code Online (Sandbox Code Playgroud)

使用preparedStatement.setString( 1, "'A', 'B', 'C'" );本质上是一种非工作尝试,?首先使用的原因是解决方法.

有哪些变通方法?

java security jdbc prepared-statement in-clause

328
推荐指数
9
解决办法
31万
查看次数

带有IN子句中参数列表的PreparedStatement

如何在执行查询时在JDBC中的preparedStatement中设置in子句的值.

例:

connection.prepareStatement("Select * from test where field in (?)");
Run Code Online (Sandbox Code Playgroud)

如果此子句可以包含多个值,我该怎么做.有时我事先知道参数列表,有时我事先不知道.如何处理这种情况?

java jdbc prepared-statement in-clause

84
推荐指数
6
解决办法
23万
查看次数

跨数据库同步表数据

我有一个表记录其在字段上的行插入/更新时间戳.

我想将此表中的数据与另一个数据库服务器上的另一个表同步.两个数据库服务器未连接,同步是单向(主/从).使用表触发器不合适

我的工作流程

  • 我使用全局last_sync_date参数和查询表Master来更改/插入记录
  • 将结果行输出到xml
  • 使用更新和插入解析xml并更新表Slave

处理Master表的已删除记录时,问题的复杂性会增加.为了捕获已删除的记录,我认为我必须为先前插入的记录维护一个日志表并使用sql"NOT IN".在处理大型数据集时,这会成为性能问题.

什么是处理这种情况的替代工作流程?

java sql spring-batch

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

OutOfMemoryError的原因是什么:以下情况下的Java堆空间?

以下代码示例位于一个运行大约200万次的for循环中.

List<String> parameters = new LinkedList<String>();
stmt2 = null;
rs2= null;

//This is line 472
stmt2 = con.prepareStatement("select NAME from TABLE_NAME where FIELD="+ strId);
rs2 = stmt2.executeQuery();

while (rs2.next()) {
    parameters.add(rs2.getString("NAME"));
}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:437)
    at com.mysql.jdbc.Connection.clientPrepareStatement(Connection.java:2185)
    at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4782)
    at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4687)
    at consistencyCheck.ConsistencyCheck.parameterCheck(ConsistencyCheck.java:472)
    at consistencyCheck.ConsistencyCheck.performConsistencyCheck(ConsistencyCheck.java:316)
    at consistencyCheck.ConsistencyCheck.main(ConsistencyCheck.java:198)
Run Code Online (Sandbox Code Playgroud)

如果需要更多信息,请告诉我.

谢谢.

谢谢大家的答案.我会接受BalusC的回答,因为他先回答.不幸的是,由于声誉不够,我无法提出任何其他答案:(

对所有建议增加内存堆的人都要注意.增加内存堆是你永远不应该做的事情,除非你100%确定这是你问题的唯一解决方案.例如,在我的问题中,增加堆可能会"解决"问题,但潜在的错误仍然存​​在.

java mysql heap memory-leaks jdbc

4
推荐指数
2
解决办法
8341
查看次数

如何让 JOOQ 在 IN 子句中使用数组

我希望 JOOQ 生成... in (?)并绑定列表作为数组参数(Postgres)。我的代码看起来像

.where(
   Tables.TABLE.FIELD.in(idsList)
)
Run Code Online (Sandbox Code Playgroud)
  1. 我怎样才能做到这一点?
  2. 为什么默认情况下不这样做,因为它更有效地生成(并由 PG 解析)字符串 in (?, ?, ?, ?, ...)

java arrays postgresql jooq

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