一、数据的持久化

    持久化(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. Angular企业级开发(8)-控制器的作用域

    scope概念 scope(作用域)是视图和控制器之间的桥梁,scope本身是一个对象,有方法和属性.scope可以应用在视图和控制器上. scope简单示例 <!DOCTYPE html> ...

  2. WebSocket浅析(一):实现群聊功能

    首先WebSocket打破了传统的web请求响应模式,实现管道式的实时通信,并且可以持续连接. 相对于传统 HTTP 每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket 是类似 So ...

  3. 原来JS是这样的 - 提升, 作用域 与 闭包

    引子 长久以来一直都没有专门学过 JS ,因为之前有自己啃过 C++ ,又打过一段时间的算法竞赛(写得一手好意大利面条),于是自己折腾自己的网站的时候,一直都把 JS 当 C 写.但写的时候总会遇到一 ...

  4. Markdown语法收录

    引言 Markdown编辑模式的写法在写博客以及生成简单的页面都有一定的使用,这里只收录Markdown的一些语法供以后查阅使用.具体使用手册可详见Markdown 语法说明(简体中文版) 正文 段落 ...

  5. intellij idea 常用快捷键mac版

    login.jsp文件中的html标签都是大写格式的,看着很不舒服,就改了一下,全部用的快捷键修改成小写的,也因此整理了一下常用的快捷键. shift + Command + u 大小写转换. alt ...

  6. JS中的onclick事件

    原文链接:https://segmentfault.com/q/1010000007955542?_ea=1503986 我自己做了一下测试. 这个是在html里面直接绑定onclick事件,我打印了 ...

  7. Asp.Net 常用工具类之加密——对称加密DES算法(2)

    又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有 ...

  8. MES项目参观交流会

    2016年11月10日,普实软件组织了河南蔚林.江苏正恺.吴通控股.上海锐拓等单位的26位企业家代表,走进科兴电器,开展企业家现场交流活动.企业家们参观了科兴花园式数字化工厂.感受了大数据中心的强大功 ...

  9. Xpath定位总结

    先贴上练习xpath的地址:http://www.w3school.com.cn/example/xmle/books.xml 或则也可以使用百度进行练习 1.相对定位与绝对定位 //表示相对定位,对 ...

  10. WebGIS中自定义互联网地图局部注记的一种方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.    前言 实际项目中我们经常会遇到这样一种场景:地图底图可能是互 ...