初学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 ...
随机推荐
- MyBatis - 1.入门
MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyBatis可以使用简单的XML或注解 ...
- C# 之 @ Assembly
@ Assembly指定需要动态编译的类,在编译期间将程序集链接到 ASP.NET 应用程序页(例如网页.用户控件.母版页或 Global.asax 文件),使程序集的所有类和接口都在该页上可用. & ...
- Windows 之 IP地址
IP地址是指互联网协议地址(Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络 ...
- ArcGIS 10开发迁移策略(待续)
1.更改 ESRI.ArcGIS.ADF 程序集 ArcGIS 10 中, ADF 程序集中的功能被分散到不同的程序集中,如果将 ArcGIS 9.3 下 开发的自定义组件迁移到 ArcGIS 10 ...
- Kafka/Zookeeper集群的实现(二)
[root@kafkazk1 ~]# wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12. ...
- 企业级代码托管Gitlab
Gitlab概述: 一个利用Ruby on Rails开发的开元应用程序,从而实现一个代码托管项目仓库,可以通过web界面进行访问公开的或者私有的项目 Ruby on Rails是一个可以使开发,部署 ...
- C# 类的序列化和反序列化
序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创 ...
- 019 python面相对象编程
一:self的意思 1.说明 self代表类的实例,而非类. 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self. self 代表的是类的实例 ...
- zoj 1002 Fire Net 碉堡的最大数量【DFS】
题目链接 题目大意: 假设我们有一个正方形的城市,并且街道是直的.城市的地图是n行n列,每一个单元代表一个街道或者一块墙. 碉堡是一个小城堡,有四个开放的射击口.四个方向是面向北.东.南和西.在每一个 ...
- rock-paper-scissors
rock-paper-scissors维护三个前缀和,然后注意顺序,最后做差来确定可行的答案,因为答案比较小,可以考虑这种暴力做法,像这种方案数可以++的题真的不多,如果想不出来特别优秀的想法,不妨简 ...