一、数据的持久化

    持久化(persistence): 把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,数据持久化意味着将内存中的数据保存到硬盘上加以固化,而持久化的实现过程大多通过各种关系数据库来完成。

     持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。

    

 

二、JDBC简介

1.JDBC概述

     JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口。定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法,方便地访问数据库资源。

     JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。

    

 

2.JDBC体系结构

JDBC接口(API)包括两个层次:
     面向应用的API: Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
     面向数据库的API: Java Driver API,供开发商开发数据库驱动程序用。

    

 

三、JDBC的操作

1.JDBC的连接

     (1)注册驱动(只做一次)。

     (2)建立连接(Connection)。

     (3)创建执行SQL的语句(Statement)。

     (4)执行语句。

     (5)处理执行结果(ResultSet)。

     (6)释放资源。

	public static void test() throws SQLException{

		//1.注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver()); String url = "jdbc:mysql://localhost:3306/jdbc";
String user = "root";
String password = "123456"; //2.建立连接
Connection con = DriverManager.getConnection(url,user,password); //3.创建语句
Statement st = con.createStatement(); //4.执行语句
ResultSet rs = st.executeQuery("select * from user"); //5.处理结果
while(rs.next()){
System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" + rs.getObject(3) + "\t" + rs.getObject(4));
} //6.释放资源
rs.close();
st.close();
con.close();
}

结果:

      1    张三    2016-04-18    100.0

      2    李四    2016-04-17    200.0

      3    王朝    2016-04-16    150.0

      4    马汉    2016-04-14    300.0

      5    张龙    2016-04-01    400.0

      6    赵虎    2016-04-12    250.0

 

(1)注册驱动

Class.forName("com.mysql.jdbc.Driver");

   推荐这种方式,不会对具体的驱动类产生依赖。

DriverManager.registerDriver(com.mysql.jdbc.Driver);

    会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。

System.setProperty("jdbc.drivers", "driver1:driver2");

   虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。

 

(2)建立连接

Connection con = DriverManager.getConnection(url, user, password);

url格式: jdbc:子协议:子名称//主机名:端口/数据库名?属性名=属性值&… User,password可以用“属性名=属性值”方式告诉数据库;其他参数如: useUnicode=true&characterEncoding=GBK。

对于Oracle 数据库连接: jdbc:oracle:thin:@localhost:1521:sid

对于SQLServer 数据库连接: jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid

对于MySQL 数据库连接:   jdbc:mysql://localhost:3306/sid

 

(3)创建语句

     通过调用 Connection 对象的 createStatement 方法创建该对象。

     该对象用于执行静态的 SQL 语句,并且返回执行结果。

 

(4)执行语句

     通过调用 Statement 对象的 excuteQuery() 方法创建该对象。

     ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商实现

     ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象的 next() 方法移动到下一行。

 

(5)释放资源

     释放ResultSet, Statement,Connection。

     数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

 

(6)优化代码

JdbcUtils.java

public final class JdbcUtils{

	private static String url = "jdbc:mysql://localhost:3306/jdbc";
private static String user = "root";
private static String password = "123456"; private JdbcUtils(){ } static{
try{
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e){
throw new ExceptionInInitializerError(e);
}
} /*
* 获取连接
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url,user,password);
} /*
* 释放资源
* @param con
* @param st
* @param rs
*/
public static void releaseResource(Connection con,Statement st,ResultSet rs){
try{
if(rs != null){
rs.close();
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(st != null){
try{
st.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}finally{
if(con != null){
try{
con.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
}
}

 

Base.java

public class Base{

	public static void main(String[] args) throws Exception{
init();
} public static void init() throws Exception{ Connection con = null;
Statement st = null;
ResultSet rs = null; try{
//建立连接
con = JdbcUtils.getConnection(); //创建语句
st = con.createStatement(); //执行语句
rs = st.executeQuery("select * from user"); //处理结果
while(rs.next()){
System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" + rs.getObject(3) + "\t" + rs.getObject(4));
}
}
finally{
JdbcUtils.releaseResource(con,st,rs);
}
}
}

 

2.JDBC的增删改查

/**
* JDBC的增删改查
* @date 2016-4-18
*/
public class CRUD{ public static void main(String[] args) throws Exception{
delete();
read();
} /*
* 插入数据
*/
public static void create() throws Exception{ Connection con = null;
Statement st = null;
ResultSet rs = null; try{
//建立连接
con = JdbcUtils.getConnection(); //创建语句
st = con.createStatement(); //执行语句
String sql = "insert into user(name,birthday,money) values('Tom','1992-12-12','400')";
int i = st.executeUpdate(sql); //处理结果
System.out.println("有" + i + "行受到影响"); }
finally{
JdbcUtils.releaseResource(con,st,rs);
}
} /*
* 查询数据
*/
public static void read() throws Exception{ Connection con = null;
Statement st = null;
ResultSet rs = null; try{
//建立连接
con = JdbcUtils.getConnection(); //创建语句
st = con.createStatement(); //执行语句
rs = st.executeQuery("select id,name,birthday,money from user"); //处理结果
while(rs.next()){
System.out.println(rs.getObject("id") + "\t"
+ rs.getObject("name") + "\t"
+ rs.getObject("birthday") + "\t"
+ rs.getObject("money"));
}
}
finally{
JdbcUtils.releaseResource(con,st,rs);
}
} /*
* 更新数据
*/
public static void update() throws Exception{ Connection con = null;
Statement st = null;
ResultSet rs = null; try{
//建立连接
con = JdbcUtils.getConnection(); //创建语句
st = con.createStatement(); //执行语句
String sql = "update user set money = money + 10";
int i = st.executeUpdate(sql); //处理结果
System.out.println("有" + i + "行受到影响"); }
finally{
JdbcUtils.releaseResource(con,st,rs);
}
} /*
* 删除数据
*/
public static void delete() throws Exception{ Connection con = null;
Statement st = null;
ResultSet rs = null; try{
//建立连接
con = JdbcUtils.getConnection(); //创建语句
st = con.createStatement(); //执行语句
String sql = "delete from user where id > 5";
int i = st.executeUpdate(sql); //处理结果
System.out.println("有" + i + "行受到影响"); }
finally{
JdbcUtils.releaseResource(con,st,rs);
}
}
}

JDBC基础学习(一)—JDBC的增删改查的更多相关文章

  1. Java数据库连接--JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  2. python基础学习之类的属性 增删改查

    类中的属性如何在类外部使用代码进行增删改查呢 增加.改变: setattr内置函数以及 __setattr__魔法方法 class A: aaa = '疏楼龙宿' a = A() setattr(a, ...

  3. python学习之-成员信息增删改查

    python学习之-成员信息增删改查 主要实现了成员信息的增加,修改,查询,和删除功能,写着玩玩,在写的过程中,遇到的问题,旧新成员信息数据的合并,手机号和邮箱的验证,#!/usr/bin/env p ...

  4. Vc数据库编程基础MySql数据库的表增删改查数据

    Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...

  5. EF学习笔记-1 EF增删改查

    首次接触Entity FrameWork,就感觉非常棒.它节省了我们以前写SQL语句的过程,同时也让我们更加的理解面向对象的编程思想.最近学习了EF的增删改查的过程,下面给大家分享使用EF对增删改查时 ...

  6. Hadoop基础-HDFS的API实现增删改查

    Hadoop基础-HDFS的API实现增删改查 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客开发IDE使用的是Idea,如果没有安装Idea软件的可以去下载安装,如何安装 ...

  7. JDBC+Servlet+JSP实现基本的增删改查(简易通讯录)

    前言: 最近学习JavaWeb的过程中,自己实践练手了几个小项目,目前已经上传到我的Github上https://github.com/Snailclimb/JavaWebProject.目前只上传了 ...

  8. 用JDBC连接 数据库 进行简单的增删改查

    JDBC为java的基础.用jdbc实现对数据库的增删改查的功能是程序员的基本要求.本例以mysql为例,首先要使用本例需要添加mysql-connector-java-5.1.7-bin.jar包. ...

  9. JDBC【1】-- 入门之增删改查

    目录 1.jdbc是什么 2.使用IDEA开发 2.1 创建数据库,数据表 2.2 使用IDEA创建项目 1.jdbc是什么 JDBC(Java DataBase Connectivity,java数 ...

随机推荐

  1. Hadoop学习笔记:使用Mrjob框架编写MapReduce

    1.mrjob介绍 一个通过mapreduce编程接口(streamming)扩展出来的Python编程框架. 2.安装方法 pip install mrjob,略.初学,叙述的可能不是很细致,可以加 ...

  2. 关于Mysql的索引

    索引是指把你设置为索引的字段A的内容储存在一个独立区间S里,里面只有这个字段的内容.在找查这个与这个字段A的内容时会直接从这个独立区间里查找,而不是去到数据表里查找.找到的这些符合条件的字段后再读取字 ...

  3. Error: Cannot find module 'gulp-clone'问题的解决

    安装完gulp环境,并且配置好gulpfile.js,执行静态文件压缩和代码混淆时,出现如下错误: Error: Cannot find module 'gulp-clone' Error: Cann ...

  4. 利用IIS和Nginx实现负载均衡

    一直对Nginx反向代理和负载均衡感兴趣,今天在Windows下搭建了一个简单实例.步骤如下: 1.下载Nginx,我下载的是最新的1.11.10版本,地址http://nginx.org/downl ...

  5. 深入理解ajax系列第四篇——请求实例

    前面的话 在使用ajax的过程中,常用的请求方式是GET和POST两种.本文将以实例的形式来详细说明这两种请求方式 GET GET是最常见的请求类型,最常用于向服务器查询某些信息.必要时,可以将查询字 ...

  6. 每天一个Linux命令(23)--linux 目录结构(一)

    对于每一个Linux 学习者来说,了解 Linux 文件系统的目录结构,是学好Linux 的至关重要的一步,深入了解Linux 文件目录结构的标准和每个目录的详细功能,对于我们用好Linux 系统至关 ...

  7. CSS实现覆盖弹窗(效果如JQuery-UI的Dialog)

    原理:定义一个新的div用来覆盖整个页面,再把想要弹出的窗口放在这个div上面 1.定义一个div,设置其隐藏(display:none),用于覆盖整个页面,并设置其CSS属性为: #divBg { ...

  8. 关于JavaScript简单描述

    1.什么是JavaScript? JavaScript 是一种专门用于与网页交互而设计的脚本语言,它有三部分组成,那是哪三部分呢?分别是ECMAScript(提供核心语言功能),DOM(提供访问和操作 ...

  9. 深度剖析Spark分布式执行原理

    让代码分布式运行是所有分布式计算框架需要解决的最基本的问题. Spark是大数据领域中相当火热的计算框架,在大数据分析领域有一统江湖的趋势,网上对于Spark源码分析的文章有很多,但是介绍Spark如 ...

  10. springmvc基础学习3---注解简单理解

    1:@Controller 用来注解这个bean是MVC模型中的一个C 会被spring的auto-scan扫到纳入管理.Spring mvc框架中的action层注入,也就是控制层.控制器Contr ...