初学JDBC的一些总结(一)
1、关于JDBC的的个人理解:
JDBC(Java Data Base Connectivity,java 数据库连接)是用于执行 SQL 语句的 JavaAPI,可以为多种关系型数据库提供统一的访问方式,它由一组用 Java 语言编写的类和接口组成。JDBC 提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。虚线表示的地方就是我们现在需要学习的模块在整个系统中所处的位置,JDBC只是提供了一套标准的接口,没有具体的功能实现,这些具体的实现都是由各个数据库厂家按照这个标准实现的。也就是 JDBC 驱动实现类,Java 应用程序连接指定数据库,需要使用厂家提供的 JDBC 驱动才能连接。(这里其实就是 java 多态的一种体现,一个接口可以有很多具体的实现)。

2、数据库驱动:
数据库安装完成之后并不能直接使用,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。其实也就是数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件。连接不同的数据库需要使用相对应的数据库驱动程序。
3、JDBC 连接数据库 的实现过程(这里指的是MySQL数据库):
一、安装数据库并创建数据库
二、加载驱动(不同的数据库加载驱动的方式不一样!)
比较常用的是:CLass.for(jdbcName);(推荐使用这种方法,不会对具体的驱动类产生依赖,当然了,其他的方法也是可以的)
三、获取数据库连接的Connection接口:
一般比较常用的方法就是使用DriverManager.getConnection(dbUrl, dbUserName, dbPassword),返回值为Connection的一个对象。
dbUrl:指的是数据库连接的地址,URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库。
dbUserName:指的是连接数据库的是需要的用户名
dbPassword:指的是链接数据库是指定用户名所对应的密码
URL是由规定的写法格式的,必须按照要求写才能找到指定的数据库:MySQL 数据库的连接地址格式:jdbc:mysql://IP 地址:端口号/数据库名称
jdbc 协议:JDBC URL 中的协议总是 jdbc ;
子协议:驱动程序名或数据库连接机制(这种机制可由一个或多个驱动程序支持)的名称,如 mysql;
子名称:一种标识数据库的方法。必须遵循“//主机名:端口/子协议”的标准 URL 命名约定,如//localhost:3306/db_***;
package com.java1234.jdbc.chap02.sec04; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; public class Demo1 { // 数据库连接地址
private static String dbUrl="jdbc:mysql://localhost:3306/db_book";
// 用户名
private static String dbUserName="root";
// 密码
private static String dbPassword="123456";
// 驱动名称
private static String jdbcName="com.mysql.jdbc.Driver"; public static void main(String[] args) {
try {
Class.forName(jdbcName);
System.out.println("加载驱动成功!");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("加载驱动失败!");
}
Connection con=null;
try {
// 获取数据库连接
con=DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
System.out.println("获取数据库连接成功!");
System.out.println("进行数据库操作!");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
总的来说:JDBC的执行步骤就是加载驱动、创建数据库连接、执行SQL语句、输出并处理执行结果、关闭数据库资源。
4、利用JDBC操作数据库实现简单的添加、更新和删除功能(说明一下:这里不再展示Book模型和封装了获取数据库连接的DbUtil类,因为前边已经展示过了,这里使用只是把它它封装进一个工具类,便于使用罢了):
一、向数据库中添加图书
1 package com.java1234.jdbc.chap03.sec02;
2
3 import java.sql.Connection;
4 import java.sql.Statement;
5
6 import com.java1234.jdbc.model.Book;
7 import com.java1234.jdbc.util.DbUtil;
8
9 public class Demo2 {
10
11 private static DbUtil dbUtil=new DbUtil();
12
13 /**
14 * 添加图书2
15 * @param book
16 * @return
17 * @throws Exception
18 */
19 private static int addBook2(Book book)throws Exception{
20 Connection con=dbUtil.getCon(); // 获取连接
21 String sql="insert into t_book values(null,'"+book.getBookName()+"',"+book.getPrice()+",'"+book.getAuthor()+"',"+book.getBookTypeId()+")";
22 Statement stmt=con.createStatement(); // 创建Statement
23 int result=stmt.executeUpdate(sql);
24 dbUtil.close(stmt, con); // 关闭Statement和连接
25 return result;
26 }
27
28 /**
29 * 添加图书
30 * @param bookName
31 * @param price
32 * @param author
33 * @param bookTypeId
34 * @return
35 * @throws Exception
36 */
37 private static int addBook(String bookName,float price,String author,int bookTypeId)throws Exception{
38 Connection con=dbUtil.getCon(); // 获取连接
39 String sql="insert into t_book values(null,'"+bookName+"',"+price+",'"+author+"',"+bookTypeId+")";
40 Statement stmt=con.createStatement(); // 创建Statement
41 int result=stmt.executeUpdate(sql);
42 dbUtil.close(stmt, con); // 关闭Statement和连接
43 return result;
44 }
45
46 public static void main(String[] args) throws Exception{
47 /*int result=addBook("Java核心技术(上)", 98, "不知道", 1);
48 if(result==1){
49 System.out.println("添加成功!");
50 }else{
51 System.out.println("添加失败!");
52 }*/
53 // 多行注释 ctrl+shift+/
54 Book book=new Book("Java核心技术(下)", 98, "不知道", 2);
55 int result=addBook2(book);
56 if(result==1){
57 System.out.println("添加成功!");
58 }else{
59 System.out.println("添加失败!");
60 }
61 }
62 }
二、通过图书编号更新数据库中某一本图书的信息
package com.java1234.jdbc.chap03.sec03; import java.sql.Connection;
import java.sql.Statement; import com.java1234.jdbc.model.Book;
import com.java1234.jdbc.util.DbUtil; public class Demo1 { private static DbUtil dbUtil = new DbUtil(); /**
* 更新图书
* @param book
* @return
* @throws Exception
*/
private static int updateBook(Book book) throws Exception {
Connection con = dbUtil.getCon(); // 获取连接
//这种拼接SQL语句的方法真的不提倡使用,太麻烦而且还容易出错
String sql = "update t_book set bookName='" + book.getBookName()
+ "',price=" + book.getPrice() + ",author='" + book.getAuthor()
+ "',bookTypeId=" + book.getBookTypeId() + " where id="
+ book.getId(); // ctrl+a 全选 ctrl+shift+F 格式化代码
Statement stmt = con.createStatement(); // 创建Statement
int result = stmt.executeUpdate(sql);
dbUtil.close(stmt, con); // 关闭Statement和连接
return result;
} public static void main(String[] args) throws Exception{
Book book=new Book(3,"Java***", 121, "厉害了大兄弟", 1);
int result=updateBook(book);
if(result==1){
System.out.println("更新成功!");
}else{
System.out.println("更新败!");
} }
}
三、通过图书编号删除数据库中指定的图书
package com.java1234.jdbc.chap03.sec04; import java.sql.Connection;
import java.sql.Statement; import com.java1234.jdbc.util.DbUtil; public class Demo1 { private static DbUtil dbUtil=new DbUtil(); /**
* 删除图书
* @param id
* @return
* @throws Exception
*/
private static int deleteBook(int id)throws Exception{
Connection con = dbUtil.getCon(); // 获取连接
String sql ="delete from t_book where id="+id;
Statement stmt = con.createStatement(); // 创建Statement
int result = stmt.executeUpdate(sql); //执行SQL语句
dbUtil.close(stmt, con); // 关闭Statement和连接
return result;
} public static void main(String[] args) throws Exception{
int result=deleteBook(3);
if(result==1){
System.out.println("删除成功!");
}else{
System.out.println("删除失败!");
}
}
}
总结一下:通过JDBC执行SQL语句的大致步骤就是在创建完数据库连接之后,先按照要求编写满足题意的SQL语句,然后通过Connection对象的具体方法获得一个用于向数据库发送SQL语句的Statement对象,这个对象能将SQL语句发送给数据库,并且返回的是一个int 型的结果,可以利用返回结果判断语句是否执行成功。SQL语句执行完毕一定要关闭数据库连接和Statement对象,这些资源比较稀缺,不能等着系统自动关闭。另外,这两个对象关闭的时候也是又先后顺序的,我们是先创建数据库连接在创建数据库发送SQL语句的Statement对象的,关闭的时候要先关Statement对象,然后再关Connection对象,这就好比进门和出门,进门先进外边的大门(Connection对象),然后再进里边的小门(Statement对象),然后出来的顺序刚好相反。
常用Statement方法:
- execute(String sql):运行语句,返回是否有结果集
- executeQuery(String sql):运行select语句,返回ResultSet结果集。
- executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。
- addBatch(String sql) :把多条sql语句放到一个批处理中。
- executeBatch():向数据库发送一批sql语句执行。
初学JDBC的一些总结(一)的更多相关文章
- 关于JDBC学习过程中的注意事项(分享自己犯过的错误,写给初学JDBC的小伙伴的八条建议)
关于JDBC学习过程中的注意事项(分享自己犯过的错误,写给初学JDBC的小伙伴的八条建议) 前言:最近在学习JDBC,总结了几个小问题,特地分享给大家,让大家不要犯这样的错误,也希望大家养成学会总结的 ...
- 初学JDBC,调用存储过程
在JDBC简单封装的基础上实现 public class UserDao{ public static void testGetUser(String userName) throws Excepti ...
- 初学JDBC,防SQL注入简单示例
在JDBC简单封装的基础上实现 public class UserDao{ public static void testGetUser(String userName) throws Excepti ...
- 初学JDBC,JDBC工具类的简单封装
//工具类不需要被继承 public final class JdbcUtils{ //封装数据库连接参数,便于后期更改参数值 private static String url="jdbc ...
- 初学JDBC,最简单示例
一.下载相应数据库驱动jar包,添加到项目中 二.注册驱动,数据库驱动只加入到classpath中是还不行的,还要在使用的时候注册一下,就像安装驱动软件,只拷贝到硬盘还不行,需要安装一下 Driver ...
- 初学JDBC的一些总结(二)
一.简单介绍PreparedStatement 和Statement的区别: PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement.Prepare ...
- 初学JDBC,获取插入记录的主键、执行批量操作
一.获取插入记录主键值 在创建语句的地方使用Statement.RETURN_GENERATED_KEYS标识一下,然后通过getGeneratedKeys方法获得 preparedStatement ...
- 利用JDBC连接Eclipse和mySQL5.1.26数据库
初学JDBC,看了看书,自己动手的时候还是有很多地方有问题,最终终于解决了实现了数据库的连接.现将整个步骤描述如下: 环境:mySQL5.1.26(win 32bit), Eclipse JavaEE ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介
日常啰嗦 终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和da ...
随机推荐
- Context连接和断开的情况下的CRUD操作
连续情况下的CRUD操作是一项相当容易的任务,因为默认情况下,上下文会自动跟踪实体在其生命周期中发生的更改,AutoDetectChangesEnabled为true. 以下示例显示如何添加,更新和删 ...
- redis centos 6.5 redis版本3.2.8安装过程
redis作为非关系数据库的典型应用,在庞大的数据通信处理有着自己强大的优势,今天也自己来开始学些redis. 以下每一个语句都是我执行的命令. 按照所查资料分析,需要tcl测试工具,这个在cento ...
- Codeforces 354B dp Game with Strings dp
Game with Strings 题意并不是在图上走,看了好久才看出来.. dp[ i ][ mask ]表示从 i 层开始走,起点有mask个, a的个数-b的个数的 最大值或者最小值. #in ...
- Codeforces 725E Too Much Money (看题解)
Too Much Money 最关键的一点就是这个贪心可以在sqrt(n)级别算出答案. 因为最多有sqrt(n)个不同的数值加入. 我们可以发现最优肯定加入一个. 然后维护一个当前可以取的最大值, ...
- k8s 廖老师的分享
https://mp.weixin.qq.com/s/7o8QxGydMTUe4Q7Tz46Diw
- HDU4779 Tower Defense 组合数学
原文链接https://www.cnblogs.com/zhouzhendong/p/HDU4779.html 题目传送门 - HDU4779 题意 $T$ 组数据. 给定一个 $n\times m$ ...
- BZOJ3110 [Zjoi2013]K大数查询 树套树 线段树 整体二分 树状数组
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3110 题意概括 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位 ...
- POJ 3237 Tree 【树链剖分】+【线段树】
<题目链接> 题目大意: 给定一棵树,该树带有边权,现在对该树进行三种操作: 一:改变指定编号边的边权: 二:对树上指定路径的边权全部取反: 三:查询树上指定路径的最大边权值. 解题分析: ...
- Why Did the Cow Cross the Road III HYSBZ - 4991 -CDQ-逆序数
HYSBZ - 4991 题意: 第一列 1-n的排列 ,第二列 1-n的排列. 相同数字连边 ,问 有多少组 数字 是有交点的并且 绝对值之差>K思路:处理一下 1-n 在第一列的位置, ...
- Xamarin Essentials应用教程文件系统FileSystem
Xamarin Essentials应用教程文件系统FileSystem 文件系统用于管理设备内的各类文件.通过文件系统,应用程序可以创建永久文件和临时文件,也可以获取预先打包的文件,如预设数据库文件 ...