Technoboy 2011-03-30 18:25
浏览 915
已采纳

java.sql.Connection类中有个方法

java.sql.Connection类中有个方法

PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException

这个方法中参数的第二个作用是什么,代表什么意思?

下面是org.springframework.jdbc.core.PreparedStatementCreatorFactory中的一段代码
[code=java]

public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
        PreparedStatement ps = null;
        if (generatedKeysColumnNames != null || returnGeneratedKeys) {
                try {
                        if (generatedKeysColumnNames != null) {
                                ps = con.prepareStatement(this.actualSql, generatedKeysColumnNames);   // TODO
                        }else {
                                ps = con.prepareStatement(this.actualSql, PreparedStatement.RETURN_GENERATED_KEYS);
                        }
                }catch (AbstractMethodError ex) {
                        throw new InvalidDataAccessResourceUsageException(
                                        "The JDBC driver is not compliant to JDBC 3.0 and thus " +
                                        "does not support retrieval of auto-generated keys", ex);
            }
        }
        else if (resultSetType == ResultSet.TYPE_FORWARD_ONLY && !updatableResults) {
                ps = con.prepareStatement(this.actualSql);
        }
        else {
                ps = con.prepareStatement(this.actualSql, resultSetType,
                                updatableResults ? ResultSet.CONCUR_UPDATABLE : ResultSet.CONCUR_READ_ONLY);
        }
        setValues(ps);
        return ps;
}



呵呵,这个问题困惑我许久了!
问题补充

kimmking 写道
finallygo 写道
ms在联合主键的时候用

jdbc规范里,insert时,获取自动添加的keys用的。
但是翻了下mysql 5.1.13 驱动的实现
第二个参数传 什么都可以,只要length > 0就可以。

/**
* @see Connection#prepareStatement(String, String[])
*/
public java.sql.PreparedStatement prepareStatement(String sql,
String[] autoGenKeyColNames) throws SQLException {
java.sql.PreparedStatement pStmt = prepareStatement(sql);

((com.mysql.jdbc.PreparedStatement) pStmt)
.setRetrieveGeneratedKeys((autoGenKeyColNames != null)
&& (autoGenKeyColNames.length > 0));

return pStmt;
}

我说为啥,传什么都可以运行的通,呵呵,API说的不是很明白!
  • 写回答

3条回答 默认 最新

  • kimmking 博客专家认证 2011-03-30 18:25
    关注

    [quote="finallygo"]ms在联合主键的时候用[/quote]
    jdbc规范里,insert时,获取自动添加的keys用的。
    但是翻了下mysql 5.1.13 驱动的实现
    第二个参数传 什么都可以,只要length > 0就可以。

    /**
     * @see Connection#prepareStatement(String, String[])
     */
    public java.sql.PreparedStatement prepareStatement(String sql,
            String[] autoGenKeyColNames) throws SQLException {
        java.sql.PreparedStatement pStmt = prepareStatement(sql);
    
        ((com.mysql.jdbc.PreparedStatement) pStmt)
                .setRetrieveGeneratedKeys((autoGenKeyColNames != null)
                        && (autoGenKeyColNames.length > 0));
    
        return pStmt;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿