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. 在AI人工智能中如何巧妙学习大数据编程,成为五十万年薪的佼佼者

    编辑 ai狗年 大数据和人工智能的关系,首先要说什么是大数据.这些年来,大数据先是被神化,继而又被妖魔化,到了今天,其实谁也不知道别人所谓的大数据指的是什么.我大数据从业者,建了一个大数据资源共享群1 ...

  2. helpera64开发板下制作ubuntu rootfs镜像(二)

    上一篇路径:https://www.cnblogs.com/jizizh/p/10380513.html Helpera64开发板ubuntu剩于工作: 1.背光调节 答:/sys/class/bac ...

  3. 关于uip中的log和打印

    简单易用,好区分 void uip_log(char *m){ printf("uIP log message: %s\n", m);}

  4. 2016-2017-2 20155339 实验二《Java面向对象程序设计》实验报告

    2016-2017-2 20155339 实验二<Java面向对象程序设计>实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟 ...

  5. sql语句-6-更新数据

  6. 10_SpringBoot集成TkMybatis插件

    10_SpringBoot集成TkMybatis插件 明天你好向前奔跑 关注  0.5 2018.09.11 11:15 字数 163 阅读 3794评论 0喜欢 3 @Author Jacky Wa ...

  7. IBM X3650M4简单排错方法

    如果出问题了,首先看开机的那个地方的灯是否显示正常,有黄色的灯亮一般都不正常: 这种服务器带有一个错误指示板,只需要在电源开关那,如上图,把那个蓝色的按钮往里面按,就能把里面的一个板子抽出来,可以看到 ...

  8. nodejs的路径问题

    最近公司的一个开发项目,后端用的是nodejs.这两天需要打包给客户演示,就让公司一个小伙把之前3D机房的打包工具移植过来.打包之后,发现原本在开发环境下的跑的好好的项目,不能访问了.出现项目的首页不 ...

  9. Centos7部署Kubernetes集群(单工作节点)+配置dashboard可视化UI

    目标:docker+kubernetes+cadvosor+dashboard 一:物理硬件 两台虚拟机(centos7):一台做为主节点(master),一台做为工作节点(node) [root@M ...

  10. centos 6.5 双网卡 上网 virtualbox nat hostonly

    虚拟机两张网卡:分别调成NAT(eth0)和host only(eht1)模式. nat的网卡不用设置,host only网卡调为(vi /etc/sysconfig/network-scripts/ ...