小编Luk*_*der的帖子

Oracle JDBC和Oracle CHAR数据类型

我对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)

oracle types jdbc char prepared-statement

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

SQL:元组比较

在我当前的应用程序中,我需要能够执行此类查询:

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)

mysql sql aggregate-functions row-value-expression

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

为什么Hibernate切换到使用LONG而不是CLOB?

看起来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 oracle orm hibernate clob

13
推荐指数
1
解决办法
6102
查看次数

Java枚举和泛型

这件事现在困扰我一段时间了.我以前曾问过问题,但可能是一个错误的措辞和一个过于抽象的例子.所以我不清楚我究竟在问什么.我会再尝试.请不要妄下结论.我希望这个问题根本不容易回答!

为什么我不能在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)

java generics enums

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

使用XSLT/XPath在其父级中查找元素的位置

除了重写大量的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)

xslt xpath position exslt

13
推荐指数
1
解决办法
3万
查看次数

即使只提取了一条记录,Oracle也会投入大量的I/O.

我经常在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)

这是一个更大的执行计划的摘录.基本上,我正在使用表的主键访问(加入)表.通常,存在另一个表ACCOACCO.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)

sql oracle performance oracle11g sql-execution-plan

13
推荐指数
1
解决办法
723
查看次数

如何使用jOOQ代码生成器和Maven的自定义策略?

使用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目标之前编译单个类吗?

java code-generation maven jooq

13
推荐指数
1
解决办法
1610
查看次数

处理QueryDSL中的可选参数

我在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作为可选参数?

谢谢 :)

java querydsl spring-data

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

通过HTTPS下载的Android 2.2和2.3 PDF文件似乎已经破裂

我一直在疯狂地将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-Dispositioninline或完全删除它也无济于事.删除Content-Type将导致在浏览器窗口中显示原始二进制数据.

注意:我已经发现了与不受信任的SSL证书相关的问题,但这似乎不是唯一的问题.所以我真的在寻找另一种解释.

欢迎任何想法!

pdf https android webkit download

12
推荐指数
1
解决办法
5753
查看次数

为派生表计算SQL Server ROW_NUMBER()OVER()

在一些其他数据库(例如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)

一个具体的例子(可以在SQLFiddle看到):

SELECT v, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RN
FROM (
  SELECT TOP 100 PERCENT 1 UNION ALL …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server window-functions ranking-functions

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