JAVA 高级特性 JDBC
数据持久化技术:
常见JDBC组件。
数据库操作 :


PreparedStatement操作数据库
executeQuery:
execute:
package com.project.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import java.sql.CallableStatement;
public class JdbcDemo {
private static final String url = "jdbc:mysql://localhost:3306/test";
private static final String userName = "root";
private static final String passWord = "";
//初始化驱动,静态代码块
static {
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
JdbcDemo demo = new JdbcDemo();
// 创建一个 Connection 连接对象 通过一个连接对象操作数据库,一个连接多个操作
Connection con = JdbcDemo.getcon();
//demo.updateprepareDemo(con);
demo.callableDemo(con);
demo.selectDemo(con);
JdbcDemo.closeDemo(con);
}
//调用存储过程
public void callableDemo(Connection con){
//准备SQL
String SQL ="{CALL test(?,?,?,?)}";
//创建连接状态
try {
CallableStatement state = con.prepareCall(SQL);
//设置参数
state.setString(1, "LIDAHU");
state.setInt(2, 23);
state.setString(3, "man");
state.registerOutParameter(4, java.sql.Types.INTEGER);
//执行SQL
state.execute();
//处理结果
//获取参数
int result = state.getInt(4);
if (result==1){
System.out.println("注册成功!");
}else {
System.out.println("注册失败!");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//利用预编译preparedstatement进行更新操作
public void updateprepareDemo(Connection con) {
// 准备SQL语句
// String SQL1 = "INSERT INTO student(id,name,age,sex) VALUES(8,'YANGWU',18,'woman')";
// String SQL2 = "DELETE FROM student WHERE id=1";
// 提交数据库的对象
PreparedStatement state = null;
Scanner sc = new Scanner(System.in);
System.out.println("请输入修改的姓名 :");
String name = sc.nextLine();
System.out.println("请输入年龄 : ");
int age = sc.nextInt();
//关闭自动提交 , 事务不会实现数据持久化,即不会写入到数据库里面
try {
con.setAutoCommit(false);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String SQL3 = "UPDATE student SET name=? WHERE age=?";
System.out.println(SQL3);
//获取状态
try {
state = con.prepareStatement(SQL3);
//设置参数, SQL语句里面的 ? 按照顺序。
state.setString(1, name);
state.setInt(2,age);
//executeUpdate 返回一个执行影响行数的int 提交SQL语句,执行SQL
int set = state.executeUpdate();
//处理执行结果
if (set > 0) {
//结束事务 , 数据上传到数据库, 实现持久化
con.commit();
System.out.println("执行成功: " + set + "行");
}else {
//让其回滚。
con.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//更新SQL 操作
@SuppressWarnings("unused")
public void updateDemo(Connection con) {
// 准备SQL语句
String SQL1 = "INSERT INTO student(id,name,age,sex) VALUES(8,'YANGWU',18,'woman')";
String SQL2 = "DELETE FROM student WHERE id=1";
String SQL3 = "UPDATE student SET name='NIHAO' WHERE id = 1";
// 提交数据库的对象
Statement state = null;
try {
state = con.createStatement();
//executeUpdate 返回一个执行行数的int
int set = state.executeUpdate(SQL1);
System.out.println(set);
if (set > 0) {
System.out.println("执行成功: " + set + "行");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//获取连接对象
public static Connection getcon(){
Connection con = null;
try {
// 获取数据库连接
con = DriverManager.getConnection(url, userName, passWord);
} catch (Exception e) {
// TODO: handle exception
}
return con;
} // 查询方法
public void selectDemo(Connection con) {
// 步骤:
// 创建提交对象,,结果集对象
Statement state = null;
ResultSet set = null;
// 准备SQL语句
String sql = "select * from student";
// 执行SQL语句
// 创建提交数据库的连接
try {
// 连接对象 ,执行executeQuery查询命令,并保存到结果集set里面
state = con.createStatement();
set = state.executeQuery(sql);
// 处理结果集(对set 结果集进行遍历操作)
// next(); 切换到下一条目标数据,如果存在下一条数据则返回true ,否则返回false
while (set.next()) {
// 每次循环操作一条结果
int id = set.getInt("id");
String name = set.getString("name");
String sex = set.getString("sex");
int age = set.getInt("age");
System.out.println(id + " " + name + " " + sex + " " + age+ ";");
} } catch (Exception e) {
e.printStackTrace();
}finally{
try {
state.close();
set.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
public static void closeDemo(Connection con) {
// 关闭数据库连接
// 处理异常
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
JAVA 高级特性 JDBC的更多相关文章
- java高级特性增强
第4天 java高级特性增强 今天内容安排: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 .1. java多线程基本知识 . ...
- paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型
paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...
- Java高级特性-String、StringBuffer和StringBuilder
Java高级特性-String.StringBuffer和StringBuilder String Java语言中的字符串值都属于String类,虽然有其他方法表示字符串(如字符串数组),但Java一 ...
- Java高级特性——反射机制(第二篇)
在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...
- Java高级特性1_流库_初体验
Java高级特性流库_初体验 面对结果编程 在编程里, 有两种编程方式, 一种是面对过程编程, 一种是面对结果编程. 两者区别如下 面向过程编程 面向过程编程需要编程程序让程序依次执行得到自己想要的结 ...
- 云端卫士实战录 | Java高级特性之多线程
<实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...
- Java高级特性之泛型
首先我们先提出两个问题: 什么是泛型? 为什么要使用泛型?我们先来看看第一个问题什么是泛型.如果你对Java三大特性中的多态性理解的比较透彻的话,泛型就比较好理解了.多态性表示一个对象具备多种状态.比 ...
- Java高级特性—并发包
1). java并发包介绍 JDK5.0 以后的版本都引入了高级并发特性,大多数的特性在java.util.concurrent 包中,是专门用于多线程发编程的, 主要包含原子量.并发集合.同步器.可 ...
- Java高级特性——注解,这也许是最简单易懂的文章了
最近,浪尖在做flink的项目时source和sink的绑定那块用到了注解,当然新版本1.6以后就变为server load的方式加载. 但是浪尖也是觉得很有毕业讲一下注解,毕竟高级免试也会问答的吧. ...
随机推荐
- VTMagic的使用
// VTMagic的使用 // CFOrderViewController.m // qifuyuniOS //// /** * @author 李洪强, 16-08-30 10:08:50 ...
- 一个JS引发的跨域问题
忽然遇上跨域错误. 我们有张页面,使用了EXT.js,在本地运行正常,部署到服务器上,出不来数据.F12调试,提示有跨域错误? XMLHttpRequest cannot load http://19 ...
- HDU1281 棋盘游戏 —— 二分图最大匹配 + 枚举
题目链接:https://vjudge.net/problem/HDU-1281 棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...
- POJ3264 Balanced Lineup —— 线段树单点更新 区间最大最小值
题目链接:https://vjudge.net/problem/POJ-3264 For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000 ...
- ZOJ3261 Connections in Galaxy War —— 反向并查集
题目链接:https://vjudge.net/problem/ZOJ-3261 In order to strengthen the defense ability, many stars in g ...
- ZOJ - 1610 Count the Colors(线段树区间更新,单点查询)
1.给了每条线段的颜色,存在颜色覆盖,求表面上能够看到的颜色种类以及每种颜色的段数. 2.线段树区间更新,单点查询. 但是有点细节,比如: 输入: 2 0 1 1 2 3 1 输出: 1 2 这种情况 ...
- C语言预处理命令总结大全 :宏定义
C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性.ANS ...
- Java-Runoob-高级教程-实例-字符串:07. Java 实例 - 字符串分割
ylbtech-Java-Runoob-高级教程-实例-字符串:07. Java 实例 - 字符串分割 1.返回顶部 1. Java 实例 - 字符串分割 Java 实例 以下实例使用了 split ...
- 3winsock编程1
先看几个结构体定义 typedef struct WSAData { WORD wVersion;//版本号 通过MAKEWORD(2,2)返回该值 高位字节存储副版本号 第位字节存储主版本号 WOR ...
- RocketMQ消费者实践
最近工作中用到了RocketMQ,现记录下,如何正确实现消费~ 消费者需要注意的问题 防止重复消费 如何快速消费 消费失败如何处理 Consumer具体实现 防止重复消费 重复消费会造成数据不一致等问 ...
mysql-connector-java-5.1.38-b...