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的方式加载. 但是浪尖也是觉得很有毕业讲一下注解,毕竟高级免试也会问答的吧. ...
随机推荐
- 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何
基于 Vue.js 之 iView UI 框架非工程化实践记要 像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...
- 浅谈 ZipArchive 类
Microsoft .NET Framework 4.5 新增了 ZipArchive 类 Microsoft Windows 8 Consumer Preview 操作系统已经内置了 Microso ...
- NOI 2015 滞后赛解题报告
报同步赛的时候出了些意外.于是仅仅能做一做"滞后赛"了2333 DAY1 T1离线+离散化搞,对于相等的部分直接并查集,不等部分查看是否在同一并查集中就可以,code: #incl ...
- struts2的文件上传机制
Struts2的上传(基本流程例如以下) 1.Struts2默认採用了apache commons-fileupload 2.Struts2支持三种类型的上传组件 3.须要引入commons-file ...
- ios archives 出现的是other items而不是iOS Apps的解决方案
ios archives 出现的是other items而不是iOS Apps的解决方案 项目打包时出现的是不是出现在iOS Apps栏目下面,而是Other Items而且右边对应的Upload t ...
- Datatables 1.10.x在命名上与1.9.x
1.10.x与1.9.x参数名对照表 Datatables 1.10.x在命名上与1.9.x的有区别,新版的使用的是驼峰的命名规则,而之前的是采用匈牙利命名规则 当然,这些变化都是向下兼容的,你可以继 ...
- XMU 1611 刘备闯三国之卖草鞋 【贪心】
1611: 刘备闯三国之卖草鞋 Time Limit: 1000 MS Memory Limit: 64 MBSubmit: 90 Solved: 48[Submit][Status][Web B ...
- C# ref和out总结
C# 中ref 与 out 总结 参数的传递一般分为两种:一种是“值传递”即:传递实参的拷贝,既然是拷贝那么在函数中对这个形参所作的任何动作都不会反映到原来的实参中.另外一种是“引用传递”即:传递 ...
- BZOJ4259:残缺的字符串(FFT与字符串匹配)
很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺. 你想对这两 ...
- VMware虚拟机安装WinXP出现错误output error file to the following location A:\GHOSTERR.TXT
我们安装Ghost版WinXP系统的时候,可能会出现一个如下图这样的错误:output error file to the following location A:\GHOSTERR.TXT. 出现 ...