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_***;
1 package com.java1234.jdbc.chap02.sec04; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 7 public class Demo1 { 8 9 // 数据库连接地址 10 private static String dbUrl="jdbc:mysql://localhost:3306/db_book"; 11 // 用户名 12 private static String dbUserName="root"; 13 // 密码 14 private static String dbPassword="123456"; 15 // 驱动名称 16 private static String jdbcName="com.mysql.jdbc.Driver"; 17 18 public static void main(String[] args) { 19 try { 20 Class.forName(jdbcName); 21 System.out.println("加载驱动成功!"); 22 } catch (ClassNotFoundException e) { 23 // TODO Auto-generated catch block 24 e.printStackTrace(); 25 System.out.println("加载驱动失败!"); 26 } 27 Connection con=null; 28 try { 29 // 获取数据库连接 30 con=DriverManager.getConnection(dbUrl, dbUserName, dbPassword); 31 System.out.println("获取数据库连接成功!"); 32 System.out.println("进行数据库操作!"); 33 } catch (SQLException e) { 34 // TODO Auto-generated catch block 35 e.printStackTrace(); 36 }finally{ 37 try { 38 con.close(); 39 } catch (SQLException e) { 40 // TODO Auto-generated catch block 41 e.printStackTrace(); 42 } 43 } 44 } 45 }
总的来说:JDBC的执行步骤就是加载驱动、创建数据库连接、执行SQL语句、输出并处理执行结果、关闭数据库资源。
4、利用JDBC操作数据库实现简单的添加、更新和删除功能(说明一下:这里不再展示Book模型和封装了获取数据库连接的DbUtil类,因为前边已经展示过了,这里使用只是把它它封装进一个工具类,便于使用罢了):
一、向数据库中添加图书
1 1 package com.java1234.jdbc.chap03.sec02; 2 2 3 3 import java.sql.Connection; 4 4 import java.sql.Statement; 5 5 6 6 import com.java1234.jdbc.model.Book; 7 7 import com.java1234.jdbc.util.DbUtil; 8 8 9 9 public class Demo2 { 10 10 11 11 private static DbUtil dbUtil=new DbUtil(); 12 12 13 13 /** 14 14 * 添加图书2 15 15 * @param book 16 16 * @return 17 17 * @throws Exception 18 18 */ 19 19 private static int addBook2(Book book)throws Exception{ 20 20 Connection con=dbUtil.getCon(); // 获取连接 21 21 String sql="insert into t_book values(null,'"+book.getBookName()+"',"+book.getPrice()+",'"+book.getAuthor()+"',"+book.getBookTypeId()+")"; 22 22 Statement stmt=con.createStatement(); // 创建Statement 23 23 int result=stmt.executeUpdate(sql); 24 24 dbUtil.close(stmt, con); // 关闭Statement和连接 25 25 return result; 26 26 } 27 27 28 28 /** 29 29 * 添加图书 30 30 * @param bookName 31 31 * @param price 32 32 * @param author 33 33 * @param bookTypeId 34 34 * @return 35 35 * @throws Exception 36 36 */ 37 37 private static int addBook(String bookName,float price,String author,int bookTypeId)throws Exception{ 38 38 Connection con=dbUtil.getCon(); // 获取连接 39 39 String sql="insert into t_book values(null,'"+bookName+"',"+price+",'"+author+"',"+bookTypeId+")"; 40 40 Statement stmt=con.createStatement(); // 创建Statement 41 41 int result=stmt.executeUpdate(sql); 42 42 dbUtil.close(stmt, con); // 关闭Statement和连接 43 43 return result; 44 44 } 45 45 46 46 public static void main(String[] args) throws Exception{ 47 47 /*int result=addBook("Java核心技术(上)", 98, "不知道", 1); 48 48 if(result==1){ 49 49 System.out.println("添加成功!"); 50 50 }else{ 51 51 System.out.println("添加失败!"); 52 52 }*/ 53 53 // 多行注释 ctrl+shift+/ 54 54 Book book=new Book("Java核心技术(下)", 98, "不知道", 2); 55 55 int result=addBook2(book); 56 56 if(result==1){ 57 57 System.out.println("添加成功!"); 58 58 }else{ 59 59 System.out.println("添加失败!"); 60 60 } 61 61 } 62 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("更新败!"); } } }
三、通过图书编号删除数据库中指定的图书
1 package com.java1234.jdbc.chap03.sec04; 2 3 import java.sql.Connection; 4 import java.sql.Statement; 5 6 import com.java1234.jdbc.util.DbUtil; 7 8 public class Demo1 { 9 10 private static DbUtil dbUtil=new DbUtil(); 11 12 /** 13 * 删除图书 14 * @param id 15 * @return 16 * @throws Exception 17 */ 18 private static int deleteBook(int id)throws Exception{ 19 Connection con = dbUtil.getCon(); // 获取连接 20 String sql ="delete from t_book where id="+id; 21 Statement stmt = con.createStatement(); // 创建Statement 22 int result = stmt.executeUpdate(sql); //执行SQL语句 23 dbUtil.close(stmt, con); // 关闭Statement和连接 24 return result; 25 } 26 27 public static void main(String[] args) throws Exception{ 28 int result=deleteBook(3); 29 if(result==1){ 30 System.out.println("删除成功!"); 31 }else{ 32 System.out.println("删除失败!"); 33 } 34 } 35 }
总结一下:通过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语句执行。