初学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 ...
随机推荐
- rabbitmq3.7.5 centos7 集群部署笔记
1. 准备3台 centos服务器 192.168.233.128 192.168.233.130 192.168.233.131 防火墙放开 集群端口, 这里一并把所有rabbitmq ...
- mysql恢复ibd文件
1.将原表删除,包括ibd和frm文件 2.重新创建表结构. 3.丢弃表空间 alter table tableName discard tablespace; 4.将要恢复的ibd文件拷贝到数据库目 ...
- 2018 UESTC 线段树专题
A - 一棵简单的线段树 A[1...n]初始全为0. 1. 给两个数p 和 x(1≤p≤n),单点更新 A[p] <- x 2. 给两个数L和R (1≤L<R≤n), L到R区间里这几 ...
- SqlSever大数据分页【转】
在sql sever中大数据的分页一直是难以处理的一块,利用id自增列分页也存在不足之处.从一个相对全面的分页看,sql sever2005中新增的row_number()函数解决了这个问题.还 ...
- Python_迭代器
迭代器:迭代器里的元素读一个丢一个,不能回退,不能用下标访问 x.__next__():迭代器里唯一的方法,只读下一个 d = iter(['Presly', 'is', 'lovely', ]) p ...
- go-无法下载websocket的问题
由于限制问题,国内使用 go get 安装 golang 官方包可能会失败,如我自己在安装 collidermain 时,出现了以下报错: $ go get collidermain package ...
- sparkStreaming消费kafka-1.0.1方式:direct方式(存储offset到zookeeper)
版本声明: kafka:1.0.1 spark:2.1.0 注意:在使用过程中可能会出现servlet版本不兼容的问题,因此在导入maven的pom文件的时候,需要做适当的排除操作 <?xml ...
- Android ADB命令教程二——ADB命令详解
Android ADB命令教程二——ADB命令详解 转载▼ 原文链接:http://www.tbk.ren/article/249.html 我们使用 adb -h 来看看,adb命令里面 ...
- appium---第二个脚本,定位页面元素
工具使用: 1.android-sdk的自带工具---uiautomator工具 2.使用find_element_by_id寻找元素位置 from appium import webdriver; ...
- docker保存、载入、导出、导入
保存和载入 拿到CONTAINER ID docker ps -a 通过容器id生成镜像dockerlinuxdemoweb:update docker commit b33633d12871 doc ...