返回顶部
首页 > 资讯 > 后端开发 > Python >Java中JDBC的使用教程详解
  • 741
分享到

Java中JDBC的使用教程详解

2024-04-02 19:04:59 741人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录概念快速入门步骤代码实现详解各个对象DriverManager:驱动管理对象Connection:数据库连接对象Statement:执行sql的对象ResultSet:结果集对象

概念

Java DataBase Connectivity  Java 数据库连接, Java语言操作数据库 JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

快速入门

步骤

1.导入驱动jar包

<!--Mysql数据库驱动-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.27</version>
</dependency>

2.注册驱动

3.获取数据库连接对象 Connection

4.定义sql

5.获取执行sql语句的对象 Statement

6.执行sql,接受返回结果

7.处理结果

8.释放资源

代码实现

//1. 导入驱动jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
//4.定义sql语句
String sql = "update account set balance = 500 where id = 1";
//5.获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
//6.执行sql
int count = stmt.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
stmt.close();
conn.close();

详解各个对象

DriverManager:驱动管理对象

功能:

1.注册驱动:告诉程序该使用哪一个数据库驱动jar

static void reGISterDriver(Driver driver) :注册与给定的驱动程序 DriverManager 。 写代码使用:  Class.forName("com.mysql.jdbc.Driver"); 通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块

static {
    try {
        java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
        throw new RuntimeException("Can't register driver!");
    }
}

注意:mysql5之后的驱动jar包可以省略注册驱动的步骤。

2.获取数据库连接:

方法:static Connection getConnection(String url, String user, String passWord)

参数:

url:指定连接的路径

语法:jdbc:mysql://ip地址(域名):端口号/数据库名称 例子:jdbc:mysql://localhost:3306/db3 细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称

  • user:用户名
  • password:密码

Connection:数据库连接对象

功能:

获取执行sql 的对象

Statement createStatement() PreparedStatement prepareStatement(String sql)

管理事务:

开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务 提交事务:commit() 回滚事务:rollback()

Statement:执行sql的对象

1.执行sql

boolean execute(String sql) :可以执行任意的sql 了解 int executeUpdate(String sql) :执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句 返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。 ResultSet executeQuery(String sql)  :执行DQL(select)语句

2.练习:

  • account表 添加一条记录
  • account表 修改记录
  • account表 删除一条记录

代码:

Statement stmt = null;
Connection conn = null;
try {
    //1. 注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //2. 定义sql
    String sql = "insert into account values(null,'王五',3000)";
    //3.获取Connection对象conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
    //4.获取执行sql的对象 Statement
    stmt = conn.createStatement();
    //5.执行sql
    int count = stmt.executeUpdate(sql);//影响的行数
    //6.处理结果
    System.out.println(count);
    if(count > 0){
        System.out.println("添加成功!");
    }else{
        System.out.println("添加失败!");
    } 
} catch (ClassNotFoundException e) {
    e.printStackTrace();
} catch (SQLException e) {
    e.printStackTrace();
}finally {
    //stmt.close();
    //7. 释放资源
    //避免空指针异常
    if(stmt != null){
        try {
            stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    if(conn != null){
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

ResultSet:结果集对象,封装查询结果

boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true getXxx(参数):获取数据 Xxx:代表数据类型   如: int getInt() , String getString() 参数:

  • int:代表列的编号,从1开始   如: getString(1)
  • String:代表列名称。 如: getDouble("balance")

注意: 使用步骤:

  • 游标向下移动一行
  • 判断是否有数据
  • 获取数据
//循环判断游标是否是最后一行末尾。
while(rs.next()){
    //获取数据
    //6.2 获取数据
    int id = rs.getInt(1);
    String name = rs.getString("name");
    double balance = rs.getDouble(3);
    
    System.out.println(id + "---" + name + "---" + balance);
}

PreparedStatement:执行sql的对象

  • SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
  • 输入用户随便,输入密码:a' or 'a' = 'a
  • sql:select from user where username = 'fhdsjkf' and password = 'a' or 'a' = 'a'
  • 解决sql注入问题:使用PreparedStatement对象来解决
  • 预编译的SQL:参数使用?作为占位符
  • 步骤:
  • 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
  • 注册驱动
  • 获取数据库连接对象 Connection
  • 定义sql

注意:sql的参数使用?作为占位符。 如:select from user where username = ? and password = ?;

  • 获取执行sql语句的对象 PreparedStatement  Connection.prepareStatement(String sql)
  • 给?赋值:

方法: setXxx(参数1,参数2) 参数1:?的位置编号 从1 开始 参数2:?的值

  • 执行sql,接受返回结果,不需要传递sql语句
  • 处理结果
  • 释放资源
  • 注意:后期都会使用PreparedStatement来完成增删改查的所有操作
  • 可以防止SQL注入
  • 效率更高

抽取JDBC工具类 : JDBCUtils

目的:简化书写

分析

1.注册驱动也抽取

2.抽取一个方法获取连接对象

需求:不想传递参数(麻烦),还得保证工具类的通用性。 解决:配置文件jdbc.properties

url=
user=
password=

3.抽取一个方法释放资源

代码实现

public class JDBCUtils {
	private static String url;
	private static String user;
	private static String password;
	private static String driver;
	
	static{
		//读取资源文件,获取值。

		try {
			//1. 创建Properties集合类。
			Properties pro = new Properties();

			//获取src路径下的文件的方式--->ClassLoader 类加载器
			ClassLoader classLoader = JDBCUtils.class.getClassLoader();
			URL res  = classLoader.getResource("jdbc.properties");
			String path = res.getPath();
			System.out.println(path);///D:/ideaProjects/itcast/out/production/day04_jdbc/jdbc.properties
			//2. 加载文件
		   // pro.load(new FileReader("D:\\IdeaProjects\\itcast\\day04_jdbc\\src\\jdbc.properties"));
			pro.load(new FileReader(path));

			//3. 获取数据,赋值
			url = pro.getProperty("url");
			user = pro.getProperty("user");
			password = pro.getProperty("password");
			driver = pro.getProperty("driver");
			//4. 注册驱动
			Class.forName(driver);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}


	
	public static Connection getConnection() throws SQLException {

		return DriverManager.getConnection(url, user, password);
	}

	
	public static void close(Statement stmt,Connection conn){
		if( stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if( conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}


	
	public static void close(ResultSet rs,Statement stmt, Connection conn){
		if( rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if( stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if( conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

练习

需求

  • 通过键盘录入用户名和密码
  • 判断用户是否登录成功

select from user where username = "" and password = ""; 如果这个sql有查询结果,则成功,反之,则失败

步骤

1.创建数据库表 user

CREATE TABLE USER(
	id INT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(32),
	PASSWORD VARCHAR(32)

);

INSERT INTO USER VALUES(NULL,'zhangsan','123');
INSERT INTO USER VALUES(NULL,'lisi','234');

2.代码实现

public class JDBCDemo9 {

	public static void main(String[] args) {
		//1.键盘录入,接受用户名和密码
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入用户名:");
		String username = sc.nextLine();
		System.out.println("请输入密码:");
		String password = sc.nextLine();
		//2.调用方法
		boolean flag = new JDBCDemo9().login(username, password);
		//3.判断结果,输出不同语句
		if(flag){
			//登录成功
			System.out.println("登录成功!");
		}else{
			System.out.println("用户名或密码错误!");
		}


	}



	
	public boolean login(String username ,String password){
		if(username == null || password == null){
			return false;
		}
		//连接数据库判断是否登录成功
		Connection conn = null;
		Statement stmt =  null;
		ResultSet rs = null;
		//1.获取连接
		try {
			conn =  JDBCUtils.getConnection();
			//2.定义sql
			String sql = "select from user where username = '"+username+"' and password = '"+password+"' ";
			//3.获取执行sql的对象
			stmt = conn.createStatement();
			//4.执行查询
			rs = stmt.executeQuery(sql);
			//5.判断
		   /if(rs.next()){//如果有下一行,则返回true
				return true;
			}else{
				return false;
			}*/
		   return rs.next();//如果有下一行,则返回true

		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.close(rs,stmt,conn);
		}


		return false;
	}
}

JDBC控制事务

事务

一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。

操作

  • 开启事务
  • 提交事务
  • 回滚事务

使用Connection对象来管理事务

开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务 在执行sql之前开启事务 提交事务:commit() 当所有sql都执行完提交事务 回滚事务:rollback() 在catch中回滚事务

代码

public class JDBCDemo10 {

	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement pstmt1 = null;
		PreparedStatement pstmt2 = null;

		try {
			//1.获取连接
			conn = JDBCUtils.getConnection();
			//开启事务
			conn.setAutoCommit(false);

			//2.定义sql
			//2.1 张三 - 500
			String sql1 = "update account set balance = balance - ? where id = ?";
			//2.2 李四 + 500
			String sql2 = "update account set balance = balance + ? where id = ?";
			//3.获取执行sql对象
			pstmt1 = conn.prepareStatement(sql1);
			pstmt2 = conn.prepareStatement(sql2);
			//4. 设置参数
			pstmt1.setDouble(1,500);
			pstmt1.setInt(2,1);

			pstmt2.setDouble(1,500);
			pstmt2.setInt(2,2);
			//5.执行sql
			pstmt1.executeUpdate();
			// 手动制造异常
			int i = 3/0;

			pstmt2.executeUpdate();
			//提交事务
			conn.commit();
		} catch (Exception e) {
			//事务回滚
			try {
				if(conn != null) {
					conn.rollback();
				}
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		}finally {
			JDBCUtils.close(pstmt1,conn);
			JDBCUtils.close(pstmt2,null);
		}


	}

}

以上就是Java中JDBC的使用教程详解的详细内容,更多关于Java JDBC的资料请关注编程网其它相关文章!

--结束END--

本文标题: Java中JDBC的使用教程详解

本文链接: https://lsjlt.com/news/152271.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中JDBC的使用教程详解
    目录概念快速入门步骤代码实现详解各个对象DriverManager:驱动管理对象Connection:数据库连接对象Statement:执行sql的对象ResultSet:结果集对象...
    99+
    2024-04-02
  • java中TestNG使用教程详解
    目录一、TestNG介绍二、TestNG安装(基于eclipse+maven)三、TestNG基本使用和运行1、直接运行:2、xml方式运行四、注解说明五、TestNG断言六、Tes...
    99+
    2024-04-02
  • Spring JDBC的使用详解
    目录JDBC介绍DriverManagerConnectionStatement/PreparedStatementResultSetJDBC访问数据库流程配置数据源使用JDBC操纵...
    99+
    2024-04-02
  • Java中JWT的使用的详细教程
    目录JWT简介JWT结构HeaderPayLoadSignatureJava中使用JWT引入依赖对称签名生成JWT的Token解析JWT字符串非对称签名JWT简介 JWT全称为Jso...
    99+
    2023-02-09
    Java中JWT使用 Java使用JWT
  • Java内部类的使用教程详解
    目录一. 内部类简介1. 概念2. 优点3. 分类4. 内部类的特点5. Java类的创建要求二. 成员内部类1. 概念2. 特点3. 语法4. 案例5. 访问方式小结6. 关于th...
    99+
    2023-05-14
    Java内部类使用 Java内部类
  • C#中类的使用教程详解
    目录实例化类成员访问赋值方法方法调用方法重载在对类访问使用时,常用到的有访问类的成员、方法。 实例化 在对类进行访问时,需要将类进行实例化。并产生一个对象。可以使用关键字new来实现...
    99+
    2024-04-02
  • 详解Vuex中getters的使用教程
    目录简介说明官网getters概述说明来源用法示例测试简介 说明 本文用示例介绍Vuex的五大核心之一:getters。 官网 Getter | Vuex API 参考 | Vuex...
    99+
    2024-04-02
  • Vuex中actions的使用教程详解
    目录简介说明官网actions概述说明特点用法示例测试简介 说明 本文用示例介绍Vuex的五大核心之一:actions。 官网 Action | Vuex API 参考 | Vuex...
    99+
    2024-04-02
  • SpringCloud中Gateway的使用教程详解
    目录1.基础教程2.将配置放在配置文件里3.放在springcloud里面4.使用服务名而不是IP1.基础教程 pom.xml <parent> ...
    99+
    2022-11-13
    SpringCloud Gateway使用 SpringCloud Gateway
  • MyBatis中OGNL的使用教程详解
    前言本文主要给大家讲如何在MyBatis中使用OGNL的相关内容,分享出来供大家参考学习,感兴趣的朋友们下面来一起看看详细的介绍:如果我们搜索OGNL相关的内容,通常的结果都是和Struts有关的,你肯定搜不到和MyBatis有关的,虽然和...
    99+
    2023-05-31
    mybatis 使用 ognl
  • jdbc基本使用详解
    JDBC全称Java DataBase Connectivity / java数据库连接,是使用java连接和操作数据库的最基本驱动工具。sun公司的javasoft部门开发最早的JDBC 1.0 随JDK...
    99+
    2024-04-02
  • 详解Java使用JDBC连接MySQL数据库
    一:什么是数据库,为什么要有数据库? 数据,数据库,数据库管理系统和数据库系统是与数据库技术密切相关的四个基本概念。 数据库相信大家都耳熟能详了,其实数据库顾名思义就是存放数据的仓库...
    99+
    2024-04-02
  • 详解Android Flutter中SliverAppBar的使用教程
    目录简介SliverAppBar详解SliverAppBar的使用总结简介 对于一个APP来说,肯定会有一个AppBar,这个AppBar一般包含了APP的导航信息等。虽然我们可以用...
    99+
    2023-01-31
    Android Flutter SliverAppBar使用 Android SliverAppBar Flutter SliverAppBar
  • 好程序员Java教程解读JDBC是什么
      好程序员解读JDBC是什么,JDBC简介- JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语...
    99+
    2023-06-02
  • Java中JDBC如何使用
    本篇内容介绍了“Java中JDBC如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!概念Java DataBase Connectivi...
    99+
    2023-07-02
  • Java中Lambda表达式的使用详细教程
    目录简介格式实例函数式接口lambda作为参数遍历集合创建线程排序简介 说明 本文用示例展示Lambda表达式的用法。同时也会介绍Lambda的相关知识。 Lambda表达式介绍 L...
    99+
    2024-04-02
  • 详解SpringBoot封装使用JDBC
    Spring Boot中可以在配置文件中直接进行数据库配置, spring.datasource.username= root spring.datasource.passwo...
    99+
    2024-04-02
  • Java中的OkHttp使用教程
    目录什么是OKHttpOkHttp基本使用添加依赖OkHttp工具类使用案例发送get请求发送Post请求发送异步请求什么是OKHttp 一般在Java平台上,我们会使用Apache...
    99+
    2024-04-02
  • 详解supervisor使用教程
    A Process Control System 使用b/s架构、运行在类Unix系统上一个进程监控管理系统它可以使进程以daemon方式运行,并且一直监控进程,在意外退出时能自动重启进程。 安装 Supe...
    99+
    2022-06-04
    详解 教程 supervisor
  • Java JDBC使用入门讲解
    目录1、JDBC概述1.1、JDBC的概念1.2、JDBC的本质1.3、JDBC的好处2、JDBC快速入门2.1、编写代码2.2、完整案例前言:本节我们开始学习JDBC,JDBC的基...
    99+
    2022-12-08
    Java JDBC Java JDBC是什么
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作