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 ...
随机推荐
- 在全志V3/V3s和索智S3/S3L上调试32MB NorFlash
选取MX25L25635F作为调试对象,其他型号的NorFlash开发调试原理基本一致.为了使V3/V3s/S3/S3L识别32MB NorFlash并正常工作,主要针对以下三个部分进行开发和调试.下 ...
- ubuntu apt源配置
前言:看见Ubuntu新出了18.04版本感觉不错,装一个玩玩,虽然有很多教程可以参考,但我也给出一个不是很一样的方案吧,尽量解释的详细一点. 为了下载更方便,速度更快,我们往往在使用Linux系列系 ...
- [Golang学习笔记] 08 链表
链表(Linked list)是一种常见数据结构,但并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针. 由于不必须按顺序存储,链表在插入的时候可以达到O(1),比顺序表快得多,但是查 ...
- 20155204 实验3《敏捷开发与XP实践》实验报告
20155204 实验3<敏捷开发与XP实践>实验报告 一.实验内容与步骤 1.研究IDEA的code菜单. 老师给的任务的是把一串代码格式化,这个任务很简单.code菜单主要是关于编辑代 ...
- 2016-2017-2 《Java程序设计》第二周学习总结
20155319 2016-2017-2 <Java程序设计>第二周学习总结 课堂学习内容 git:版本控制 java -d bin(当地文件夹) src/Hello.java把生成的.c ...
- js日期控件遇到的问题
一.问题: 在web项目里有很多时候需要使用日期控件来完成相关的功能,但是日期控件的日期格式又和我们的需求不符 那么,就需要我们来自定义日期的格式完成需求 二.解决: 1.取月末: (1)强制取值: ...
- 16、Java并发编程:Timer和TimerTask
Java并发编程:Timer和TimerTask(转载) 下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer ...
- React入门基础(学习笔记)
这篇博客是我通过阅读React官方文档的教程总结的学习笔记,翻译可能存在误差,如有疑问请参见http://reactjs.cn/react/docs/tutorial.html . 一.所需文件 在编 ...
- python练习---小脚本
一.爬子域名 #!/usr/bin/python # -*- coding: utf-8 -*- import requests import re import sys def get(domain ...
- 【转】自动化测试 - Appium + Python史上最全最简环境搭建步骤
一,为什么是Appium借一张图: 1.1 Appium优点 l 开源 l 跨架构:NativeApp.Hybird App.Web App l 跨设备:Android.iOS.Firefox ...