一、数据的持久化

    持久化(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. 第27篇 重复造轮子---模拟IIS服务器

    在写程序的时候,重复造轮子是程序员的一个大忌,很多人对重复造轮子持有反对的态度,但是我觉得这个造轮子的过程,是对于现有的知识的一个深入的探索的过程,虽然我们不可能把轮子造的那么的完善,对于现在有的东西 ...

  2. jquery的ajax提交后,会跳转页面

    今天在写代码的时候,遇到一个很奇怪的问题,一个form表单,用的是ajax的方式提交.结果,在服务器端php中,使用exit(),函数后都不能停止,并且继续跳转到本页.请求如下: 第一个请求中,其实我 ...

  3. ajax跨域请求时,sessionId不一样,导致无法记住登陆状态

    遇到这样一个场景,就是前端的域是dev,请求接口时,接口的域是beta,即使在服务端设置了cookie存放的域,'COOKIE_DOMAIN'   =>  '.roboming.com',虽然c ...

  4. 服务器数据库搭建流程(CentOs+mysql)

    前言: 服务器上数据库搭建需要知道Linux系统的版本,以前的Ubuntu14.04直接在终端下输入apt-get install (package)便可方便的下载并安装mysql,但是在centOs ...

  5. 每天一个Linux命令 1

    nl命令在Linux系统中用来计算文件中行号.nl可以将输出的文件内容自动的加上行号!其默认的结果与cat -n有点不太一样,nl可以将行号做比较多的显示设计,包括位数与是否自动补齐0等等的功能. 1 ...

  6. 用Use Case获取需求的方法是否有什么缺陷,还有什么地方需要改进?

    一.用例解释 用例是一种在开发新系统或者软件改造时捕获潜在需求的技术.每个用例提供了一个或多个场景,该场景揭示了系统是如何同最终用户或其它系统交互的,从而获得一个明确的业务目标.用例要避免技术术语,取 ...

  7. MyFirstServlet学习笔记

    MyFirstServlet学习笔记 项目文件的结构目录如下,ser包,下设Serv.java是一个servlet文件,Note只是做的笔记,webroot下有login.jsp,WEB-INF下有w ...

  8. js/jQuery中load()、onload()、ready()的区别

    一.两大事件 load事件:指页面包含图片等文件在内的所有元素都加载完毕后执行的事件. ready事件:表示文档结构已加载完成(不包括图片等非文字媒体文件) 浏览器页面渲染的过程 - 寸寸君 - 博客 ...

  9. Android中的WebView实战详解(一)

    一.为什么要用WebView? 1.兼容已有的项目2.可动态更新 二.WebView怎样使用? WebView是一个控件,如在布局中设置: <WebView android:id="@ ...

  10. Javascript基础知识小测试(一)

    这里罗列了<你不知道的js>上卷的一些知识点以及小问题,如果你想巩固一下js那么就和我一起来看看吧. 如果你能不看书就回答上80%的问题说明你js的这一部分学得还不错,再接再厉. 作用域和 ...