java学习笔记—JDBC1(16)
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)的更多相关文章
- Java学习笔记(16)
需求:使用LinkedList存储一副扑克牌,然后实现洗牌功能 package cn.itcast.list; import java.util.LinkedList; import java.uti ...
- java JDK8 学习笔记——第16章 整合数据库
第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 20145330第八周《Java学习笔记》
20145330第八周<Java学习笔记> 第十五章 通用API 通用API 日志:日志对信息安全意义重大,审计.取证.入侵检验等都会用到日志信息 日志API Logger:注意无法使用构 ...
- 20145330第六周《Java学习笔记》
20145330第六周<Java学习笔记> . 这周算是很忙碌的一周.因为第六周陆续很多实验都开始进行,开始要准备和预习的科目日渐增多,对Java分配的时间不知不觉就减少了,然而第十和十一 ...
- Java学习笔记--Swing用户界面组件
很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记07--日期操作类
java学习笔记07--日期操作类 一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...
随机推荐
- open语句对文本和二进制文件的读写
文本文件的操作此种方式是以行为单位进行读取的基本单位,主要应用的方法和函数有Open,Close,Line Input,FreeFile,EOF等.先简述其功能然后结合代码示例进行说明.Open:顾名 ...
- 【常见CPU架构对比】维基百科
Comparison of instruction set architectures https://en.wikipedia.org/wiki/Comparison_of_instruction_ ...
- UNITY 复制对象后局部坐标和世界坐标的变化问题
void Start () { var pgo = transform.Find ("Button").gameObject; obtn = Instantiate (pgo); ...
- Overcoming Life's Obstacles - ASC 2017 March 03
Overcoming Life's Obstacles - How a top oboist overcame a neurological disorder to play again ©Advan ...
- Python列表练习题
1.创建一个空列表,命名为names,往里面添加 Lihua.Rain.Jack.Xiuxiu.Peiqi和Black元素. #!-*- coding:utf-8 -*- names = [" ...
- HTTP请求出现405状态码method not allowed的解决办法
httppost请求目标网站出现405状态码, 原因为 Apache.Nginx.IIS等绝大多数web服务器,都不允许静态文件响应POST请求所以将post请求改为get请求即可
- 在线编辑器CKeditor,CKfinder
在线编辑器的分类: 常见的在线编辑器有很多,比较常用的有FCKeditor(在线编辑器——Ajax 浏览器 端服务器文件管理器),CKeditor(在线编辑器与服务器端文件管理器的分离,) 其中CKe ...
- 使用mybatis提供的各种标签方法实现动态拼接Sql。使用foreach标签实现遍历查询。比如实现select * from user where id in(1,10,24)这条sql查询语句。
向sql传递数组或List,mybatis使用foreach解析,如下: 需求: 传入多个id查询用户信息,用下边的sql实现: select * from user where id in(1,10 ...
- RNA-Seq differential expression analysis: An extended review and a software tool RNA-Seq差异表达分析: 扩展评论和软件工具
RNA-Seq differential expression analysis: An extended review and a software tool RNA-Seq差异表达分析: 扩展 ...
- 电脑清缓存(C盘占空间)
电脑缓存目录: 1.取消文件隐藏 2.找到C:\Users\lwx351192\AppData\Local\Temp目录下的三个子文件夹local,locallow,roaming里面的文件都可删除, ...