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的方式加载. 但是浪尖也是觉得很有毕业讲一下注解,毕竟高级免试也会问答的吧. ...
随机推荐
- 释怀我的诺亚尔 不用EF框架,完成完美实体映射,且便于维护!(AutoMapper,petapoco)
释怀我的诺亚尔 不用EF框架,完成完美实体映射,且便于维护!(AutoMapper,petapoco) 最近,需要搭建一个新项目,在需求分析时确定数据库中需要创建多个存储过程.所以如果还是用原来E ...
- java 配置时遇到的问题及解决办法
1. 最近JDK更新很频繁,以至于我安装时版本太多,选择也会出现问题 首先,确定你选择的是32位版本还是64位版本(貌似64位系统下也可以安装32位的JDK), 这个相当重要,因为这个会影响到ecli ...
- 2015/12/29 eclipse 设置要点 空间 项目 类 eclipse汉化
开始使用eclipse,双击eclipse.exe文件,启动eclipse.程序会显示一个工作空间的对话框,工作空间用来存放你的项目文件,你可以使用程序默认的,点击确定即可,你也可以重新选择一个文件夹 ...
- UVA10600 ACM Contest and Blackout —— 次小生成树
题目链接:https://vjudge.net/problem/UVA-10600 In order to prepare the “The First National ACM School Con ...
- YTU 2438: 三人三鬼
2438: 三人三鬼 时间限制: 1 Sec 内存限制: 128 MB 提交: 35 解决: 9 题目描述 目标是将东岸的3人3鬼通过一只小船转移到西岸,希望以尽可能少的摆渡次数. 船的容量有限, ...
- YTU 2852: 二分查找
2852: 二分查找 时间限制: 1 Sec 内存限制: 128 MB 提交: 215 解决: 79 题目描述 输入不多于20个升序排列的整数,以及一个待查找的数key,输出key在序列中的位置( ...
- luogu 3804 【模板】后缀自动机
学习一波后缀自动机 求字符串$S$的所有出现次数不为1的子串的出现次数乘上该子串长度的最大值 #include<iostream> #include<cstdio> #incl ...
- BZOJ_4184_shallot_线段树按时间分治维护线性基
BZOJ_4184_shallot_线段树按时间分治维护线性基 Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻 ...
- 细数vue爬坑之路<坑路大集合>
坑爹集锦一: npm出现Newline required at end of file but not found错误 原因:eslint语法错误(vue为后缀名的组件结尾没有换行) 解决办法:在结尾 ...
- linux修改用户主目录的方法 (转载)
转自:http://xiaomaimai.blog.51cto.com/1182965/274002 第一:修改/etc/passwd文件第二:usermod命令 详细说明如下:第一种方法:vi /e ...