JDBC
Posted 码农的成长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC相关的知识,希望对你有一定的参考价值。
1. JDBC介绍
JDBC(Java DataBase Connectivity),即Java数据库的连接。JDBC是一种用于执行SQL语句(DML,DDL,DQL)的Java API,可以为多种关系数据库(oracle,mysql,sqlserver)提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
Java 通过JDBC访问数据库,数据库厂家有很多,如Mysql、Oracle、SqlServer等,而JDBC提供了操作这些数据库的统一的接口、基准,让各大厂商去实现这组规范。各大数据库厂商只需要提供对应的JDBC的jar包,使java代码通过不同厂商实现的jar包访问对应的数据库。
2. JDBC完成CRUD规范步骤
2.1.规范DAO层的实现
DAO层:涉及到开发中的三层架构与MVC层级结构。DAO层叫数据访问层,全称data access object,属于一种比较底层、比较基础的操作,具体作用于某个表、某个实体的增删改查。
DAO层的创建规范:
这里包括界面层传入数据封装成为的域对象——Domain类对象。
2.2. DAO层具体实现
具体代码如下:
DAO层:
接口:
1 public interface IStudentDao { 2 3 public void insert(Student student); 4 5 public void update(Student student); 6 7 public void delete(Integer id); 8 9 public Student queryOne(Integer id); 10 11 public List<Student> queryAll(); 12 }
实现类Impl:
1 package cn.yif.dao.impl; 2 3 import cn.yif.domain.Student; 4 import cn.yif.dao.IStudentDao; 5 import cn.yif.utils.JDBCUtil; 6 7 import java.sql.*; 8 import java.util.ArrayList; 9 import java.util.List; 10 11 /** 12 * @author Administrator 13 * @create 2019-09-13-20:33 14 */ 15 public class StudentDaoImpl implements IStudentDao { 16 @Override 17 public void insert(Student student) { 18 Connection conn = null; 19 Statement statement = null; 20 try { 21 //①加载(注册)驱动,这部分硬编码可以写也可以不写,jdbc4.0版本自带了 22 //Class.forName("com.mysql.jdbc.Driver"); 23 //②获取连接 24 //conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest01", "root", "admin"); 25 conn = JDBCUtil.getInstance().getConnection(); 26 //③获取语句对象:用来执行SQL语句 27 statement = conn.createStatement(); 28 //④执行SQL语句 29 String insertSql = "insert into jdbcdemo01 (name, age) values (\'"+student.getName()+"\', "+student.getAge()+")"; 30 statement.execute(insertSql); 31 }catch (Exception ex){ 32 ex.printStackTrace(); 33 }finally { 34 //⑤释放资源 35 JDBCUtil.getInstance().close(null, statement, conn); 36 } 37 } 38 39 @Override 40 public void update(Student student) { 41 Connection conn = null; 42 Statement statement = null; 43 try { 44 //①加载(注册)驱动 45 //Class.forName("com.mysql.jdbc.Driver"); 46 //②获取连接 47 //conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest01", "root", "admin"); 48 conn = JDBCUtil.getInstance().getConnection(); 49 //③获取语句对象:用来执行SQL语句 50 statement = conn.createStatement(); 51 //④执行SQL语句 52 String updateSql = "update jdbcdemo01 set name = \'"+student.getName()+"\', age = "+student.getAge()+" where id = "+student.getId()+""; 53 statement.execute(updateSql); 54 }catch (Exception ex){ 55 ex.printStackTrace(); 56 }finally { 57 //⑤释放资源 58 JDBCUtil.getInstance().close(null, statement, conn); 59 } 60 } 61 62 @Override 63 public void delete(Integer id) { 64 Connection conn = null; 65 Statement statement = null; 66 try { 67 //①加载(注册)驱动 68 //Class.forName("com.mysql.jdbc.Driver"); 69 //②获取连接 70 //conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest01", "root", "admin"); 71 conn = JDBCUtil.getInstance().getConnection(); 72 //③获取语句对象:用来执行SQL语句 73 statement = conn.createStatement(); 74 //④执行SQL语句 75 String deleteSql = "delete from jdbcdemo01 where id = "+ id +""; 76 statement.execute(deleteSql); 77 }catch (Exception ex){ 78 ex.printStackTrace(); 79 }finally { 80 //⑤释放资源 81 JDBCUtil.getInstance().close(null, statement, conn); 82 } 83 } 84 85 @Override 86 public Student queryOne(Integer id) { 87 Connection conn = null; 88 Statement statement = null; 89 ResultSet resultSet = null; 90 Student student = null; 91 try { 92 //①加载(注册)驱动 93 //Class.forName("com.mysql.jdbc.Driver"); 94 //②获取连接 95 //conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest01", "root", "admin"); 96 conn = JDBCUtil.getInstance().getConnection(); 97 //③获取语句对象:用来执行SQL语句 98 statement = conn.createStatement(); 99 //④执行SQL语句 100 String queryOneSql = "select * from jdbcdemo01 where id = "+ id +""; 101 resultSet = statement.executeQuery(queryOneSql); 102 if(resultSet.next()) 103 { 104 student = new Student(); 105 student.setId(resultSet.getInt("id")); 106 student.setName(resultSet.getString("name")); 107 student.setAge(resultSet.getInt("age")); 108 } 109 }catch (Exception ex){ 110 111 }finally { 112 //⑤释放资源 113 JDBCUtil.getInstance().close(resultSet, statement, conn); 114 } 115 return student; 116 } 117 118 @Override 119 public List<Student> queryAll() { 120 Connection conn = null; 121 Statement statement = null; 122 ResultSet resultSet = null; 123 Student student = null; 124 List<Student> list = new ArrayList<Student>(); 125 try { 126 //①加载(注册)驱动 127 //Class.forName("com.mysql.jdbc.Driver"); 128 //②获取连接 129 //conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest01", "root", "admin"); 130 conn = JDBCUtil.getInstance().getConnection(); 131 //③获取语句对象:用来执行SQL语句 132 statement = conn.createStatement(); 133 //④执行SQL语句 134 String queryAllSql = "select * from jdbcdemo01"; 135 resultSet = statement.executeQuery(queryAllSql); 136 while (resultSet.next()) 137 { 138 student = new Student(); 139 student.setId(resultSet.getInt("id")); 140 student.setName(resultSet.getString("name")); 141 student.setAge(resultSet.getInt("age")); 142 list.add(student); 143 } 144 }catch (Exception ex){ 145 ex.printStackTrace(); 146 }finally { 147 //⑤释放资源 148 JDBCUtil.getInstance().close(resultSet, statement, conn); 149 } 150 return list; 151 } 152 }
Domain层:
1 package cn.yif.domain; 2 3 /** 4 * @author Administrator 5 * @create 2019-09-13-20:23 6 */ 7 public class Student { 8 //ID表示编号 9 private Integer id; 10 11 //name表示名字 12 private String name; 13 14 //age表示年龄 15 private Integer age; 16 17 public Integer getId() { 18 return id; 19 } 20 21 public void setId(Integer id) { 22 this.id = id; 23 } 24 25 public String getName() { 26 return name; 27 } 28 29 public void setName(String name) { 30 this.name = name; 31 } 32 33 public Integer getAge() { 34 return age; 35 } 36 37 public void setAge(Integer age) { 38 this.age = age; 39 } 40 41 public Student() { 42 } 43 44 public Student(Integer id, String name, Integer age) { 45 this.id = id; 46 this.name = name; 47 this.age = age; 48 } 49 50 @Override 51 public String toString() { 52 return "Student{" + 53 "id=" + id + 54 ", name=\'" + name + \'\\\'\' + 55 ", age=" + age + 56 \'}\'; 57 } 58 }
工具类JDBCUtil实现:
1 package cn.yif.utils; 2 3 import java.io.IOException; 4 import java.sql.*; 5 import java.util.Properties; 6 7 /** 8 * @author Administrator 9 * @create 2019-09-13-21:21 10 */ 11 public class JDBCUtil { 12 //使用静态static类构造单例模式 13 private JDBCUtil(){ } 14 //在静态代码块中创建instance的实例,这里使用static静态变量来保存 15 private static JDBCUtil instance = null; 16 //每次都要加载驱动,这里定义一个Properties,把资源文件里面的内容读到Properties里面 17 private static Properties properties = null; 18 //JDBCUtil类加载的时候,就加载注册驱动 19 static { 20 properties = new Properties(); 21 try { 22 //当前线程类加载器加载获取properties文件 23 properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties")); 24 try { 25 Class.forName(properties.getProperty("driverClassName")); 26 } catch (ClassNotFoundException e) { 27 e.printStackTrace(); 28 } 29 } catch (IOException e) { 30 e.printStackTrace(); 31 } 32 33 instance = new JDBCUtil(); 34 } 35 36 public static JDBCUtil getInstance(){ 37 return instance; 38 } 39 40 //抽取获取连接Connection的方法 41 public Connection getConnection() throws SQLException { 42 return DriverManager.getConnection(properties.getProperty("url"), properties.getProperty("username"), properties.getProperty("password")); 43 } 44 45 //抽取JDBC关闭资源的close方法 46 public void close(ResultSet resultSet, Statement statement, Connection conn){ 47 try { 48 if(resultSet != null){ 49 resultSet.close(); 50 } 51 } catch (SQLException e) { 52 e.printStackTrace(); 53 } 54 try { 55 if(statement != null){ 56 statement.close(); 57 } 58 } catch (SQLException e) { 59 e.printStackTrace(); 60 } 61 try { 62 if(conn != null){ 63 conn.close(); 64 } 65 } catch (SQLException e) { 66 e.printStackTrace(); 67 } 68 } 69 }
JDBC资源配置文件:
1 driverClassName = com.mysql.jdbc.Driver 2 url = jdbc:mysql://localhost:3306/jdbctest01 3 username = root 4 password = admin
或GitHub:https://github.com/devyf/JavaWorkSpace/tree/master/JDBC_0913_01
以上是关于JDBC的主要内容,如果未能解决你的问题,请参考以下文章