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;}
解决方案二:
ms在联合主键的时候用
解决方案三:
/** * Creates a default <code>PreparedStatement</code> object capable * of returning the auto-generated keys designated by the given array. * This array contains the names of the columns in the target * table that contain the auto-generated keys that should be returned. * This array is ignored if the SQL * statement is not an <code>INSERT</code> statement. * <P> * An SQL statement with or without IN parameters can be * pre-compiled and stored in a <code>PreparedStatement</code> object. This * object can then be used to efficiently execute this statement * multiple times. * <P> * <B>Note:</B> This method is optimized for handling * parametric SQL statements that benefit from precompilation. If * the driver supports precompilation, * the method <code>prepareStatement</code> will send * the statement to the database for precompilation. Some drivers * may not support precompilation. In this case, the statement may * not be sent to the database until the <code>PreparedStatement</code> * object is executed. This has no direct effect on users; however, it does * affect which methods throw certain SQLExceptions. * <P> * Result sets created using the returned <code>PreparedStatement</code> * object will by default be type <code>TYPE_FORWARD_ONLY</code> * and have a concurrency level of <code>CONCUR_READ_ONLY</code>. * * @param sql an SQL statement that may contain one or more '?' IN * parameter placeholders * @param columnNames an array of column names indicating the columns * that should be returned from the inserted row or rows * @return a new <code>PreparedStatement</code> object, containing the * pre-compiled statement, that is capable of returning the * auto-generated keys designated by the given array of column * names * @exception SQLException if a database access error occurs * * @since 1.4 */ PreparedStatement prepareStatement(String sql, String columnNames[])throws SQLException;

时间: 2024-09-16 00:00:28

java.sql.Connection类中有个方法的相关文章

源码-JDK1.7中java.lang.String类的toCharArray方法注释:不能用Arrays.copyOf实现?求解惑

问题描述 JDK1.7中java.lang.String类的toCharArray方法注释:不能用Arrays.copyOf实现?求解惑 JDK1.7重新设计了String类,各个String对象各自维护一个属于自身的char数组,下面是该类中的toCharArray方法的实现源码:public char[] toCharArray() { // Cannot use Arrays.copyOf because of class initialization order issues char

java数据流DataInputstream类中的方法readBoolean()的作用是什么?

问题描述 java数据流DataInputstream类中的方法readBoolean()的作用是什么? 书上说readBoolean()的作用是读取一个布尔值,但是具体是 根据什么得到布尔值的?这个布尔值可以用于什么操作?跪求指点! 解决方案 从输入流读取,如果是0,就是false,否则就是true,bool值可以用来做逻辑判断. 解决方案二: 你写进去的时候的那个值,但需要顺序读取,写入时,第一个如果是int,那就读取时就要readInt,类似这样 解决方案三: JAVA中String类的i

java中看到类写在方法里面的类是什类啊

问题描述 java中看到类写在方法里面的类是什类啊 java中看到类写在方法里面的类是什类啊 void func (){class lei } 解决方案 方法内部的内部类的可见性更小,它只在方法内部可见,在外部类(及外部类的其它方法中)中都不可见了.同时,它有一个特点,就是方法内的内部类连本方法的成员变量都不可访问,它只能访问本方法的final型成员.同时另一个需引起注意的是方法内部定义成员,只允许final修饰或不加修饰符,其它像static等均不可用. 解决方案二: 内部类(匿名内部类) 解

java监听-java中匿名类作为一个方法的参数的时候是不是默认返回一个匿名对象

问题描述 java中匿名类作为一个方法的参数的时候是不是默认返回一个匿名对象 java中匿名类作为一个方法的参数的时候是不是默认返回一个匿名对象 比如用在监听方法当中作为参数的时候 解决方案 可以这么理解,通常是创建一个匿名类的实例然后作为参数传递给指定方法 . 解决方案二: 匿名类,作为参数是返回相应的匿名对象. 具体还是要看调用的函数有参数要求吧,参数是一个对应的匿名类,或者其父类,使用它就没有问题.

java.net.InetAddress类的getHostName方法用来获取某一IP地址的主机名

问题描述 有没有不通过java.net.InetAddress类的getHostName方法用来获取某一IP地址的主机名的方法,而且速度较快的方法:当然要用Java写. 解决方案

Java中ArrayList类的使用方法_java

Java中ArrayList类的用法 1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和IList接口 灵活的设置数组的大小 2.如何使用ArrayList 最简单的例子: ArrayList List = new ArrayList(); for( int i=0;i <10;i++ ) //给数组增加10个Int元素 List.Add(i); //..

装饰者模式(Decorator Pattern) Java的IO类的使用方法

Java的IO类使用装饰者模式进行扩展, 其中FilterInputStream类, 就是装饰者(decorator)的基类. 实现其他装饰者(decorator), 需要继承FilterInputStream类. 代码: /** * @time 2014年5月23日 */ package decorator.io; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream;

java代码-Scnner类的next()方法,返回的值为什么在比较前需要toString一下

问题描述 Scnner类的next()方法,返回的值为什么在比较前需要toString一下 Scanner input = new Scanner(System.in); System.out.println("请输入预测结果:花/数字"); String result = input.next(); System.out.println("接收的字符串:"+result); //生成随机数(偶数为花/奇数为数字) String res = ""

对比.net使用Java的匿名类对工厂方法模式提供更优雅的实现

工厂模式的意图: 定义一个用户创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 结构图: 场景: 这里制造两个手机product:Nokia.Motorola,为了制造这两个Product需要使用两个Creator(Factory)来制造它们.这两个Creator都有各自的Concreator(类似生产线).这两个手机都实现必须实现两个最基本的功能:call(打电话).photo(拍照). product: /// <summary> ///