存储过程 jdbc
package com.itheima.procedure; import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types; import org.junit.Test; import com.itheima.utils.JdbcUtil;
/**
* 执行存储过程 用CallableStatement 得到它的对象 st = con.prepareCall(sql);
* 调用 格式:
* {call 过程名(?,?)}
* @author wangli
*
*/
public class ProcedureTest { @Test
public void testProcedure(){
Connection con = null;
CallableStatement st =null;//是pstatement 的子类,预编译sql 防注入,不过不能批量处理不同类的sql语句。 try {
con = JdbcUtil.getConnection();
st = con.prepareCall("{call demoSp(?,?)}");//获取CallableStatement 对象
//两个参数赋值
st.setString(1, "cgx");//输入参数赋值 //对于过程的输出参数要先注册 Types:java.sql.Types代表的是sql的相应数据类型
st.registerOutParameter(2, Types.VARCHAR); //执行存储过程
st.execute(); String result = st.getString(2);//调用存储过程后,返回的输出参数的值 System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtil.release(null, st, con);
}
}
}
package com.itheima.utils; import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; /**
* 用于读取配置文件,并获取连接,关闭连接
* @author wangli
*
*/
public class JdbcUtil {
private static String DRIVER;
private static String URL;
private static String USER;
private static String PASSWORD;
//1.读取配置文件 只要读一次就可以
static{
try {
//ClassLoader默认读取classes文件夹下的资源
InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("jdbccfg.properties");
//2.生成Properties对象
Properties p = new Properties();
p.load(is); //给属性赋值
DRIVER=p.getProperty("driver");
URL = p.getProperty("url");
USER = p.getProperty("user");
PASSWORD = p.getProperty("password"); //加载驱动
Class.forName(DRIVER);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 获取数据库连接
* @return
* @throws Exception
*/
public static Connection getConnection() throws Exception{
return DriverManager.getConnection(URL, USER,PASSWORD);
} /**
* 关闭资源
* @param rs
* @param st
* @param con
*/
public static void release(ResultSet rs,Statement st,Connection con ){
try {
if(rs!=null){
rs.close();
rs=null;//目的是让回收器立即进行垃圾回收
}
} catch (SQLException e) {
e.printStackTrace();
} try {
if(st!=null){
st.close();
st=null;
}
} catch (SQLException e) {
e.printStackTrace();
} try {
if(con!=null){
con.close();
con=null;
}
} catch (SQLException e) {
e.printStackTrace();
} } }
配置文件信息
driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/day16
user=root
password=root
存储过程 jdbc的更多相关文章
- oracle存储过程jdbc调用
package com.jckb.procedure; import java.sql.CallableStatement; import java.sql.Connection; import ja ...
- Java数据库连接--JDBC调用存储过程,事务管理和高级应用
相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统 ...
- JDBC学习笔记——事务、存储过程以及批量处理
1.事务 1.1.事务的基本概念和使 ...
- Mysql存储过程调用
mysql存储过程实例教程 发布时间:2014-04-09编辑:JB01 这篇文章主要介绍了mysql存储过程的使用方法,mysql存储过程实例教程,有需要的朋友参考下. 1.1create p ...
- mySql-数据库之存储过程学习总结
之前在工作中总是听别人提到存储过程,觉得是个很高深的东西,利用工作之余,看了下相关的知识,现将学习知识总结如下,希望可以为刚学习的人提供些许帮助. 开发环境:Navicat For Mysql. My ...
- MySQL存储过程(转载)
转自:http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html 1.1 CREATE PROCEDURE (创 ...
- Oracle数据库游标,序列,存储过程,存储函数,触发器
游标的概念: 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理, ...
- 1 开发一个注重性能的JDBC应用程序不是一件容易的事. 当你的代码运行很慢的时候JDBC驱动程序并不会抛出异常告诉你。 本系列的性能提示将为改善JDBC应用程序的性能介绍一些基本的指导原则,这其中的原则已经被许多现有的JDBC应用程序编译运行并验证过。 这些指导原则包括: 正确的使用数据库MetaData方法 只获取需要的数据 选用最佳性能的功能 管理连
1 开发一个注重性能的JDBC应用程序不是一件容易的事. 当你的代码运行很慢的时候JDBC驱动程序并不会抛出异常告诉你. 本系列的性能提示将为改善JDBC应用程序的性能介绍一些基本的指导原则,这其中的 ...
- JDBC性能优化篇
系统性能. 少用Metadata方法 与其它的JDBC方法相比, 由ResultSet对象生成的metadata对象的相对来说是很慢的. 应用程序应该缓存从ResultSet返回的metada ...
随机推荐
- C++11中的原子操作(atomic operation)
所谓的原子操作,取的就是“原子是最小的.不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源.也就是他确保了在同一时刻只有唯一的线 ...
- 问题11:如何进行反向迭代 & 如何实现反向迭代
# 有关列表问题,参考:Python:列表list 案例: 需求:实现一个连续浮点数发生器FloatRange(和range类似),根据给定范围(start,end)和步进值(step),产生一系列连 ...
- js基础之变量类型
1.NAN(Not a number) 不是一个数字 自身:console.log(NaN==NaN)和console.log(NaN===NaN)返回值都是false; 其他函数,isNaN()可用 ...
- 在浏览器中输入url并回车后发生了什么?
1 解析url url主要由以下几个部分组成: 1 传输协议 2 服务器 3 域名 4 端口 5 虚拟目录 6 文件名 7 锚 8 参数 2 DNS(域名)解析 找到域名对应的ip 3 浏览器与网站建 ...
- u-boot向linux内核传递启动参数
U-BOOT 在启动内核时,会向内核传递一些参数.BootLoader 可以通过两种方法传递参数给内核,一种是旧的参数结构方式(parameter_struct),主要是 2.6 之前的内核使用的方式 ...
- JS开发中的一些小技巧和方法
生成指定范围内的随机数 当我们需要获取指定范围(min,max)内的整数的时候,下面的代码非常适合:这段代码用的还挺多的. function setRadomNum(min,max){ return ...
- 并发设计模式和锁优化以及jdk8并发新特性
1 设计模式 (1) 单例模式 保证一个类只能一个对象实现.正常的单例模式分为懒汉式和饿汉式,饿汉式就是把单例声明称static a=new A(),系统第一次调用的时候生成(包括调用该类的其他静态资 ...
- mysql中有多少种日志
Mysql的日志包括如下几种日志: 错误日志 普通查询日志 二进制日志 慢查询日志 Mysql版本 此文档测试mysql的版本为 mysql -V 错误日志 error log Mysql错误日志主要 ...
- jquery事件之事件
事件名 说明 语法 (events 事件类型,data数据,handler 事件处理函数,selector 选择器) blur() 获得失去鼠标光标焦点事件 jQueryObject.blur( [ ...
- 在Android中使用FlatBuffers(上篇)
本文来自网易云社区. 总览 先来看一下 FlatBuffers 项目已经为我们提供了什么,而我们在将 FlatBuffers 用到我们的项目中时又需要做什么的整体流程.如下图: 在使用 FlatBuf ...