✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
????个人主页:乐趣国学的博客
????个人信条:不迁怒,不贰过。小知识,大智慧。
????当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
????本文内容:【JAVA高级】——一文学会JDBC操作数据库
更多内容点击????
目录
一、JDBC含义
Java数据库连接技术(Java DataBase Connectivity),简称JDBC,能实现Java程序对各种数据库的访问。由一组使用Java语言编写的类和接口(JDBC API)组成,它们位于java.sql以及javax.sql中。换句话说:JDBC是用于在Java语言编程中与数据库连接的API。
二、JDBC数据库连接
准备工作:
- 具有数据库管理员权限,以在给定模式中创建数据库。 要执行以下示例,需要用实际用户名和密码替换这里用户名(
username
)和密码(password
)。- MySQL或数据库已启动并运行。
建立JDBC连接所涉及的编程相当简单。 以下是基本的四个步骤 :
- 导入JDBC包:使用Java语言的
import
语句在Java代码开头位置导入所需的类。- 注册JDBC驱动程序:使JVM将所需的驱动程序实现加载到内存中,从而可以满足JDBC请求。
- 数据库URL配置:创建一个正确格式化的地址,指向要连接到的数据库(如:MySQL,Oracle和MSSQL等等)。
- 创建连接对象:最后,调用
DriverManager
对象的getConnection()
方法来建立实际的数据库连接。
JDBC的jar包下载链接:https://pan.baidu.com/s/16VDOM74f0uaMs5kVLhOPQA?pwd=n5xz 提取码:n5xz
安装相应的驱动程序后,现在是时候来学习使用JDBC来操作数据库了。
三、JDBC操作数据表
1、实现步骤
加载驱动
Class.forName()加载驱动
获取连接对象
DriverManager.getConnection(URL,用户名,密码)获得数据库连接
获取操作SQL语句的对象
获得Statement/PreparedStatement对象
Statement statement = connection.createStatement();
编写SQL语句
String sql = "sql语句;";
执行SQL语句
statement.executeUpdate(sql);(增删改),返回int值
statement.executeQuery(sql);(查询),返回一个集合
对返回的结果进行处理
(增删改)返回的是int值,当值不为0时,说明数据(增删改)成功;
(查询)返回的是ResultSet集合,对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来, next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false。
关闭资源:先开后关,后开先关
操作完以后要关闭jdbc来释放jdbc资源。但是顺序要和你定义对象的时候相反,就像关门一样,从里面先关,一直往外关。close();
2、JDBC插入数据实例(增)
使用JDBC应用程序向表中插入数据记录需要以下步骤:
-
导入包:需要包含包含数据库编程所需的JDBC类的包。 大多数情况下,使用
import java.sql.*
就足够了。 -
注册JDBC驱动程序:需要初始化驱动程序,以便可以程序中打开数据库的通信通道。
-
打开连接:需要使用
DriverManager.getConnection()
方法来创建一个Connection
对象,它表示与数据库服务器的物理连接。 -
执行查询:需要使用类型为
Statement
的对象来构建和提交SQL语句,以在选择的数据库的表中插入数据记录。 -
清理环境:需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集。
package cn.bdqn.demo01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class InsertJDBC { public static void main(String[] args) { try { // 1、注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 2、获取连接对象 String url = "jdbc:mysql://127.0.0.1:3306/java221804"; String user = "root"; String pwd = "123456"; Connection connection = DriverManager.getConnection(url, user,pwd); // 3、获取发送SQL语句的对象 Statement statement = connection.createStatement(); // 编写SQL语句 String sql = "INSERT INTO stu VALUES('S_1010','laoliu',29,'male');"; // 4、执行SQL语句 int num = statement.executeUpdate(sql); System.out.println(num); // 5、处理结果 if (num == 1) { System.out.println("数据插入成功"); } else { System.out.println("数据插入失败"); } // 6、释放资源:先开后关,后开先关 statement.close(); connection.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
3、JDBC删除数据实例(删)
使用JDBC应用程序删除数据库中的表需要以下步骤:
-
导入包:需要包含包含数据库编程所需的JDBC类的包。 大多数情况下,使用
import java.sql.*
就足够了。 -
注册JDBC驱动程序:需要初始化驱动程序,以便可以程序中打开数据库的通信通道。
-
打开连接:需要使用
DriverManager.getConnection()
方法来创建一个Connection
对象,它表示与数据库服务器的物理连接。 -
执行查询:需要使用类型为
Statement
的对象来构建和提交SQL语句,以在选择的数据库中删除一个表。 -
清理环境:需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集。
package cn.bdqn.demo01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class DeleteJDBC { public static void main(String[] args) { try { //1、加载驱动 Class.forName("com.mysql.jdbc.Driver");//这个地方Driver后面不要写.class //2、获取连接对象 String url = "jdbc:mysql://127.0.0.1:3306/java221804";//127.0.0.1也可以写成localhost String user = "root"; String pwd = "123456"; Connection connection=DriverManager.getConnection(url, user, pwd); //3、获取操作SQL语句的对象 Statement statement = connection.createStatement(); //4、编写SQL语句 String sql = "DELETE FROM stu WHERE sid='S_1010';";//SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法错误 //5、执行SQL语句 int num =statement.executeUpdate(sql);//对于增加、修改、删除操作,都调用executeUpdate()方法 System.out.println(num); //6、对返回的结果进行处理 if(num==1){ System.out.println("数据删除成功"); }else{ System.out.println("数据删除失败"); } //7、关闭资源:先开后关,后开先关 statement.close(); connection.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
4、JDBC修改数据实例(改)
使用JDBC应用程序向表中更新数据记录需要以下步骤:
-
导入包:需要包含包含数据库编程所需的JDBC类的包。 大多数情况下,使用
import java.sql.*
就足够了。 -
注册JDBC驱动程序:需要初始化驱动程序,以便可以程序中打开数据库的通信通道。
-
打开连接:需要使用
DriverManager.getConnection()
方法来创建一个Connection
对象,它表示与数据库服务器的物理连接。 -
执行查询:需要使用类型为
Statement
的对象来构建和提交SQL语句来更新表中的记录。在查询语句使用IN
和WHERE
子句指定更新记录的条件。 -
清理环境:需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集。
package cn.bdqn.demo01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class UpdateJDBC { public static void main(String[] args) { try { //1、加载驱动 Class.forName("com.mysql.jdbc.Driver");//这个地方Driver后面不要写.class //2、获取连接对象 String url = "jdbc:mysql://127.0.0.1:3306/java221804"; String user = "root"; String pwd = "123456"; Connection connection=DriverManager.getConnection(url, user, pwd); //3、获取操作SQL语句的对象 Statement statement = connection.createStatement(); //4、编写SQL语句 String sql = "UPDATE stu SET age = 45 WHERE sid='S_1004';";//SQL语句最好是先在SQLyog里面写一遍并运行一下,保证SQL语句没有语法错误 //5、执行SQL语句 int num =statement.executeUpdate(sql);//对于增加、修改、删除操作,都调用executeUpdate()方法 System.out.println(num); //6、对返回的结果进行处理 if(num==1){ System.out.println("数据修改成功"); }else{ System.out.println("数据修改失败"); } //7、关闭资源:先开后关,后开先关 statement.close(); connection.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
5、JDBC查询数据实例(查)
使用JDBC应用程序向表中查询数据记录需要以下步骤:
-
导入包:需要包含包含数据库编程所需的JDBC类的包。 大多数情况下,使用
import java.sql.*
就足够了。 -
注册JDBC驱动程序:需要初始化驱动程序,以便可以程序中打开数据库的通信通道。
-
打开连接:需要使用
DriverManager.getConnection()
方法来创建一个Connection
对象,它表示与数据库服务器的物理连接。 -
执行查询:需要使用类型为
Statement
的对象来构建和提交SQL语句,以在选择的数据库的表中查询数据记录。 -
提取数据:执行SQL查询后,可以从表中获取记录。
-
清理环境:需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集。
方法一:使用列名查询
package cn.bdqn.demo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SelectJDBCByColumnName {
public static void main(String[] args) {
try {
// 1、注册驱动
Class.forName("com.mysql.jdbc.Driver");// 这个地方Driver后面不要写.class
// 2、获取连接对象
String url = "jdbc:mysql://127.0.0.1:3306/java221804";
String user = "root";
String pwd = "123456";
Connection connection = DriverManager.getConnection(url, user,pwd);
// 3、获取发送SQL语句的对象
Statement statement = connection.createStatement();
// 编写SQL语句
String sql = "SELECT * FROM stu;";
// 5、执行SQL语句
ResultSet resultSet = statement.executeQuery(sql);
// 6、对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
while (resultSet.next()) {// next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false
// 取出元素
String sid = resultSet.getString("sid");
String sname = resultSet.getString("sname");
int age = resultSet.getInt("age");
String gender = resultSet.getString("gender");
System.out.println(sid + "-" + sname + "-" + age + "-" + gender);
}
// 7、关闭资源:先开后关,后开先关
statement.close();
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
方法二:使用索引查询
package cn.bdqn.demo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SelectJDBCByIndex {
public static void main(String[] args) {
try {
// 1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2、获取连接对象
String url = "jdbc:mysql://127.0.0.1:3306/java221804";
String user = "root";
String pwd = "123456";
Connection connection = DriverManager.getConnection(url, user,pwd);
// 3、获取发送SQL语句的对象
Statement statement = connection.createStatement();
// 编写SQL语句
String sql = "SELECT * FROM stu;";
// 4、执行SQL语句
ResultSet resultSet = statement.executeQuery(sql);// 对于查询,调用executeQuery()方法,获得是一个集合
// 5、对返回的结果进行处理,需要将集合中的数据一个一个的遍历出来
// next()判断集合中是否存在数据,如果存在数据返回true,如果不存在元素返回false
while (resultSet.next()) {
// 取出元素
String sid = resultSet.getString(1);
String sname = resultSet.getString(2);
int age = resultSet.getInt(3);
String gender = resultSet.getString(4);
System.out.println(sid + "-" + sname + "-" + age + "-" + gender);
}
// 6、关闭资源:先开后关,后开先关
statement.close();
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
四、JDBC异常
异常处理允许我们以受控的方式处理异常情况,而不是直接退出程序,例如程序定义的错误。发生异常时可以抛出异常。术语“异常”表示当前的程序执行停止,并且被重定向到最近的适用的catch
子句。如果没有适用的catch
子句存在,则程序的执行结束。
JDBC异常处理与Java异常处理非常相似,但对于JDBC,要处理的最常见异常是 java.sql.SQLException
。
SQLException方法
驱动程序和数据库中都会发生SQLException
。 发生这种异常时,SQLException
类型的对象将被传递给catch
子句。
传递的SQLException
对象具有以下可用于检索有关异常信息的方法 -
方法 | 描述 |
---|---|
getErrorCode( ) |
获取与异常关联的错误代码。 |
getMessage( ) |
获取驱动程序处理的错误的JDBC驱动程序的错误消息,或获取数据库错误的Oracle错误代码和消息。 |
getSQLState( ) |
获取XOPEN SQLstate字符串。 对于JDBC驱动程序错误,不会从此方法返回有用的信息。 对于数据库错误,返回五位数的XOPEN SQLstate代码。 此方法可以返回null 。 |
getNextException( ) |
获取异常链中的下一个Exception 对象。 |
printStackTrace( ) |
打印当前异常或可抛出的异常,并将其追溯到标准错误流。 |
printStackTrace(PrintStream s) |
将此throwable 及其回溯打印到指定的打印流。 |
printStackTrace(PrintWriter w) |
打印这个throwable ,它是回溯到指定的打印器(PrintWriter )。 |
通过利用Exception
对象提供的信息,可以捕获异常并适当地继续执行程序。下面是一个try
块的一般形式 -
try {
// Your risky code goes between these curly braces!!!
}
catch(Exception ex) {
// Your exception handling code goes between these
// curly braces, similar to the exception clause
// in a PL/SQL block.
}
finally {
// Your must-always-be-executed code goes between these
// curly braces. Like closing database connection.
}