我对Oracle JDBC驱动程序处理CHAR数据类型有一个棘手的问题.我们来看看这个简单的表:
create table x (c char(4));
insert into x (c) values ('a'); -- inserts 'a '
Run Code Online (Sandbox Code Playgroud)
所以当我插入一些东西时CHAR(4),字符串总是用空格填充.当我执行这样的查询时也会这样做:
select * from x where c = 'a'; -- selects 1 record
select * from x where c = 'a '; -- selects 1 record
select * from x where c = 'a '; -- selects 1 record
Run Code Online (Sandbox Code Playgroud)
这里,常量'a'也用空格填充.这就是记录总是返回的原因.当使用JDBC执行这些查询时,这也PreparedStatement适用.现在最棘手的是当我想使用绑定变量时:
PreparedStatement stmt =
conn.prepareStatement("select * from x where c = ?");
stmt.setString(1, "a"); // This …Run Code Online (Sandbox Code Playgroud) 在我当前的应用程序中,我需要能够执行此类查询:
SELECT MIN((colA, colB, colC))
FROM mytable
WHERE (colA, colB, colC) BETWEEN (200, 'B', 'C') AND (1000, 'E', 'F')
Run Code Online (Sandbox Code Playgroud)
并得到(333, 'B', 'B')这个数据的答案:
+------+------+------+
| colA | colB | colC |
+------+------+------+
| 99 | A | A |
| 200 | A | Z |
| 200 | B | B |
| 333 | B | B |
| 333 | C | D |
| 333 | C | E |
| 333 | D | …Run Code Online (Sandbox Code Playgroud) 看起来Hibernate开始使用LONG版本3.5.5中的数据类型(我们从3.2.7升级)而不是CLOB属性type="text".
这会导致问题,因为LONGOracle中的数据类型是一种旧的过时数据类型(请参阅http://www.orafaq.com/wiki/LONG),不应使用,并且表不能有多个列具有LONGas数据类型.
有谁知道为什么这个改变了?
我试图将Oracle SetBigStringTryClob属性设置为true(如Hibernate> CLOB> Oracle :()中所建议的那样,但这不会影响数据类型映射,只会影响与我的情况无关的数据传输内部.
一个可能的解决方法是覆盖org.hibernate.dialect.Oracle9iDialect:
public class Oracle9iDialectFix extends Oracle9iDialect {
public Oracle9iDialectFix() {
super();
registerColumnType(Types.LONGVARCHAR, "clob");
registerColumnType(Types.LONGNVARCHAR, "clob");
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这是最后的手段 - 覆盖这个类更接近于分支Hibernate,我宁愿避免这样做.
任何人都可以解释为什么这样做了吗?这应该是一个bug吗?
[更新]:我创建了http://opensource.atlassian.com/projects/hibernate/browse/HHH-5569,让我们看看会发生什么.
这件事现在困扰我一段时间了.我以前曾问过问题,但可能是一个错误的措辞和一个过于抽象的例子.所以我不清楚我究竟在问什么.我会再尝试.请不要妄下结论.我希望这个问题根本不容易回答!
为什么我不能在Java中使用泛型类型参数的枚举?
问题不在于为什么它在语法上是不可能的.我知道它不受支持.问题是:为什么JSR人员"忘记"或"省略"这个非常有用的功能?我无法想象与编译器相关的原因,为什么它不可行.
这就是我喜欢做的事情.这在Java中是可行的.这是创建类型安全枚举的Java 1.4方法:
// A model class for SQL data types and their mapping to Java types
public class DataType<T> implements Serializable, Comparable<DataType<T>> {
private final String name;
private final Class<T> type;
public static final DataType<Integer> INT = new DataType<Integer>("int", Integer.class);
public static final DataType<Integer> INT4 = new DataType<Integer>("int4", Integer.class);
public static final DataType<Integer> INTEGER = new DataType<Integer>("integer", Integer.class);
public static final DataType<Long> BIGINT = new DataType<Long> ("bigint", Long.class);
private DataType(String name, Class<T> type) {
this.name …Run Code Online (Sandbox Code Playgroud) 除了重写大量的XSLT代码(我不打算这样做)之外,当上下文被任意设置为其他内容时,有没有办法在其父级中找到元素的位置?这是一个例子:
<!-- Here are my records-->
<xsl:for-each select="/path/to/record">
<xsl:variable name="record" select="."/>
<!-- At this point, I could use position() -->
<!-- Set the context to the current record -->
<xsl:for-each select="$record">
<!-- At this point, position() is meaningless because it's always 1 -->
<xsl:call-template name="SomeTemplate"/>
</xsl:for-each>
</xsl:for-each>
<!-- This template expects the current context being set to a record -->
<xsl:template name="SomeTemplate">
<!-- it does stuff with the record's fields -->
<xsl:value-of select="SomeRecordField"/>
<!-- How to access the record's position …Run Code Online (Sandbox Code Playgroud) 我经常在Oracle执行计划中遇到以下情况:
Operation | Object | Order | Rows | Bytes | Projection
----------------------------+---------+-------+------+-------+-------------
TABLE ACCESS BY INDEX ROWID | PROD | 7 | 2M | 28M | PROD.VALUE
INDEX UNIQUE SCAN | PROD_PK | 6 | 1 | | PROD.ROWID
Run Code Online (Sandbox Code Playgroud)
这是一个更大的执行计划的摘录.基本上,我正在使用表的主键访问(加入)表.通常,存在另一个表ACCO与ACCO.PROD_ID = PROD.ID,其中PROD_PK是主关键字PROD.ID.显然,可以使用a访问该表UNIQUE SCAN,但是只要我在该表上有一些愚蠢的投影,似乎整个表(大约200万行)计划在内存中读取.我得到了很多I/O和缓冲区.当我从更大的查询中删除投影时,问题消失:
Operation | Object | Order | Rows | Bytes | Projection
----------------------------+---------+-------+------+-------+-------------
TABLE ACCESS BY INDEX ROWID | PROD | 7 | 1 | 8 | …Run Code Online (Sandbox Code Playgroud) 使用jOOQ,我可能希望将jOOQ代码生成器与Maven和自定义生成器策略结合使用.看起来好像可以这样做(省略不相关的部分):
<plugin>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<version>2.2.2</version>
<!-- The plugin should hook into the generate goal -->
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<generator>
<name>org.jooq.util.DefaultGenerator</name>
<!-- But the custom strategy is not yet compiled -->
<strategy>
<name>com.example.MyStrategy</name>
</strategy>
</generator>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
以上配置描述了该问题.jOOQ的代码生成器挂钩到Maven生命周期的生成目标,该生成目标发生在生命周期的编译目标之前.但是,对于代码生成,它需要一个预编译的自定义策略类,否则我会得到一个ClassNotFoundException.如何用Maven解决这个问题?我可以在执行generate目标之前编译单个类吗?
我在SpringData中使用QueryDSL.我有表说,Employee我已经创建了实体类说,EmployeeEntity
我已经编写了以下服务方法
public EmployeeEntity getEmployees(String firstName, String lastName)
{
QEmployeeEntity employee = QEmployeeEntity.employeeEntity;
BooleanExpression query = null;
if(firstName != null)
{
query = employee.firstName.eq(firstName);
}
if(lastName != null)
{
query = query.and(employee.lastName.eq(lastName)); // NPException if firstName is null as query will be NULL
}
return empployeeDAO.findAll(query);
}
Run Code Online (Sandbox Code Playgroud)
如上所述我评论了NPException.如何使用Spring数据在QueryDSL中使用QueryDSL作为可选参数?
谢谢 :)
我一直在疯狂地将PDF下载到移动设备上.这是下一个疯狂,可以在Android 2.2和2.3上观察到.我无法在iPhone或其他设备上重现此问题,也无法在Firefox或其他桌面浏览器上重现此问题.
我正在通过HTTP下载PDF,它工作得很好.然后我通过HTTPS下载相同的PDF并且下载没有完成(文件名丢失):

我正在使用这些HTTP标头(以及其他与此无关的标头):
Content-Disposition: attachment; filename="abc.pdf"
Content-Type: application/pdf
Run Code Online (Sandbox Code Playgroud)
更改Content-Disposition为inline或完全删除它也无济于事.删除Content-Type将导致在浏览器窗口中显示原始二进制数据.
注意:我已经发现了与不受信任的SSL证书相关的问题,但这似乎不是唯一的问题.所以我真的在寻找另一种解释.
欢迎任何想法!
在一些其他数据库(例如DB2或Oracle ROWNUM)中,我可以省略ORDER BY排名函数子句中的OVER()子句.例如:
ROW_NUMBER() OVER()
Run Code Online (Sandbox Code Playgroud)
当与有序派生表一起使用时,这尤其有用,例如:
SELECT t.*, ROW_NUMBER() OVER()
FROM (
SELECT ...
ORDER BY
) t
Run Code Online (Sandbox Code Playgroud)
如何在SQL Server中进行模拟?我发现人们使用这个 技巧,但这是错误的,因为它对于派生表中的顺序会表现得非确定:
-- This order here ---------------------vvvvvvvv
SELECT t.*, ROW_NUMBER() OVER(ORDER BY (SELECT 1))
FROM (
SELECT TOP 100 PERCENT ...
-- vvvvv ----redefines this order here
ORDER BY
) t
Run Code Online (Sandbox Code Playgroud)
SELECT v, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RN
FROM (
SELECT TOP 100 PERCENT 1 UNION ALL …Run Code Online (Sandbox Code Playgroud)