jdbc 2.0
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的更多相关文章
- jdbc 4.0新特性
来自网络 在 Java SE 6 所提供的诸多新特性和改进中,值得一提的是为 Java 程序提供数据库访问机制的 JDBC 版本升级到了 4.0, 这个以 JSR-221 为代号的版本 , 提供了更加 ...
- Java SE 6 新特性: Java DB 和 JDBC 4.0
http://www.ibm.com/developerworks/cn/java/j-lo-jse65/index.html 长久以来,由于大量(甚至几乎所有)的 Java 应用都依赖于数据库,如何 ...
- 请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库
转载请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库 1.下载最新的JDBC(2012/3/6) http://www.microsoft.com/downloads/zh-cn/de ...
- 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 ...
- JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了
JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了 代码示例 转自 https://docs.oracle.com/javase/tutorial/jdbc/o ...
- Java数据库——JDBC 2.0操作
可滚动的结果集 让结果集滚动起来 //================================================= // File Name : JDBC20_demo //-- ...
- jdbc 6.0
1.获取数据库自动生成的键值 package com.rong.jielong; import java.sql.Connection; import java.sql.DriverManager; ...
- jdbc 5.0
1.事务 事务将单个SQL语句或一组SQL语句视为一个逻辑单元,如果任何语句失败,整个事务将失败. jdbc的MySQL驱动程序中的事务默认是自动提交. 默认情况下,每个SQL语句在完成后都会提交到数 ...
- jdbc 4.0
1.存储MySQL数据库的date.time.timestamp.datetime以及year类型数据 package com.rong.jielong; import java.sql.Connec ...
- jdbc 3.0
1.将Blob.Clob类型数据保存到数据库 import java.io.File; import java.io.FileInputStream; import java.io.FileReade ...
随机推荐
- Arduino上“Collect2.exe: error: ld returned 5 exit status”错误的解决方法
1.运行环境 Windows xp; Arduino1.6.11 IDE. 2.问题 在Arduino编译时,经常出现如下的错误: collect2.exe: error: ld returned 5 ...
- 003.2---asyncio模块(上)
asyncio(上) asyncio 的几个概念 event_loop(事件循环):程序开启一个无线的循环,程序员会把一些函数(协程)注册到事件循环上,当满足事件发生的时候,调用相应的协程函数. co ...
- sed: unix与doc换行的转换
在Linux (Unix)平台下回车换行以\n表示 在Window平台下回车换行以\r\n表示 两者的差异导致了: 在window下看Linux的文本排版全乱 在Linux在看Window的文本则是存 ...
- js点击后将文字复制到剪贴板,将图片复制到画图
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML> <HEAD& ...
- C语言字节对齐问题详解(对齐、字节序、网络序等)
首先说明一下,本文是转载自: http://www.cnblogs.com/clover-toeic/p/3853132.html 博客园用的少,不知道怎么发布转载文章,只能暂时这样了. 引言 考虑下 ...
- [arc068E]Snuke Line-[树状数组]
Description 传送门 Solution 假如想直接YY对于每一个d会有多少种商品满足条件,em反正我搞不定. 然后大佬的题解告诉我说:搞不定?那就不搞它啊,反过来不就得了? 好吧.我们来考虑 ...
- SRM First Problem && SRM 638 250pts NamingConvention
NamingConvention 题意: 给一个字符串,删掉所有的'_',然后将‘_'后的第一个字符改成大写. 代码: #include<bits/stdc++.h> using name ...
- 运行ntpdate报错:Temporary failure in name resolution
一.问题报错: 忽然发现某台机器时间慢了些几分钟,之前没有搭建ntpd服务,目前都是使用的ntpdate加定时任务进行时间同步.直接执行ntpdate报错如下: # ntpdate cn.pool.n ...
- equals和==方法比较(一)
问题描述 今天在使用spotbugs代码走查时发现这样一个问题,两个Long类型的变量使用==判断数值是否相等,spotbugs提示这是一个很致命的错误,代码大概如下, Long l1=123l; L ...
- Qt-QML-电子罗盘
使用QML中的Canvas实现电子罗盘绘制,效果图如下 一个简单的电子罗盘,红色N极.其中中间飞机表示当前的指向, 还是比较简单的,直接上代码吧 /* 作者:张建伟 时间:2018年4月27日 简述: ...