JDK6笔记(5)----JDBC4(3)

简介: JDK6笔记(5)----JDBC4(3) 1、预准备语句的IN参数的pitfall 当你用setter方法向IN参数传递值时要注意一些问题。 不管在任何时候,设置参数并执行预准备语句对象,JDBC驱动器会把Java类型转换成DBMS所能理解的JDBC类型。

JDK6笔记(5)----JDBC4(3)


1、预准备语句的IN参数的pitfall
当你用setter方法向IN参数传递值时要注意一些问题。
不管在任何时候,设置参数并执行预准备语句对象,JDBC驱动器会把Java类型转换成DBMS所能理解的JDBC类型。
两者的对应关系如下:
Java Object/Type ----> JDBC Type
Int ----> INTEGER
Short ----> SMALLINT
Byte ----> TINYINT
Long ----> BIGINT
Float ----> REAL
Double ----> DOUBLE
java.math.BigDecimal ----> NUMERIC
Boolean ----> BOOLEAN or BIT
String ----> CHAR, VARCHAR, or LONGVARCHAR
Clob ----> CLOB
Blob ----> BLOB
Stuct ----> STRUCT
Ref ----> REF
java.sql.Date ----> DATE
java.sql.Time ----> TIME
java.sql.Timestamp ----> TIMESTAMP
java.net.URL ----> DATALINK
Array ----> ARRAY
byte[] ----> BINARY, VARBINARY, or LONGVARBINARY
Java class ----> JAVA_OBJECT
2、用setObject来指定JDBC类型
使用PrepredStatement.setObject()方法可以避免使用IN参数的潜在的映射陷阱(mapping pitfall)。
void setObject(int paramIndex, object x, int targetSqlType);
setObject()方法允许你传递一个Java对象并指定JDBC目标的类型。如下:
PreparedStatement psStatement=cConn.prepareStatement("SELECT * FROM PLAYERS WHERE TEAM=?");
//Set the IN parameter to Titans using setObject
psStatement.setObject(1,"Titans",java.sql.Types.VARCHAR);
//Execute the statement
ResultSet rsResults=psStatement.executeQuery();
//Clear parameters
psStatement.clearParameters();
注意:即使你要发送一个NULL值到DBMS,你也必须指定相应的JDBC的类型。
3、CallableStatement接口
有时你会遇到这样的情况,你需要在RDBMS(Remote Database Management System)上执行存储过程。
CallableStatement提供了一个标准方式来解决上述情况。
1) SQL escape syntax
SQL escape syntax支持两种形式的存储过程:
1.1) 包含结果参数(即OUT参数)的情况;
1.2) 不包含OUT参数的情况。
这两种情况都含IN参数。
CallableStatement接口是从PreparedStatement扩展的,因此它继承了PreparedStatement接口的所有方法。并在其上扩展了OUT参数。
OUT参数的处理是不同的,它们必须在CallableStatement对象执行前进行注册。要注册OUT参数,需用到CallableStatement对象的registerOutParameter方法。该方法是用JDBC类型来注册OUT参数。如下的形式:
void registerOutParameter(int paramIndex, int sqlType)throws SQLException;
看下面的代码:
CallableStatement使用IN参数:
CallableStatement cStatement=cConn.prepareCall("{CALL setPlayerName(?)}");
cStatement.setString("Michael Scofield");
cStatement.execute();
CallableStatement使用OUT参数:
CallableStatement cStatement=cConn.prepareCall("{CALL getPlayerName(?)}");
cStatement.registerOutParameter(1,java.sql.Types.STRING);
cStatement.execute();
//Retrieve Player's name
String sName=cStatement.getString(1);
CallableStatement使用inout参数:
CallableStatement cStatement=cConn.prepareCall("{CALL getandsetPlayersName(?)}");
cStatement.setString("Michael Scofield");
cStatement.registerOutParameter(1,java.sql.Types.STRING);
cStatement.execute();
//Retrieve Player's name
String sName=cStatement.getString(1);
 

目录
相关文章
|
3月前
|
Java
JDK动态代理笔记整理
JDK动态代理笔记整理
|
6月前
|
Java 程序员
终于不慌内卷了,多亏阿里内部的并发图册+JDK源码速成笔记
并发编程 Java并发在近几年的面试里面可以说是面试热点,每个面试官面试的时候都会跟你扯一下并发,甚至是高并发。面试前你不仅得需要弄清楚的是什么是并发,还得搞清什么是高并发! 在这里很多小白朋友就会很疑惑:我工作又不用,为啥面试总是问?真就内卷卷我呗!(手动狗头)互联网内卷已经是现在的行业趋势,而且是不可逆的,这个大家也知道;但LZ要说的是,虽然简单地增删改查并不需要并发的知识,但是业务稍微复杂一点,你的技术水平稍微提升一点的话你就会知道,并发是我们Java程序员绕不开的一道坎。
33 0
|
9月前
|
Java 容器
Alibaba新产:“Java并发笔记”闪耀来袭,JDK源码奥义尽在其中
JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。 没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。
|
9月前
|
SQL 算法 Java
直击灵魂!美团大牛手撸并发原理笔记,由浅入深剖析JDK源码
并发编程这四个字想必大家最近都在网上看到过有很多的帖子在讨论。我们都知道并发编程可选择的方式有多进程、多线程和多协程。在Java中,并发就是多线程模式。而多线程编程也一直是一个被广泛而深入讨论的领域。如果遇到复杂的多线程编程场景,大多数情况下我们就需要站在巨人的肩膀上利用并发编程框架——JDK Concurrent包来解决相关线程问题。
|
10月前
|
Java 开发者 容器
先到先学!Alibaba甩出第四次更新的JDK源码高级笔记(终极版)
作为Java开发者,面试肯定被问过多线程。对于它,大多数好兄弟面试前都是看看八股文背背面试题以为就OK了;殊不知现在的面试官都是针对一个点往深了问,你要是不懂其中原理,面试就挂了。可能你知道什么是进程什么是线程,但面试官要是问你进程之间是如何通讯的?ConcurrentHashMap 和 HashTable有什么区别?为什么wait和notify方法要在同步块代码中调用?你答不上来就只能等通知了。。。
|
Java Linux
【笔记03】CentOS 安装 jdk
(1) 创建 softwarezgq 目录,用于存放软件安装包
116 0
【笔记03】CentOS 安装 jdk
|
缓存 Java
从一个 JDK6 BUG 看 JAVA 数组创建
前几天在调试一段程序, 奇怪的发现: 程序性能和缓存大小是负相关的——缓存开越大,程序越慢,最快和最慢之间差 2 个数量级。开 jprofiler 查了下,发现了 JDK6 里有这样一段代码 (版本 build 1.
911 0
|
SQL Java 数据库连接
JDK6笔记(5)----JDBC4
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1554793 JDK6...
963 0
|
SQL Java 数据库连接
JDK6笔记(5)----JDBC4(2)
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1555630 JDK6笔记(5)----JDBC4(2) 1、理解Statements有三种类型的Statements:1)Statements接口它通常用于只需不带参数的SQL语句。
642 0
|
SQL Java 数据库连接
JDK6笔记(5)----JDBC4(3)
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1556016 JDK6笔记(5)----JDBC4(3) 1、预准备语句的IN参数的pitfall当你用setter方法向IN参数传递值时要注意一些问题。
759 0