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的方式加载. 但是浪尖也是觉得很有毕业讲一下注解,毕竟高级免试也会问答的吧. ...
随机推荐
- 用bis和bic实现位级操作
20世纪70年代末至80年代末,DigitalEquipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,仅仅有bis(位设置)和bic(位清除)这两种指令.两种指令的输入都 ...
- ora-12541无监听的一种场景
项目上突然出现无法连接Oracle数据库的情况,提示无监听程序. 现象: 查看 listener.ora配置无问题,用Net Configuration Assistant重建监听,NCA也处于假死状 ...
- mybatis_2
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...
- 实现静默安装APK的方法
需要满足的条件: 内置到ROM.即APK包的安装位置是/system/app下. 下面以 test.apk 为例,演示这个操作.需要准备一台已经获得 Root 权限的手机. 1.通过 USB 连接手机 ...
- UIImage加载方式
前言 关于本地图片UIImage的加载问题,还是需要注意的.不同的加载处理方式,在效率和性能上还是有差异的. 今天,我们来讲讲UIImage的加载应该选择什么样的API来加载! 两种API 这两种AP ...
- [NOI 2012] 美食节
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2879 [算法] 首先 , 将每种食物建一个点 , 将每位厨师做的每一道菜建一个点 建 ...
- 微信公众平台-文章-app:让创意变为现实,这30个小程序“凭什么”脱颖而出?
ylbtech-微信公众平台-文章-app:让创意变为现实,这30个小程序“凭什么”脱颖而出? 1.返回顶部 1. 让创意变为现实,这30个小程序“凭什么”脱颖而出? 微信公开课 昨天 创意1:为多种 ...
- hdu4608 I-number
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4608 题意:给定一个数X,注意X是个大数,X的长度不超过1e5. 让你求出一个Y,满足三个条件,Y&g ...
- bzoj 1079: [SCOI2008]着色方案【记忆化搜索】
本来打算把每个颜色剩下的压起来存map来记忆化,写一半发现自己zz了 考虑当前都能涂x次的油漆本质是一样的. 直接存五个变量分别是剩下12345个格子的油漆数,然后直接开数组把这个和步数存起来,记忆化 ...
- bzoj 4071: [Apio2015]巴邻旁之桥【splay】
用权值线段树会容易一些并快一些,但是想复健一下splay所以打了splay 然后果然不会打了. 解题思路: 首先把家和办公室在同一侧的提出来直接加进答案里: 对于k=1,直接选所有办公室和家的中位数即 ...
mysql-connector-java-5.1.38-b...