JDBC基础学习(一)—JDBC的增删改查
一、数据的持久化
持久化(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的增删改查的更多相关文章
- Java数据库连接--JDBC基础知识(操作数据库:增删改查)
一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...
- python基础学习之类的属性 增删改查
类中的属性如何在类外部使用代码进行增删改查呢 增加.改变: setattr内置函数以及 __setattr__魔法方法 class A: aaa = '疏楼龙宿' a = A() setattr(a, ...
- python学习之-成员信息增删改查
python学习之-成员信息增删改查 主要实现了成员信息的增加,修改,查询,和删除功能,写着玩玩,在写的过程中,遇到的问题,旧新成员信息数据的合并,手机号和邮箱的验证,#!/usr/bin/env p ...
- Vc数据库编程基础MySql数据库的表增删改查数据
Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...
- EF学习笔记-1 EF增删改查
首次接触Entity FrameWork,就感觉非常棒.它节省了我们以前写SQL语句的过程,同时也让我们更加的理解面向对象的编程思想.最近学习了EF的增删改查的过程,下面给大家分享使用EF对增删改查时 ...
- Hadoop基础-HDFS的API实现增删改查
Hadoop基础-HDFS的API实现增删改查 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客开发IDE使用的是Idea,如果没有安装Idea软件的可以去下载安装,如何安装 ...
- JDBC+Servlet+JSP实现基本的增删改查(简易通讯录)
前言: 最近学习JavaWeb的过程中,自己实践练手了几个小项目,目前已经上传到我的Github上https://github.com/Snailclimb/JavaWebProject.目前只上传了 ...
- 用JDBC连接 数据库 进行简单的增删改查
JDBC为java的基础.用jdbc实现对数据库的增删改查的功能是程序员的基本要求.本例以mysql为例,首先要使用本例需要添加mysql-connector-java-5.1.7-bin.jar包. ...
- JDBC【1】-- 入门之增删改查
目录 1.jdbc是什么 2.使用IDEA开发 2.1 创建数据库,数据表 2.2 使用IDEA创建项目 1.jdbc是什么 JDBC(Java DataBase Connectivity,java数 ...
随机推荐
- Visual Studio Code 中编写 C++ 的工作流
1. 官网下载 Visual Studio Code ,安装.按提示安装 cpp 插件和 cmake 插件. 官网下载 CMake ,安装. 官网下载 Mingw ,安装. 安装 Mingw 时,注意 ...
- 更新几篇之前写在公众号上的文章:线性可分时SVM理论推导;关联分析做捆绑销售和推荐;分词、去停用词和画词云
适合阅读人群:有一定的数学基础. 这几篇文章是16年写的,之前发布在个人公众号上,公众号现已弃用.回过头来再看这几篇文章,发现写的过于稚嫩,思考也不全面,这说明我又进步了,但还是作为学习笔记记在这里了 ...
- 2017 CVTE春招内推专场 C/C++软件开发岗笔试编程题
先来一波吐槽:选择题全是不定项选择,考的内容在我看来,"反正我接受唔到咯". 比如: 1.Windows操作系统某个通信机制(具体题目忘了,反正答案我选了个熟悉的名词"消 ...
- react搭配amazeui环境搭建
1.安装node https://nodejs.org/en/download/ 查看node npm版本 2.安装react 创建新的react单页面应用 npm install -g cre ...
- 【Java基础】String StringBuffer StringBuilder
String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...
- 记一个Java错误 1 -- Unsupported major.minor version 52.0
今天打开ADT eclipse 准备调试上周的安卓项目, 发现总是报错 如图: 百度了一下说是 jdk版本过低的问题 (低版本的jre运行高版本project) 于是就修改了一下 window - ...
- 程序员的自我修养:高效使用Google解决问题
如果票选近二十年最伟大的发明,我相信搜索引擎肯定会占据一个不容小觑的位置,它不单是一项发明,更是一项成就,最大程度消灭了信息的不平等.既然人人都可以接触到海量的信息,那么衡量信息财富多寡就只剩下技巧这 ...
- Maven 搭建SpringMvc+Spring+Mybatis详细记录
总觉得,看比人写的总是那么好,每次搭建框架时都会找博客,找教程来跟着一步一步走,虽然很快搭建成功了,但是经常情况是我并不知道我干了什么,也不记得具体步骤,到底为什么要这么做,今天我详细记录了一下自己搭 ...
- centOS7 mini配置linux服务器(一)安装centOs7
1. 准备centos-7 (minni镜像) 官网地址http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minim ...
- Robot Framework自动化测试环境部署
文档版本:v1.0 作者:令狐冲 如有问题请发邮件到:1146009864@qq.com 使用Robot Framework框架(以下简称RF)来做自动化测试. 模块化设计 1.所需环境一览表 软件 ...