1.Statement接口不能接受参数

2.PreparedStatement接口在运行时接受输入参数

3.CallableStatement接口也可以接受运行时输入参数,当想要访问数据库存储过程时使用

4.示例一:

 package com.rong.web;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException; public class Test2 { /**
* @author 容杰龙
*/
public static void main(String[] args) {
Connection conn = getConnection();
PreparedStatement ps = null;
String sql = "insert into student(name,age) values(?,?)";
if (conn != null) {
try {
// 预处理语句对象 可用占位符?解决sql注入漏洞,占位符位置从1开始
ps = conn.prepareStatement(sql);
ps.setString(1, "rjl");
ps.setInt(2, 18);
// 是否返回结果集,此时是false
boolean flag = ps.execute();
System.out.println(flag);
// 返回执行结果的影响行数,此时返回值为1
int effects = ps.executeUpdate();
System.out.println(effects);
/////////批处理/////////
String sql1 = "insert into student(name,age) values('one',28)";
String sql2 = "insert into student(name,age) values('two',27)";
// PreparedStatement构造方法必须有字符串参数
ps = conn.prepareStatement("");
ps.addBatch(sql1);
ps.addBatch(sql2);
int[] ints = ps.executeBatch();
for (int i : ints) {
System.out.println(i);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} } }
public static Connection getConnection() {
Connection connection=null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://127.0.0.1:3306/rjl";
String user="root";
String password="123123";
connection = DriverManager.getConnection(url, user, password); } catch (Exception e) {
e.printStackTrace();
}
return connection;
} }

5.示例二:

MySQL存储过程

 DELIMITER $$
CREATE PROCEDURE getPrice(INOUT myName VARCHAR(20),OUT age INT(20))
BEGIN
SET myName="rjl";
SET age=22;
END $$

java操作

 package com.rong.web;

 import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException; public class Test3 {
public static void main(String[] args) {
Connection connection = Test2.getConnection();
if (connection != null) {
String sql = "call getPrice(?,?)";
try {
//创建存储过程的语句操作对象
CallableStatement cs = connection.prepareCall(sql);
//IN类型参数直接设置set即可
//第一个参数为INOUT类型,需要设置set参数,并注册参数
cs.setString(1, "kobe");
cs.registerOutParameter(1, java.sql.Types.VARCHAR);
//第二个参数为OUT类型,也需要注册
cs.registerOutParameter(2, java.sql.Types.INTEGER);
boolean flag = cs.execute();
System.out.println(flag);
//获取执行存储过程后的OUT结果
String name = cs.getString(1);
int age = cs.getInt(2);
System.out.println(name + ":" + age);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

jdbc 2.0的更多相关文章

  1. jdbc 4.0新特性

    来自网络 在 Java SE 6 所提供的诸多新特性和改进中,值得一提的是为 Java 程序提供数据库访问机制的 JDBC 版本升级到了 4.0, 这个以 JSR-221 为代号的版本 , 提供了更加 ...

  2. Java SE 6 新特性: Java DB 和 JDBC 4.0

    http://www.ibm.com/developerworks/cn/java/j-lo-jse65/index.html 长久以来,由于大量(甚至几乎所有)的 Java 应用都依赖于数据库,如何 ...

  3. 请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库

    转载请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库 1.下载最新的JDBC(2012/3/6) http://www.microsoft.com/downloads/zh-cn/de ...

  4. java web项目部署到tomcat 8.5 此驱动程序不支持 Java Runtime Environment (JRE) 1.8 版。请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库

    1:项目使用的是jre1.8版本. 2:服务器 apache-tomcat-8.5.23 报错如下: 严重 [com.mchange.v2.async.ThreadPoolAsynchronousRu ...

  5. JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了

    JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了 代码示例 转自 https://docs.oracle.com/javase/tutorial/jdbc/o ...

  6. Java数据库——JDBC 2.0操作

    可滚动的结果集 让结果集滚动起来 //================================================= // File Name : JDBC20_demo //-- ...

  7. jdbc 6.0

    1.获取数据库自动生成的键值 package com.rong.jielong; import java.sql.Connection; import java.sql.DriverManager; ...

  8. jdbc 5.0

    1.事务 事务将单个SQL语句或一组SQL语句视为一个逻辑单元,如果任何语句失败,整个事务将失败. jdbc的MySQL驱动程序中的事务默认是自动提交. 默认情况下,每个SQL语句在完成后都会提交到数 ...

  9. jdbc 4.0

    1.存储MySQL数据库的date.time.timestamp.datetime以及year类型数据 package com.rong.jielong; import java.sql.Connec ...

  10. jdbc 3.0

    1.将Blob.Clob类型数据保存到数据库 import java.io.File; import java.io.FileInputStream; import java.io.FileReade ...

随机推荐

  1. JAVA乐观锁实现-CAS

    是什么 全称compare and swap,一个CPU原子指令,在硬件层面实现的机制,体现了乐观锁的思想. JVM用C语言封装了汇编调用.Java的基础库中有很多类就是基于JNI调用C接口实现了多线 ...

  2. 111. Climbing Stairs 【LintCode easy】

    Description You are climbing a stair case. It takes n steps to reach to the top. Each time you can e ...

  3. Java - JavaMail - 利用 JavaMail 发邮件的 小demo

    1. 概述 面试的时候, 被问到一些乱七八糟的运维知识 虽然我不是干运维的, 但是最后却告诉我专业知识深度不够, 感觉很难受 又回到了一个烦人的问题 工作没有深度的情况下, 你该如何的提升自己, 并且 ...

  4. 20155210 潘滢昊 Java第三次实验

    Java第三次实验 实验内容 在IDEA中使用工具(Code->Reformate Code)把代码重新格式化 在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二 ...

  5. 2016-2017-2 20155339《 java面向对象程序设计》实验四Android程序设计

    2016-2017-2 20155339< java面向对象程序设计>实验四Android程序设计 实验内容 1.Android Stuidio的安装测试: 参考<Java和Andr ...

  6. 【Excel函数】如何在excle区分一列数字是否连续

    需求:区分这批卡号,哪些在一个号段 数据源: 89860616090033685544898606160900336855518986061609003368556989860616090033685 ...

  7. 180725-InfluxDB-v1.6.0安装和简单使用小结

    InfluxDB安装和简单使用小结 InfluxDB是一个时序性数据库,因为工作需求,安装后使用测试下是否支持大数据下的业务场景 说明: 安装最新版本 v1.6.0 集群版本要收费,单机版本免费 内部 ...

  8. MySQL☞左外链接与右外连接

    外链接查询:即要查询有关联关系的数据,还要查询没有关联关系的数据.(个人理解为:表A和表B两个关联的列中)如下图: emmm,简单的来说两个表的关联关系:book.bid=bookshop.id,他们 ...

  9. Phaser3让超级玛丽实现轻跳、高跳及加上对应的跳跃声音

      mario jumper 在线测试地址:http://www.ifiero.com/uploads/phaserjs3/jumper/ 空格键:轻按:跳低 ,长按:跳高键盘:--> 向右 , ...

  10. 131. 分割回文串 javascript实现

    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa",&quo ...