简述JDBC:【链接ttps://www.yiibai.com/jdbc/】
JDBC代表Java与数据库的连接,可以为多种关系型数据库DBMS提供统一的访问方式,简单来说,JDBC是一种规范,它所提供的接口是一套完整的,可移植的访问底层数据库的程序。
JDBC架构:
1.JDBC API:提供了应用程序对JDBC的管理连接;
2.JDBC Driver API:支持JDBC管理到驱动器的连接。
常用的JDBC组件:
JDBC API 提供了以下接口和类:
1.DriverManager :这个类管理数据库驱动程序的列表,确定内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序连接请求,识别JDBC在子协议的第一个驱动器被用来建立数据库的连接。
2.Driver :此接口处理与数据库服务器通信。很少直接直接使用驱动程序(Driver)对象,一般使用DriverManager
中的对象,它用于管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息。
3.Connection :此接口是与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过此唯一的连接对象。
4.Statement :可以使用这个接口创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数。
5.ResultSet :这些对象保存从数据库查询的数据,执行使用Statement
对象的SQL查询中检索数据。它作为一个迭代器,可以通过移动它来检索下一个数据。
6.SQLException :这个类用于处理发生在数据库应用程序中的任何错误。
Java操作数据库流程:
Java通过JDBC API 操作 JCBC DriverManager -> JDBC DriverManager 通过 JDBC Driver 操作数据库。
注:驱动程序(JDBC Driver )是不一样的,驱动程序是由数据库厂商提供的,就是一个jar包。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Java操作数据库的应用案列:
本案列使用MySQL数据库
实现简单的对学生数据的增删改查
1.创建一个简单的学生数据库表
建表sql:
CREATE TABLE students_info(
name varchar(15),
age int(3),
sex int(2)
);
通过dos命令查询结果如下:
有students_info 表,说明已经成功建立该数据库表。
2.下载mysql驱动
这里使用版本为5.1.29版本。
3.创建一个web项目
项目名:JDBC_Demo_0.1
4.在项目的src路径下导入刚才下载好的MySQL驱动
未导入前的图示:
导入后的图示:
5.将之前导入项目的MySQL数据库驱动jar包添加到项目路径中
添加MySQL驱动jar包后的图示:
6.新建一个Java应用类,用来实现Java操作数据库
1 package cn.ychu.demo; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 9 10 /** 11 * 12 * @author Ychu 13 *#这是一个简单JAVA 操作 MySQL 的Java类 14 */ 15 public class JDBCDemo { 16 //创建MySQL数据库连接必要的参数值 17 private final String sqlUrl = "jdbc:mysql://localhost:3306/ychu"; 18 private final String sqlUser = "root"; 19 private final String sqlPassword = "password"; 20 21 //查询所有学生 22 public void findAllStudent() { 23 //创建sql语句 24 String sql = "select name,age,sex from students_info"; 25 //创建数据库连接对象 26 Connection conn = null; 27 //创建可执行sql指令的对象 statement 或 preparedStatement 28 // Statement stat = null; 29 PreparedStatement ps = null; 30 //获取对象集 31 ResultSet rs = null; 32 try { 33 //加载数据库驱动 34 Class.forName("com.mysql.jdbc.Driver"); 35 //获取数据连接 36 conn = DriverManager.getConnection(sqlUrl,sqlUser,sqlPassword); 37 //获取操作sql语句对象 Statement 或 PrepareStatement 这里我们用preparedStatemnet 预编译的方式 38 // stat = conn.createStatement(); //1. Statement 39 ps = conn.prepareStatement(sql); //2. PreparedStatement 可执行sql预编译,防止sql注入 , 40 //执行sql预编译 这里查询所有不需要预编译 41 //执行sql语句,获得结果集 42 rs = ps.executeQuery(); 43 //处理结果集 44 while(rs.next()) { 45 String name = rs.getString(1); 46 int age = rs.getInt(2); 47 int sex = rs.getInt(3); 48 //输出 49 System.out.println("查询所有学生结果:{name:"+name+",age:"+age+",sex:"+sex+"}"); 50 } 51 }catch(ClassNotFoundException e) { 52 e.printStackTrace(); 53 }catch(SQLException e) { 54 e.printStackTrace(); 55 }catch(Exception e) { 56 e.printStackTrace(); 57 }finally {//关闭资源 58 try { 59 if(rs != null) rs.close(); 60 if(ps != null) ps.close(); 61 if(conn != null) conn.close(); 62 }catch(SQLException e) { 63 e.printStackTrace(); 64 }catch(Exception e) { 65 e.printStackTrace(); 66 } 67 } 68 } 69 70 //根据学姓名查学生 71 public void findStudentBySname(String sname) { 72 //创建sql语句 73 String sql = "SELECT name,age,sex FROM students_info WHERE name = ?"; 74 //创建数据库连接对象 75 Connection conn = null; 76 //创建可执行sql指令的对象 statement 或 preparedStatement 77 // Statement stat = null; 78 PreparedStatement ps = null; 79 //获取对象集 80 ResultSet rs = null; 81 try { 82 //加载数据库驱动 83 Class.forName("com.mysql.jdbc.Driver"); 84 //获取数据连接 85 conn = DriverManager.getConnection(sqlUrl,sqlUser,sqlPassword); 86 //获取操作sql语句对象 Statement 或 PrepareStatement 这里我们用preparedStatemnet 预编译的方式 87 // stat = conn.createStatement(); //1. Statement 88 ps = conn.prepareStatement(sql); //2. PreparedStatement 可执行sql预编译,防止sql注入 , 89 //执行sql预编译 90 ps.setString(1, sname); 91 //执行sql语句,获得结果集 92 rs = ps.executeQuery(); 93 //处理结果集 94 while(rs.next()) { 95 String name = rs.getString(1); 96 int age = rs.getInt(2); 97 int sex = rs.getInt(3); 98 //输出 99 System.out.println("查询所有学生结果:{name:"+name+",age:"+age+",sex:"+sex+"}"); 100 } 101 }catch(ClassNotFoundException e) { 102 e.printStackTrace(); 103 }catch(SQLException e) { 104 e.printStackTrace(); 105 }catch(Exception e) { 106 e.printStackTrace(); 107 }finally {//关闭资源 108 try { 109 if(rs != null) rs.close(); 110 if(ps != null) ps.close(); 111 if(conn != null) conn.close(); 112 }catch(SQLException e) { 113 e.printStackTrace(); 114 }catch(Exception e) { 115 e.printStackTrace(); 116 } 117 } 118 } 119 120 //添加一个学生 121 public void addStudent(String name , int age , int sex ) { 122 String sql = "INSERT INTO students_info (name,age,sex) VALUES (?,?,?)"; 123 Connection conn = null; 124 PreparedStatement ps = null; 125 try { 126 //加载数据库驱动 127 Class.forName("com.mysql.jdbc.Driver"); 128 //获取数据库连接 129 conn = DriverManager.getConnection(sqlUrl,sqlUser,sqlPassword); 130 //获取执行sql的对象 preparedStatement 131 ps = conn.prepareStatement(sql); 132 //进行sql预编译 133 ps.setString(1, name); 134 ps.setInt(2, age); 135 ps.setInt(3, sex); 136 //执行sql 137 int resultNum = ps.executeUpdate(); 138 //处理结果集 139 if(resultNum > 0) {//插入成功 140 //日志输出 141 System.out.println("resultNum is -> " + resultNum + ",增加结果:成功"); 142 }else {//插入失败 143 //日志输出 144 System.out.println("resultNum is -> " + resultNum + ",增加结果:失败"); 145 } 146 }catch(ClassNotFoundException e) { 147 e.printStackTrace(); 148 }catch(SQLException e) { 149 e.printStackTrace(); 150 }catch(Exception e) { 151 e.printStackTrace(); 152 }finally {//关闭资源 153 try { 154 if(ps != null) ps.close(); 155 if(conn != null) conn.close(); 156 }catch(SQLException e) { 157 e.printStackTrace(); 158 }catch(Exception e) { 159 e.printStackTrace(); 160 } 161 } 162 } 163 164 //根据姓名删除一个学生 165 public void deleteStudentBySname(String sname) { 166 String sql = "DELETE FROM students_info WHERE name = ?"; 167 Connection conn = null; 168 PreparedStatement ps = null; 169 try { 170 //加载数据库驱动 171 Class.forName("com.mysql.jdbc.Driver"); 172 //获取数据库连接 173 conn = DriverManager.getConnection(sqlUrl,sqlUser,sqlPassword); 174 //获取执行sql的对象 preparedStatement 175 ps = conn.prepareStatement(sql); 176 //进行sql预编译 177 ps.setString(1, sname); 178 //执行sql 179 int resultNum = ps.executeUpdate(); 180 //处理结果集 181 if(resultNum > 0) {//删除成功 182 //日志输出 183 System.out.println("resultNum is -> " + resultNum + ",删除结果:成功"); 184 }else if(resultNum == 0){//删除失败,因条件找不到数据,所以删除0条 185 //日志输出 186 System.out.println("resultNum is -> " + resultNum + ",删除结果:失败(因条件找不到数据,所以删除0条)"); 187 }else {//删除失败 188 //日志输出 189 System.out.println("resultNum is -> " + resultNum + ",删除结果:失败"); 190 } 191 }catch(ClassNotFoundException e) { 192 e.printStackTrace(); 193 }catch(SQLException e) { 194 e.printStackTrace(); 195 }catch(Exception e) { 196 e.printStackTrace(); 197 }finally {//关闭资源 198 try { 199 if(ps != null) ps.close(); 200 if(conn != null) conn.close(); 201 }catch(SQLException e) { 202 e.printStackTrace(); 203 }catch(Exception e) { 204 e.printStackTrace(); 205 } 206 } 207 } 208 }
JDBCDemo.java
7.新建一个测试Java类,用来测试
1 package cn.ychu.test; 2 3 import cn.ychu.demo.JDBCDemo; 4 5 /** 6 * 7 * @author Ychu 8 *# 测试JDBC案列 9 */ 10 11 public class JDBCTest { 12 public static void main(String[] args) { 13 JDBCDemo jdbcDemo = new JDBCDemo(); 14 System.out.println("students_info为新表,一条数据都没有,下面开始用Java操作这个表 \n \n"); 15 16 System.out.println("---增加3个学生----"); 17 //添加学生 18 jdbcDemo.addStudent("zs", 27, 1); 19 jdbcDemo.addStudent("ls", 28, 1); 20 jdbcDemo.addStudent("ww", 28, 1); 21 22 System.out.println("---查询所有学生----"); 23 //查询所有学生 24 jdbcDemo.findAllStudent(); 25 26 System.out.println("---根据“zs”姓名查询学生----"); 27 //根据姓名查询学生 28 jdbcDemo.findStudentBySname("zs"); 29 30 System.out.println("---根据“zs”姓名删除学生----"); 31 //根据姓名删除学生 32 jdbcDemo.deleteStudentBySname("zs"); 33 34 System.out.println("---再次查询所有学生----"); 35 //查询所有学生 36 jdbcDemo.findAllStudent(); 37 } 38 }
JDBCTest.java
8.看控制台的日志输出
1 students_info为新表,一条数据都没有,下面开始用Java操作这个表 2 3 4 ---增加3个学生---- 5 resultNum is -> 1,增加结果:成功 6 resultNum is -> 1,增加结果:成功 7 resultNum is -> 1,增加结果:成功 8 ---查询所有学生---- 9 查询所有学生结果:{name:zs,age:27,sex:1} 10 查询所有学生结果:{name:ls,age:28,sex:1} 11 查询所有学生结果:{name:ww,age:28,sex:1} 12 ---根据“zs”姓名查询学生---- 13 查询所有学生结果:{name:zs,age:27,sex:1} 14 ---根据“zs”姓名删除学生---- 15 resultNum is -> 1,删除结果:成功 16 ---再次查询所有学生---- 17 查询所有学生结果:{name:ls,age:28,sex:1} 18 查询所有学生结果:{name:ww,age:28,sex:1}
console.log
原文地址:https://www.cnblogs.com/Ychu/p/10372159.html