1、数据持久化

l  持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用,也称为“固化”。在大多数情况下,服务器或客户端应用中数据的持久化是通过关系型数据库来实现

l  存储设备:磁盘、硬盘, U盘,光盘等

l  存储形式:数据库、xml文件、txt文件等

2、知识点2: Java 中的数据存储技术

l  在Java中,数据库存取技术可分为如下几类:

l  JDBC直接访问数据库

l  第三方O/R工具,如Hibernate, ibatis 等

l  JDBC是java访问数据库的基石,其他技术都是对jdbc的封装

3、什么是JDBC

l  JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的操作数据库的Interface(一组API),定义了用来访问数据库的标准Java类库,而接口的实现有各个数据库厂商来完成

l  JDBC驱动程序(jar包):数据库厂商对JDBC接口的一组实现类(jar包)

4、什么是ODBC

l  ODBC(Open Database Connectivity,开放数据库连接)是微软公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API

5、JDBC的分类

目前有四种可供使用的JDBC驱动程序,不同类型的的驱动程序有着不一样的使用方法,所以当我们在连接数据库之前,必须先依照我们的需求选择一个适当的驱动程序,这四种不同类型的驱动程序分别是:

1  JDBC-ODBC桥 :桥接器型的驱动程序,

2   部分本地API部分Java的驱动程序,也是桥接器型驱动程序之一

3   JDBC网络纯Java驱动程序

4   本地协议的纯 Java 驱动程序:这类型的驱动程序是最成熟的JDBC驱动程序,不但无需在使用者计算机上安装任何额外的驱动程序,也不需在服务器端安装任何的中介程序(middleware),所有存取数据库的操作,都直接由驱动程序来完成。

6、JDBC API接口介绍

7、java初体验

// 1.数据库服务开启。 2.需要将数据库驱动导入.

//JDBC体验

public class Test1 {
public static void main(String[] args) throws Exception {
//1.将驱动进行注册(可以进行与数据库的链接)
DriverManager.registerDriver(new Driver());
//2.得到一个与数据库连接的对象
Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb","root","root");
//3.得到一个执行sql对象
Statement stm=con.createStatement();
//4.执行sql语句. 以查询为例,执行后会返回一个ResultSet结果集。(其实就是包含查询到的信息)
ResultSet rs=stm.executeQuery("select * from emp"); //查表名
//5.将结果集中的内容迭代出来.
while(rs.next()){
Object obj=rs.getObject("ename"); //查列名
System.out.println(obj);
}
//6.需要将资源释放
rs.close();
stm.close();
con.close(); }
}

8、对以上代码进行异常处理:

//JDBC异常处理
public class Test3 {
public static void main(String[] args) {
Connection con = null;
Statement stm = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/mydb", "root", "root");
stm = con.createStatement();
rs = stm.executeQuery("select * from emp");
while (rs.next()) {
String name = rs.getString("ename");
int no = rs.getInt("empno");
Date date = rs.getDate("hiredate");
System.out.println(name + " " + no + " " + date);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("加载驱动失败");
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("SQL操作失败");
} finally {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("关闭rs失败的");
}
try {
if (stm != null)
stm.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("关闭stm失败的");
}
try {
if (con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("关闭con失败的");
}
}
}
}

9、对以上代码进行优化(1)

public class Test4 {
@Test
public void jdbcTest() {
//定义在外面,同时将处理异常方法定义在外面
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/mydb";
String username = "root";
String password = "root";
Connection con = null;
Statement stm = null;
ResultSet rs = null;
try {
Class.forName(driver);
con = DriverManager.getConnection(url, username, password);
stm = con.createStatement();
rs = stm.executeQuery("select * from emp");
while (rs.next()) {
String name = rs.getString("ename");
int no = rs.getInt("empno");
Date date = rs.getDate("hiredate");
System.out.println(name + " " + no + " " + date);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("加载驱动失败");
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("SQL操作失败");
} finally {
closeResultSet(rs);
closeStatment(stm);
closeConnection(con);
}
}
// 关闭Connection
// 关闭的Statement
// 关闭ResultSet方法
public void closeConnection(Connection con) {
try {
if (con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("关闭con失败的");
}
}
public void closeStatment(Statement stm) {
try {
if (stm != null)
stm.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("关闭stm失败的");
}
}
public void closeResultSet(ResultSet rs) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("关闭rs失败的");
}
}
}

10 对以上代码再次优化

10.1 定义一个mysqldb.properties配置文件

定义好配置变量  

driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://127.0.0.1\:3306/testguest
username=root
password=1234abcd

10.2 新建jdbcUtil工具类 JdbcUtil.cs

获取配置文件中的值

private static String driver;
private static String url;
private static String username;
private static String password;
// 对driver,url,username, password 进行赋值
static {
// 通过类加载器获得资源,并以流的方式进行操作
InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream(
"包名/ db.properties");
Properties prop = new Properties();
try {
prop.load(is);
driver = prop.getProperty("driver");
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("读取数据库配置文件失败");
}
}

10.2.1 加载驱动

static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("加载驱动失败");
}
}

10.2.2获得连接的方法

public static Connection getConnection() {
Connection con = null;
try {
con = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("连接数据库操作失败");
} finally {
}
return con;
}

10.2.3 关闭的方法

// 关闭Connection
// 关闭的Statement
// 关闭ResultSet方法
public static void close(Connection con) {
try {
if (con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("关闭con失败的");
}
}
public static void close(Statement stm) {
try {
if (stm != null)
stm.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("关闭stm失败的");
}
}
public static void close(ResultSet rs) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("关闭rs失败的");
}
}

10.3 新建Test.CS类

public class Test {

    @Test
public void select() {
Connection con = null;
Statement st = null;
ResultSet rs = null;
try {
con = JdbcUtil.getConnection();
st = con.createStatement();
rs = st.executeQuery("select * from tg_user");
while (rs.next()) {
System.out.println(rs.getInt());
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(rs);
JdbcUtil.close(st);
JdbcUtil.close(con);
}
}
}

java学习笔记—JDBC1(16)的更多相关文章

  1. Java学习笔记(16)

    需求:使用LinkedList存储一副扑克牌,然后实现洗牌功能 package cn.itcast.list; import java.util.LinkedList; import java.uti ...

  2. java JDK8 学习笔记——第16章 整合数据库

    第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...

  3. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  4. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  5. 20145330第八周《Java学习笔记》

    20145330第八周<Java学习笔记> 第十五章 通用API 通用API 日志:日志对信息安全意义重大,审计.取证.入侵检验等都会用到日志信息 日志API Logger:注意无法使用构 ...

  6. 20145330第六周《Java学习笔记》

    20145330第六周<Java学习笔记> . 这周算是很忙碌的一周.因为第六周陆续很多实验都开始进行,开始要准备和预习的科目日渐增多,对Java分配的时间不知不觉就减少了,然而第十和十一 ...

  7. Java学习笔记--Swing用户界面组件

    很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...

  8. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  9. java学习笔记07--日期操作类

    java学习笔记07--日期操作类   一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...

随机推荐

  1. C# JSON 序列化

    1.JavaScriptSerializer System.Web.Extensions.dll System.Web.Script.Serialization命名空间 Serialize Deser ...

  2. MySQL GTID (三)

    五.如何跳过一个GTID 环境见系列一 5.1 创建表,模拟数据 #主机上 create table t_test (id int primary key ,name varchar(10)); in ...

  3. 新手C#重载、重写的学习2018.08.04

    重载:在同一类(class)中,使用相同的方法名称,不同的参数和(不一定)不同的返回值类型构造成的方法. 举例: class OverLoadTest { public void Hello() { ...

  4. LevelDB 的缺憾

    [LevelDB 的缺憾] 1.Snapshots 只能通过 DB::GetSnapshot() 创建,意即只能创建当下的 Snapshot. 2.

  5. Shader.WarmupAllShaders

    [Shader.WarmupAllShaders]

  6. 微信小程序通讯录首字母索引效果,车辆品牌选择列表

    效果图: wxml代码: <block wx:for="{{list}}"> <view class='letter' id="letter{{inde ...

  7. [leetcode]621. Task Scheduler任务调度

    Given a char array representing tasks CPU need to do. It contains capital letters A to Z where diffe ...

  8. centos6.5下使用yum完美搭建LNMP环境(php5.6)

    准备工作 配置防火墙,开启80端口.3306端口删除原有的 iptables , 添加合适的配置 rm -rf /etc/sysconfig/iptables vi /etc/sysconfig/ip ...

  9. jQuery绑定事件的四種方式

    这篇文章主要介绍的是jQuery绑定事件的四种方式相关内容,下面我们就与大家一起分享. jQuery绑定事件的四种方式 jQuery提供了多种绑定事件的方式,每种方式各有其特点,明白了它们之间的异同点 ...

  10. zip多个分割文件合并

    copy /b 1.z01+1.z02+1.zip 注意:1.zip在最后