首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事
您的当前位置:首页正文

Java学习:JDBC

2023-11-11 来源:画鸵萌宠网

DBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源。

jdbc的核心API

Driver接口:数据库驱动程序的接口,所有的数据库厂商需要的驱动程序需要实现此接口。

Connection接口:与具体的数据库连接对象;

Statement createStatement()    创建一个静态sql语句对象

PreparedStatement prepareStatement(String sql)  创建预编译的sql语句对象

CallableStatement prepareCall(String sql)   创建存储过程的sql语句对象

 

 

Statement接口:用于执行静态 SQL 语句

 

int executeUpdate(String sql)  执行更新操作的sql语句 (create/alter/drop) DDL语句

 

                                                        (insert/update/delete)DML语句

 

ResultSet executeQuery(String sql)  执行查询操作的sql语句

 

           (select)(DQL查询语句)

 

PreparedStatement接口:用于执行预编译的 SQL 语句(是Statement的子接口)

int executeUpdate()  执行更新操作的sql语句

ResultSet executeQuery()  执行查询操作的sql语句

 

CallableStatement接口:用于执行 SQL 存储过程的接口(是PreparedStatement的子 接口)

ResultSet executeQuery()  执行存储过程的sql语句

 

ResultSet接口:结果集对象。 存储所有数据库查询的结果,用该对象进行数据遍历。

boolean next() : 把光标移动到下一行。如果下一行有数据,返回true,如果没有下一行数 据,返回false。

getXXX(列索引|列字段名称): 获取字段的数据

 

Jdbc编程步骤:

1、加载数据库驱动

Class.ForName(driveClass)

上面的driveClass就是数据库驱动类对应的类路径字符串,

 

2、通过DriverManager获取数据库的链接

DriverManager.getConnection(String url, Stirng user, String pass)

当使用DriverManager来获取链接,需要传入三个参数:分别是数据量的url、用户名、密码。

 

用此方法获取数据库的链接

 

技术分享
 1 public class DriverDemo { 2 private static String url = "jdbc:mysql://localhost:3306/day20"; 3 //jdbc协议:mysql协议://主机地址:端口号/需要连接的数据库名称 4 private static String user = "root"; 5 private static String password="root"; 6 7 public static void main(String[] args) throws Exception { 8 /** 9 * java程序连接mysql数据库10 * 1.mysql数据库的主机地址11 * 2.端口号12 * 3.用户名13 * 5.密码14 * 6.需要连接的数据库15 * 16 * 需求:先使用java程序连接我们的数据库,需要一个连接对象Connection17 */18 conn3();19 }20 private static void conn3() throws Exception {21 //注册驱动,我们发现mysql驱动程序的Driver实现类已经帮我们在静态代码块中注册好了驱动,22 //我们在此时只需要将Driver实现类加载到我们的内存中,static代码块就会自动执行,我们的驱动也就自动注册了23 //注册驱动24 Class.forName("com.mysql.jdbc.Driver");25 26 //获取java连接数据库的对象27 Connection conn = DriverManager.getConnection(url, user, password);28 29 //打印这个连接对象30 System.out.println(conn);31 32 }
Class.ForName

 

 

 

 

 

3、通过Connection对象创建Statement对象,Connection创建Statement的方法如下三个:

createStatement()创建基本的Statement对象。

prepareStatement(String sql):根据传入的sql语句创建预编译的Statement对象。

prepareCall(String sql):根据传入的sql语句创建CallableStatement对象。

 

 

 

4、Statement执行SQL语句,Statement有三大方法来执行SQL语句:

execute:可以执行任何SQL语句,单比较麻烦

executeUpdate:可以执行DML、DDL语句。执行DML返回受影响的SQL语句行数,执行DDL返回0;

(create/alter/drop) DDL语句

 (insert/update/delete)DML语句

 

 

executeQuery:只能执行查询语句DQL,执行后返回代表查询结果的ResultSet对象。

 

先创建基本的Statement对象。然后通过executeUpdate执行DML、DDL语句。

技术分享
 1 public class Demo { 2 private static String url = "jdbc:mysql://localhost:3306/day19"; 3 private static String user = "root"; 4 private static String password = "root"; 5 6 public static void main(String[] args){ 7 Connection conn = null; 8 Statement stmt = null; 9 try {10 //注册驱动11 Class.forName("com.mysql.jdbc.Driver");12 //通过驱动管理类获取数据库连接13 conn = DriverManager.getConnection(url, user, password);14 15 //创建语句执行者16 stmt = conn.createStatement();17 //int executeUpdate(String sql)18 //throws SQLException执行给定 SQL 语句,19 //该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。20 String sql = "CREATE TABLE student1("+21 "id INT,"+22 "NAME VARCHAR(20),"+23 "age INT"+24 ");";25 26 //使用语句执行者执行创建的sql语句27 int count = stmt.executeUpdate(sql);28 29 //打印一下影响的结果30 System.out.println(count);31 } catch (Exception e) {32 e.printStackTrace();33 throw new RuntimeException();34 }finally{35 //释放资源36 if (conn!=null) {37 try {38 conn.close();39 } catch (SQLException e) {40 // TODO Auto-generated catch block41 e.printStackTrace();42 }43 }44 45 if (stmt!=null) {46 try {47 stmt.close();48 } catch (SQLException e) {49 // TODO Auto-generated catch block50 e.printStackTrace();51 }52 }53 54 } 55 }56 57 }
在day20数据库中创建一个学生表技术分享
 1 public class Demo2 { 2 private static String url = "jdbc:mysql://localhost:3306/day20"; 3 private static String user = "root"; 4 private static String password = "root"; 5 6 public static void main(String[] args) { 7 testInsert();//给数据库添加一条记录 8 testUpdate();//修改数据库中的一条数据 9 testDelete(); 10 } 11 12 private static void testDelete() { 13 14 //需求:将刘德华改为岳云鹏 15 Connection conn = null; 16 Statement stmt = null; 17 18 try{ 19 //2.获取连接对象 20 conn =JDBCUtil.getConn(); 21 //3.准备sql 22 String sql = "DELETE FROM student WHERE id=1;"; 23 //4.获取语句执行者 24 stmt = conn.createStatement(); 25 //5.发送兵长执行sql 26 int count = stmt.executeUpdate(sql); 27 //打印影响的行数 28 System.out.println(count); 29 30 }catch(Exception e){ 31 e.printStackTrace(); 32 throw new RuntimeException(); 33 }finally{ 34 JDBCUtil.close(conn, stmt, null); 35 } 36 37 38 39 } 40 41 private static void testUpdate() { 42 //需求:将刘德华改为岳云鹏 43 Connection conn = null; 44 Statement stmt = null; 45 46 try{ 47 //1.注册驱动 48 Class.forName("com.mysql.jdbc.Driver"); 49 //2.获取连接对象 50 conn =DriverManager.getConnection(url, user, password); 51 //3.准备sql 52 String sql = "UPDATE student SET NAME=‘岳云鹏‘ WHERE id=1;"; 53 //4.获取语句执行者 54 stmt = conn.createStatement(); 55 //5.发送兵长执行sql 56 int count = stmt.executeUpdate(sql); 57 //打印影响的行数 58 System.out.println(count); 59 60 }catch(Exception e){ 61 e.printStackTrace(); 62 throw new RuntimeException(); 63 }finally{ 64 if (conn!=null) { 65 try { 66 conn.close(); 67 } catch (SQLException e) { 68 // TODO Auto-generated catch block 69 e.printStackTrace(); 70 } 71 } 72 73 if (stmt!=null) { 74 try { 75 stmt.close(); 76 } catch (SQLException e) { 77 // TODO Auto-generated catch block 78 e.printStackTrace(); 79 } 80 } 81 } 82 83 } 84 85 private static void testInsert() { 86 //专门测试添加功能 87 Connection conn = null; 88 Statement stmt = null; 89 try{ 90 //注册驱动 91 Class.forName("com.mysql.jdbc.Driver"); 92 //获取连接 93 conn = DriverManager.getConnection(url, user, password); 94 //定义sql 95 String sql = "INSERT INTO student VALUES(1,‘刘德华‘,50);"; 96 //获取语句执行者 97 stmt = conn.createStatement(); 98 //使用语句执行者发送并执行sql语句,并返回影响的行数 99 int count = stmt.executeUpdate(sql);100 System.out.println(count);101 102 }catch(Exception e){103 e.printStackTrace();104 throw new RuntimeException();105 }finally{106 //释放资源107 if (conn!=null) {108 try {109 conn.close();110 } catch (SQLException e) {111 // TODO Auto-generated catch block112 e.printStackTrace();113 }114 }115 116 if (stmt!=null) {117 try {118 stmt.close();119 } catch (SQLException e) {120 // TODO Auto-generated catch block121 e.printStackTrace();122 }123 }124 }125 126 }127 128 }
对上个表格进行增改删操作

 

为了使程序员对数据库的操作方便可将注册驱动,获取连接数据库对象,释放资源等操作抓取成功一个类

技术分享
 1 package com.jdbc.Util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class JDBCUtil {10 private static String url = "jdbc:mysql://localhost:3306/day20";11 private static String user = "root";12 private static String password = "root";13 14 static{15 //随着类的加载而夹在16 try {17 Class.forName("com.mysql.jdbc.Driver");18 } catch (ClassNotFoundException e) {19 // TODO Auto-generated catch block20 e.printStackTrace();21 }22 }23 24 //获取连接25 public static Connection getConn(){26 //注册驱动27 try {28 Connection conn = DriverManager.getConnection(url, user, password);29 return conn; 30 } catch (Exception e) {31 // TODO Auto-generated catch block32 e.printStackTrace();33 throw new RuntimeException();34 }35 36 }37 38 39 //释放资源40 public static void close(Connection conn,Statement stmt,ResultSet rs){41 if (conn!=null) {42 try {43 conn.close();44 } catch (SQLException e) {45 // TODO Auto-generated catch block46 e.printStackTrace();47 }48 }49 50 if (stmt!=null) {51 try {52 stmt.close();53 } catch (SQLException e) {54 // TODO Auto-generated catch block55 e.printStackTrace();56 }57 }58 59 if (rs!=null) {60 try {61 rs.close();62 } catch (SQLException e) {63 // TODO Auto-generated catch block64 e.printStackTrace();65 }66 }67 }68 69 }
JDBCUtil类

 

 

通过executeQuery执行DQL语句,利用next()方法判断是否有下一行数据

技术分享
 1 public class Demo3 { 2 3 public static void main(String[] args) { 4 //定义一个连接对象和一个语句执行者 5 Connection conn =null; 6 Statement stmt = null; 7 ResultSet rs = null; 8 try{ 9 conn = JDBCUtil.getConn();10 //定义sql11 String sql = "SELECT * FROM student;";12 //获取语句执行者对象13 stmt = conn.createStatement();14 //执行DQL查询语句15 //ResultSet executeQuery(String sql)16 //throws SQLException执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。17 rs = stmt.executeQuery(sql);18 //ResultSet是一个结果集19 /*//判断有没有下一行数据20 if (rs.next()) {21 //说明有下一行数数据22 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));23 }24 25 if (rs.next()) {26 //说明有下一行数数据27 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));28 }29 30 if (rs.next()) {31 //说明有下一行数数据32 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));33 }34 35 if (rs.next()) {36 //说明有下一行数数据37 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));38 }39 40 if (rs.next()) {41 //说明有下一行数数据42 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));43 }*/44 45 //使用while循环改进上面的代码,获取字段的数据(字段类型+列号)46 /* while (rs.next()) {47 System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));48 }*/49 50 //使用字段名称获取字段的每一个数据51 while (rs.next()) {52 //当我们使用字段名称去获取字段数据的时候,字段名称是不区分大小写53 System.out.println(rs.getInt("ID")+"--"+rs.getString("NAME")+"--"+rs.getInt("AGE"));54 }55 56 57 58 }catch(Exception e){59 e.printStackTrace();60 }finally{61 JDBCUtil.close(conn, stmt, rs);62 }63 64 }65 66 }
DQL语句

 

还可以通过

PreparedStatement prepareStatement(String sql)  

定义预编译sql语句对象,并通过setInt()方法 发送参数并执行sql语句。

技术分享
 1 package com.jdbc.c_preparedstatement; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 7 import com.jdbc.Util.JDBCUtil; 8 9 public class Demo { 10 public static void main(String[] args) { 11 testInsert(); 12 testUpdate(); 13 testDelete(); 14 testSelect(); 15 } 16 17 private static void testSelect() { 18 Connection conn =null; 19 PreparedStatement stmt = null; 20 ResultSet rs = null; 21 try{ 22 //获取连接 23 conn = JDBCUtil.getConn(); 24 //定义预编译sql 25 String sql = "SELECT * FROM student WHERE id=?;"; 26 //获取预编译sql对象 27 stmt = conn.prepareStatement(sql); 28 //给问好赋值 29 stmt.setInt(1, 3); 30 //发送参数并执行sql语句 31 //ResultSet executeQuery()throws SQLException在此 32 //PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。 33 rs = stmt.executeQuery(); 34 //遍历结果集 35 while (rs.next()) { 36 System.out.println(rs.getInt("id")+"--"+rs.getString("name")+"--"+rs.getInt("age")); 37 } 38 39 }catch(Exception e){ 40 e.printStackTrace(); 41 }finally{ 42 JDBCUtil.close(conn, stmt, rs); 43 } 44 45 46 } 47 48 private static void testDelete() { 49 50 Connection conn =null; 51 PreparedStatement stmt = null; 52 53 try{ 54 conn = JDBCUtil.getConn(); 55 //写一个参数化的sql 56 String sql = "DELETE FROM student WHERE id=?;"; 57 //获取预编译的sql对象 58 stmt = conn.prepareStatement(sql); 59 //给?设置参数 60 stmt.setInt(1, 2); 61 //发送参数并执行sql 62 int count = stmt.executeUpdate(); 63 System.out.println(count); 64 }catch(Exception e){ 65 e.printStackTrace(); 66 }finally{ 67 JDBCUtil.close(conn, stmt, null); 68 } 69 70 } 71 72 private static void testUpdate() { 73 Connection conn =null; 74 PreparedStatement stmt = null; 75 76 try{ 77 conn = JDBCUtil.getConn(); 78 String sql = "UPDATE student SET NAME=? WHERE id=?;"; 79 //执行预编译sql 80 stmt = conn.prepareStatement(sql); 81 //给?赋值 82 stmt.setString(1, "张学友"); 83 stmt.setInt(2, 5); 84 //发送参数到数据库服务器,并执行sql,将执行结果返回 85 int count = stmt.executeUpdate(); 86 System.out.println(count); 87 }catch(Exception e){ 88 e.printStackTrace(); 89 }finally{ 90 JDBCUtil.close(conn, stmt, null); 91 } 92 93 94 } 95 96 private static void testInsert() { 97 //定义连接对象和预编译sql对象 98 Connection conn = null; 99 PreparedStatement stmt = null;100 101 try{102 //获取连接103 conn = JDBCUtil.getConn();104 //PreparedStatement prepareStatement(String sql)105 //throws SQLException创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。106 String sql = "INSERT INTO student VALUES(?,?,?);";//参数化的sql,动态sql107 stmt = conn.prepareStatement(sql);// var cpro_id = "u6292429"; 

小编还为您整理了以下内容,可能对您也有帮助:

Java里面的JDBC是什么意思啊?

JDBC(Java

Data

Base

Connectivity,java数据库连接)是一种用于执行SQL语句的Java

API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

java中的 jdbc是什么 都包括什么内容?

ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC

JDBC是执行SQL语句的Java API。JDBC本身是一个产品的商标名,但它也可被看作为"Ja

va Database Connecivity(Java数据库连接)"。它由一组用Java语言编写的类与接口组成。

JDBC已成为一种供工具/数据库开发者使用的标准API,用户可以用纯Java API来编写数据库

应用。

1)Java不能直接使用ODBC。因为ODBC使用C语言接口,如果让Java来调用本机C代码的话

,那么会在安全、属性、健壮性、应用的可移植性等方面带来困难。

(2)不希望把ODBC C API逐字地翻译成Java API。例如,ODBC使用了大量的易于出错的指

针,而Java取消了这种不安全的指针。现在通过JDBC,把ODBC翻译成具有Java风格的面向对象

的接口。

(3)ODBC难以学习。ODBC把简单功能与高级功能混杂在一起,即便是简单的查询也会带来

复杂的任选项。而JDBC的设计使得简单的事情用简单的做法,仅在必要时才让用户使用高级

功能。

(4)JDBC的Java API提供"纯Java"的解决办法。当使用ODBC时,ODBC驱动器管理程序与驱

动器必须手工地装入到每架客户机上。而JDBC驱动器全部是用Java编写的,JDBC代码则在所

有Java平台(从网络计算机到主机)上都可自动安装,并且是可移植的和安全的。

JDBC是什么?

JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间于数据库的连接标准的JavaAPI。

JDBC库包含的API为每个通常与数据库的使用相关联的任务:

使得连接到数据库

创建SQL或MySQL语句

执行SQL或MySQL的查询数据库

查看和修改结果记录从根本上说,JDBC是一种规范,它提供的接口,一套完整的,允许便携式访问底层数据库。可以用Java来写不同类型的可执行文件,如:

Java应用程序

JavaApplets

JavaServlets

JavaServerPages(JSP)

EnterpriseJavaBeans(EJBs)所有这些不同的可执行文件就可以使用JDBC驱动程序来访问数据库,并把存储的数据的优势。

JDBC提供了相同的功能,ODBC,允许Java程序包含与数据库无关的代码。

先决条件:

以前正如期进行本教程,需要具备以下两个主题内容很好的了解:

核心Java编程

SQL或MySQL数据库

JDBC架构:

JDBCAPI支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成:

JDBCAPI:提供了应用程序对JDBC的管理连接。

JDBCDriverAPI:支持JDBC管理到驱动器连接。JDBCAPI的使用驱动程序管理器和数据库特定的驱动程序提供透明的连接到异构数据库。

JDBC驱动程序管理器可确保正确的驱动程序来访问每个数据源。该驱动程序管理器能够支持连接到多个异构数据库的多个并发的驱动程序。

以下是结构图,它显示了驱动程序管理器方面的JDBC驱动程序和Java应用程序的位置:

常见的JDBC组件:

JDBCAPI提供了以下接口和类:

DriverManager:这个类管理数据库驱动程序的列表。内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。

Driver:此接口处理与数据库服务器通信。很少直接与驱动程序对象。相反,使用DriverManager中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息

Connection:此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过唯一的连接对象。

Statement:可以使用这个接口创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数。

ResultSet:这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器,让您可以通过移动它的数据。

SQLException:这个类处理发生在一个数据库应用程序的任何错误。

显示全文