(十八)JDBC获取存储过程和主键
目录
获取数据库自动生成的主键;
update
更新操作以后,如果需要用到结果集,可以通过 PreparedStatement.getResultSet()
方法获得结果集;
getGeneratedKeys();
获取执行完插入语句后自动生成的键,结果封装在一个结果集里面;
PreparedStatement
对象,进行预编译的时候,可以接受2个参数,第二个参数表示是否自动获得自动生成的键,mysql
默认是自动获得 ;
但是我们还是自己写上,毕竟不同厂商之间实现不同;mysql
默认获得,兴许 oracle
默认就不获得;
获得的结果,封装在一个 结果集
里面。然后调用 PreparedStatement.getGeneratedKeys();
拿到这个结果集 ;
代码演示:
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
connection = JdbcUtils.getConnection();
String sql = "INSERT INTO testBlob(image) VALUES(?)";
// 接受2个参数,第二个参数,是否自动获得自动生成的键
statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
File file = new File("src/ijava/xin/images/th2.jpg");
InputStream inputStream = new FileInputStream(file);
statement.setBinaryStream(1, inputStream);
int num = statement.executeUpdate();
if(num>0){
// 获取 封装了自动生成的键的结果集
resultSet = statement.getGeneratedKeys() ;
if (resultSet.next()){
// 这里我不知道,它返回的结果集中自动生成的键的名字是什么。
// 反正我写id 不对,那么就只能使用 下标获取了,写了 1 ;
System.out.println(resultSet.getInt(1));
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtils.closedConnection(resultSet, statement, connection);
}
上述的操作,仅对 insert
有效,毕竟只有插入操作,才会生成键 ;
JDBC调用存储过程
存储过程是什么?
存储过程就相当于方法一样,只是这个方法是数据里面的方法,可以理解为数据库里面的处理数据的方法; 目前只需要会调用存储过程即可;以后在oracle课程中会将存储过程的细节;存储过程在金融证券中用到多 ; 写于 2018年5月31日00:00:05; 。
调用存储过程
首先需要先获得 CallableStatement
对象 ,并调用存储过程;
CallableStatement cStmt = conn.prepareCall("{call demoSp(?,?)}") ; // 参数是存储过程的名字 ;
设置参数注册返回值,得到输出 ;
// 设置参数
cStmt.setString(1,"abcdef") ;
// 告诉mysql,存储过程的第二个参数是字符串
cStmt.registerOutParameter(2,Type.VARCHAR) ;
// 执行存储过程
// 获取存储过程的返回结果
Sout(cStmt.getString(2)) ;
15天第8个视频,删除表的时候,老方说,防止下一期班再用这个表;
然后又突然说,没有下一期班了,你们是最后一期班了,以后不讲课了;以后专职做管理去了,下面人说,升官了….;老方说,什么啊。。
(十八)JDBC获取存储过程和主键的更多相关文章
- JDBC获取表的主键
JDBC获取表的主键 案例,创建订单,并根据订单号向订单明细表插入数据 sql语句: 创建两表 create table orders( id number(4) primary key, cus ...
- mybatis执行insert后马上能获取自增主键的语句写法
<!--keyColumn keyProperty useGeneratedKeys 用于在插入数据后,能直接使用user.getId()获取主键--> <insert id=&qu ...
- Spring中获取数据库表主键序列
在程序开发中,我们经常有写数据库表的操作,数据表中经常带有主键自增序列,如何获取自增序列.spring中提供了相应的类 DataFieldMaxValueIncrementer. DataFieldM ...
- mybatis 添加事物后 无法获取自增主键的问题
检查代码后没发现mapper文件设置自增主键返回的问题,后来检查到,关闭事务后,执行完是可以获取返回的主键的, 我在mysql的客户端里关闭自动提交,发现使用select last_insert_id ...
- MYSQL获取自增主键【4种方法】
通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键.本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值: 通过JDBC2.0提 ...
- mybatis框架(6)---mybatis插入数据后获取自增主键
mybatis插入数据后获取自增主键 首先理解这就话的意思:就是在往数据库表中插入一条数据的同时,返回该条数据在数据库表中的自增主键值. 有什么用呢,举个例子: 你编辑一条新闻,同时需要给该新闻打上标 ...
- MyBatis映射文件1(增删改、insert获取自增主键值)
增删改 Mybatis为我们提供了<insert>.<update>.<delete>标签来对应增删改操作 在接口中写增删改的抽象方法 void addEmp(Em ...
- MYSQL获取自增主键【4种方法】(转)
转自:http://blog.csdn.net/ultrani/article/details/9351573 作者已经写的非常好了,我不废话了,直接转载收藏: 通常我们在应用中对mysql执行了in ...
- 深入分析Mybatis 使用useGeneratedKeys获取自增主键
摘要 我们经常使用useGenerateKeys来返回自增主键,避免多一次查询.也会经常使用on duplicate key update,来进行insertOrUpdate,来避免先query 在i ...
随机推荐
- 检查errno
转自 http://blog.csdn.net/todd911/article/details/9132095 很多库函数,特别是那些与操作系统有关的,当执行失败时会通过一个名称为errno的外部变量 ...
- ES6 import、export的写法
大家都知道来到ES6版本,ES就原生支持JS Module的概念. import和export的写有哪些呢,我们看看 import: import from 和 var 变量一样,也会存在提升,这意味 ...
- skb head/data/tail/end/介绍
2017年04月26日 18:21:12 abcLinux 阅读数 799 This first diagram illustrates the layoutof the SKB data are ...
- 十、mount挂载 fstab swap
一.挂载和卸载文件系统 将额外文件系统与根文件系统某现存的目录建立起关联关系.进而使得此目录做为其它文件访问入口的行为称之为挂载 根文件系统之外的其它文件系统要想能够被访问,都必须通过“关联”至根文件 ...
- mlflow ui 启动报错No such file or directory: 'gunicorn': 'gunicorn'
1.mlflow ui 启动报错,信息如下: [root@localhost mlflow]# mlflow ui /usr/local/python3/lib/python3./importlib/ ...
- Java ExecutorService四种线程池及自定义ThreadPoolExecutor机制
一.Java 线程池 Java通过Executors提供四种线程池,分别为:1.newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收 ...
- pwn学习日记Day11 《程序员的自我修养》读书笔记
阅读基础 计算机系统软件体系结构采用一种层的结构--计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决. 多线程的优势: 1.某个操作可能会陷入长时间等待,等待的线程会进入睡眠状态,无法继续 ...
- 解决JAVA单步调试键盘输入被JDB占用的问题
解决JAVA单步调试键盘输入被JDB占用的问题 问题来源: 在完成本周任务时,编写的代码中含有Scanner类,编译及运行过程均正确,但使用JDB单步调试时,运行到输入行无法在JDB内部输入变量值. ...
- selenium 隐式等待报错 value must be a non-negative integer
笔者运行代码使用selenium的隐式等待时出现报错: from selenium import webdriver # 从selenium导入webdriver import time driver ...
- 性能分析 | Java服务器内存过高&CPU过高问题排查
一.内存过高 1.内存过高一般有两种情况:内存溢出和内存泄漏 (1)内存溢出:程序分配的内存超出物理机的内存大小,导致无法继续分配内存,出现OOM报错 (2)内存泄漏:不再使用的对象一直占据着内存不释 ...