一、数据的持久化

    持久化(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. java集合框架05——ArrayList和LinkedList的区别

    前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容. List概括 先来回顾一下List在Collection中的的框架图 ...

  2. C++_运算符重载

    什么是运算符的重载? 运算符与类结合,产生新的含义. 为什么要引入运算符重载? 作用:为了实现类的多态性(多态是指一个函数名有多种含义) 怎么实现运算符的重载? 方式:类的成员函数 或 友元函数(类外 ...

  3. webservice基本功能介绍

    WebService, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据WebService规范实施的应用之间, 无论它们所使用的语言. 平台或内 ...

  4. 每天一个linux命令(27)--tar命令

    通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候 tar 命令就是必不可少的一个功能强大的工具.Linux 中最流行的 tar 是麻雀虽小,五脏俱全. tar 命令可以为Linux ...

  5. 每天一个linux命令(25)--Linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下: 命令: ls  -lih 2098120 lrwxr ...

  6. Selenium 基本操作--元素定位

    对页面元素进行操作 1.   输入框输入 driver.findElement(By.id("id号")).sendKeys(“输入框输入内容”): 例:

  7. mysql数据库的中文乱码问题的解决

    今天终于解决了数据库中文乱码的问题,分享出来让更多的人作为参考,我们进入主题: 如果在搭建mysql数据库的时候没有设置它的编码格式,在以后的开发中,中文乱码会是一个令人头疼的问题,所以我在这里分享一 ...

  8. 跨专业学习编程的苦逼生活 QWQ嘤嘤嘤

    一串串小小的代码,竟然可以做出辣么多的东西,彻底颠覆了我的世界观.人生观.价值观. 话不多说,一个例子证明一切>>>> <!DOCTYPE html> <ht ...

  9. mongoDB & Nodejs 访问mongoDB (二)

    非常详细的文档http://mongodb.github.io/node-mongodb-native/2.2/quick-start/quick-start/ 连接数据库 安装express 和 m ...

  10. MyEclipse下安装MyBatis Generator代码反向生成工具

    一.离线方式: 在http://mybatis.googlecode.com/svn/sub-projects/generator/trunk/eclipse/UpdateSite/下载 featur ...