初学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 ...
随机推荐
- 【转】Android逆向入门流程
原文:https://www.jianshu.com/p/71fb7ccc05ff 0.写在前面 本文是笔者自学笔记,以破解某目标apk的方式进行学习,中间辅以原理性知识,方便面试需求. 参考文章的原 ...
- url、querystring模块获取请求request.url中的不同部分图解
url.parse(string).query | url.parse(string).pathname | | | | | ------ ------------------- http://loc ...
- 分布式系统的CAP理论
一.CAP理论概述 一个分布式系统最多只能同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项. 二.CAP ...
- Python_部分内置函数
内置函数:可以直接调用的函数 all():传入的列表,元组,等等,只要一个为假,就为假(fales)(所有的都为真才为真) # None, {}:空字典, []:空列表, 0:零,():空集合,“”: ...
- 再理解tcp backlog
在Linux 2.2以前,backlog大小包括了半连接状态和全连接状态两种队列大小.linux 2.2以后,分离为两个backlog来分别限制半连接SYN_RCVD状态的未完成连接队列大小跟全连接E ...
- BZOJ4237 稻草人 分治 单调栈
原文链接https://www.cnblogs.com/zhouzhendong/p/8682572.html 题目传送门 - BZOJ4237 题意 平面上有$n(n\leq 2\times 10^ ...
- vue-cli@3.x之使用vue ui创建项目-来自一个战五渣的体验
1. 全局安装vue-cli yarn global add @vue/cli // 检查安装是否成功 vue -V // 3.2.2 2. 初始化 vue ui 执行命令 vue ui 2.1 该命 ...
- lvs三种模式的配置
- shell编程第三天
- linux 命令基础一。
UNIX是什么 UNIX的定义: UNIX是一个计算机操作系统,一个用来协调.管理和控制计算机硬件和软件资源的控制程序. UNIX操作系统的特点:多用户和多任务多用户表示在同一时刻可以有多个用户同时使 ...