Java第十七章数据库操作

一、数据库基础

1.什么是数据库

数据库是一种储存结构,它允许使用各种格式输入、处理和检索数据,不必在每次需要数据时重新输入。例如,当需要某人的电话号码时,需要查看电话簿,按照姓名来查询,这个电话簿就是一个数据库。

数据库的特点:实现数据共享,减少数据的冗余度,数据库的独立性,数据库实现集中控制,数据库的一致性和可维护性。

2.数据库的种类

层次性数据库一般基于某种数据模型,可分为层次型、网状型、关系型及面向对象型。

3.SQL语言

sql被广泛地应用于大多数据库库中,使用sql语言可以方便地查询、操作、定义和控制数据库中地数据。sql语言主要由以下几部分组成:数据定义语言、数据操纵语言、数据控制语言、事物控制语言。

1.select语句

select语句用于从数据表中检索。语法如下:

SELECT 所选字段列表 FROM 数据表名
WHERE 条件表达式 GROUP BY 字段名 HAVING 条件表达式(指定分组的条件)
ORDER BY 字段名[ASC|DESC]

2.insert语句

insert语句用于向表中插入新数据。语法如下:

insert into 表名[(字段名 1,字段名 2...)]
values(属性值 1,属性值 2...)

3.update语句

update语句用于更新数据表中的某些记录。语法如下:

UPDATE 数据表名 SET 字段名 = 新的字段值 WHERE 条件表达式

4.delete语句

delete语句用于删除。语法如下:

delete from 数据表明 where 条件表达式

二、jdbc概述

1.jdbc技术

jdbc的全程是 Java DataBase Connectivity,是一套面向对象的应用程序接口,指定了统一地访问各种关系型数据库地标准接口。jdbc是一种底层的apl,因此访问数据库时需要在业务逻辑层中嵌入SQL语句。SQL语句是面向关系的,依赖于关系模型,所以通过jdbc技术访问数据库也是面向关系的,jdbc技术主要完成以下几个任物:

1.与数据库建立一个连接

2.向数据库发送SQL语句

3.处理从数据库返回的结果

2.jdbc驱动程序的类型

  • 第一类:JDBC-ODBC桥。
  • 第二类:部分本地API部分Java的驱动程序。
  • 第三类:JDBC网络纯Java驱动程序。
  • 第四类:本地协议的纯 Java 驱动程序。
  • 第三、四两类都是纯Java的驱动程序,因此,对于Java开发者来说,它们在性能、可移植性、功能等方面都有优势。

三、jdbc中常用的类和接口

1.DriverManager类

功能:就是类中的方法:registerDriver和getConnection
1.registerDriver注册驱动:告诉程序该使用哪一个数据库驱动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.getConnection获取数据库连接
    方法:static Connection getConnection(String url,String username,String password)
    参数:
    url:指定连接的路径
    	语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
		例子:jdbc:mysql://localhost:3306/employee
		细节:如果连接是本机Mysql服务器,并且默认的端口是3306,则url可以		  简写为:jdbc:mysql:///数据库名

2.Connection接口

1.Connection 接口代表与特定的数据库的连接,在连接上下文中执行SQL语句并返回结果。

2.java.sql.Connection接口的实现对象代表与数据库的连接,也就是在Java程序和数据库之间建立连接。Connection接口中常用的方法:

Statement createStatement():创建一个语句对象,语句对象用来将SQL语句发送到数据 库。
PreparedStatement prepareStatement(String sql):创建一个预编译的语句对象,用来将参数 化的SQL语句发送到数据库,参数包含一个或者多个问号“?”占位符。
CallableStatement prepareCall(String sql):创建一个调用存储过程的语句对象,参数是调用 的存储过程,参数包含一个或者多个问号“?”为占位符。
close():关闭到数据库的连接,在使用完连接后必须关闭,否则连接会保持一段比较长的 时间,直到超时。

isClosed():判断连接是否已经关闭。

3.Statement接口

1.Statement接口用于在已建立连接的基础上向数据库发送SQL语句

2.java.sql.Statement称为语句对象,它提供用于向数据库发出SQL语句,并且访问结果。

有三种Statement接口::java.sql.Statement、java.sql.PreparedStatement和 java.sql.CallableStatement

PreparedStatement继承Statement接口,CallableStatement继承 PreparedStatement接口。
Statement实现对象用于执行基本的SQL语句,PreparedStatement实现对 象用于执行预编译的SQL语句,CallableStatement实现对象用于用来调用数据库中的存储过程。

Statement提供了许多方法,最常用的方法如下:

executeQuery():运行查询语句,返回ResultSet对象。
executeUpdate():运行更新操作,返回更新的行数。
close():关闭语句对象。
isClosed():判断语句对象是否已经关闭。

4.PreparedStatement接口

1.PreparedStatement接口用来动态地执行SQL语句。

5.ResultSet

1.ResultSet接口相当于一个临时表,用来暂时存放数据库查询操作所获得的结果集。ResultSet实例具有指向当前数据行的指针,指针开始的位置在第一条记录的前面,通过next()方法可以将指针向下移。

2.在Statement执行SQL语句时,如果是SELET语句会返回结果集,结果集通过接口 java.sql.ResultSet描述的,它提供了逐行访问结果集的方法,通过该方法能够访问结果集中不同 字段的内容。
ResultSet最常用的方法介绍如下:

close():关闭结果集对象。
isClosed():判断结果集对象是否已经关闭。
next():将结果集的光标从当前位置向后移一行。
getString():获得在数据库里是CHAR 或 VARCHAR等字符串类型的数据,返回值类型是 String。
getFloat():获得在数据库里是浮点类型的数据,返回值类型是float。
getDouble():获得在数据库里是浮点类型的数据,返回值类型是double。
getDate():获得在数据库里是日期类型的数据,返回值类型是java.sql.Date
getBoolean():获得在数据库里是布尔数据的类型,返回值类型是boolean。
getBlob():获得在数据库里是Blob(二进制大型对象)类型的数据,返回值类型是Blob类 型。
getClob():获得在数据库里是Clob(字符串大型对象)类型的数据,返回值类型是Clob。

四、数据库操作

1.连接数据库

以下是Java连接MySQL数据库的步骤:

  1. 下载并导入MySQL的JDBC驱动程序,可以从MySQL官网下载或者使用Maven等构建工具导入。

  2. 在Java代码中加载JDBC驱动程序,例如:

    Class.forName("com.mysql.jdbc.Driver");
  3. 创建数据库连接,需要指定数据库的URL、用户名和密码,例如:

    String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "mypassword"; Connection conn = DriverManager.getConnection(url, user, password);
  4. 创建Statement对象,用于执行SQL语句,例如:

    Statement stmt = conn.createStatement();
  5. 执行SQL语句,例如查询数据:

    ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("id: " + id + ", name: " + name + ", age: " + age); }
  6. 关闭数据库连接和Statement对象,例如:

    rs.close(); stmt.close(); conn.close();

2.向数据库发送SQL语句

Java中向数据库发送SQL语句可以通过JDBC实现。JDBC是Java Database Connectivity的缩写,是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了一套用于执行SQL语句的方法和处理返回结果的方式。

以下是一个简单的Java程序,演示如何向数据库发送SQL语句:

import java.sql.*;

public class JdbcDemo {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // 加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");

            // 获取数据库连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");

            // 创建Statement对象
            stmt = conn.createStatement();

            // 执行SQL语句
            String sql = "SELECT * FROM user";
            rs = stmt.executeQuery(sql);

            // 处理结果集
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println("id: " + id + ", name: " + name + ", age: " + age);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

该程序连接到本地的MySQL数据库,执行了一个查询语句,并将结果集输出到控制台。

3.处理查询结果集

4.顺序查询

5.模糊查询

6.预处理语句

7.添加、修改、删除记录

8.简单概述如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. Java变量的作用域默认是?(Java基础) A. 局部变量 B. 实例变量 C. 类变量 D. 静态变量 2. 在Java,以下哪种关系是“多对多”关系?(Java基础) A. 一对一关系 B. 一对多关系 C. 多对一关系 D. 多对多关系 3. 下面哪个是Java的接口?(Java基础) A. abstract class B. final class C. private class D. interface 4. 在Java,以下哪个不是访问修饰符?(Java基础) A. static B. public C. protected D. void 5. 下面哪个是Java的包?(Java基础) A. class B. function C. module D. package 6. Spring框架,以下哪个是Bean的作用?(Java框架) A. 用于数据传输 B. 用于控制流程 C. 用于存储数据 D. 用于组装对象 7. 在Spring框架,以下哪个注解用于依赖注入?(Java框架) A. @Autowired B. @RequestMapping C. @ResponseBody D. @PathVariable 8. 在Spring框架,以下哪个注解用于事务管理?(Java框架) A. @Transactional B. @RequestMapping C. @ResponseBody D. @PathVariable 9. 在Spring框架,以下哪个注解用于AOP?(Java框架) A. @Aspect B. @RequestMapping C. @ResponseBody D. @PathVariable 10. 在Spring框架,以下哪个是Bean的作用域?(Java框架) A. prototype B. singleton C. request D. session 11. 关系型数据库,以下哪个是索引类型?(关系型数据库) A. 聚集索引 B. 唯一索引 C. 主键索引 D. 外键索引 12. 关系型数据库,以下哪个是事务的特性?(关系型数据库) A. 原子性 B. 一致性 C. 隔离性 D. 持久性 13. Redis,以下哪个数据结构是有序集合?(redis) A. hash B. list C. set D. zset 14. Redis,以下哪个命令用于设置过期时间?(redis) A. SET B. GET C. EXPIRE D. INCR 15. 在Spring Cloud,以下哪个组件提供服务发现功能?(Springcloud) A. Eureka B. Hystrix C. Feign D. Ribbon 16. 在Spring Cloud,以下哪个组件提供负载均衡功能?(Springcloud) A. Eureka B. Hystrix C. Feign D. Ribbon 17. 在Spring Cloud,以下哪个组件提供断路器功能?(Springcloud) A. Eureka B. Hystrix C. Feign D. Ribbon 18. 在消息队列,以下哪个是消息的生产者?(消息队列) A. consumer B. broker C. producer D. subscriber 19. 在消息队列,以下哪个是消息的消费者?(消息队列) A. consumer B. broker C. producer D. subscriber 20. 在消息队列,以下哪个是消息间件?(消息队列) A. Kafka B. Redis C. MongoDB D. MySQL 21. Javascript,以下哪个方法用于创建新的HTML元素?(Javascript) A. document.createTextNode() B. document.createElement() C. document.getElementById() D. document.querySelector() 22. Javascript,以下哪个方法用于向HTML元素添加新的类?(Javascript) A. element.setAttribute() B. element.classList.add() C. element.innerHTML D. element.appendChild() 23. Javascript,以下哪个方法用于将函数绑定到事件处理程序?(Javascript) A. element.click(function) B. element.addEventListener(event, function) C. element.on(event, function) D. element.bind(event, function) 24. Vue.js,以下哪个指令用于绑定数据?(Vue.js) A. v-bind B. v-if C. v-for D. v-model 25. Vue.js,以下哪个指令用于条件渲染?(Vue.js) A. v-bind B. v-if C. v-for D. v-model 26. Vue.js,以下哪个指令用于循环渲染?(Vue.js) A. v-bind B. v-if C. v-for D. v-model 27. Spring框架,以下哪个注解用于RESTful风格的API?(Java框架) A. @RequestMapping B. @ResponseBody C. @PathVariable D. @RestController 28. 在Spring Cloud,以下哪个组件提供API网关功能?(Springcloud) A. Eureka B. Hystrix C. Feign D. Zuul 29. 在关系型数据库,以下哪个操作用于删除数据?(关系型数据库) A. SELECT B. UPDATE C. INSERT D. DELETE 30. 在关系型数据库,以下哪个操作用于更新数据?(关系型数据库) A. SELECT B. UPDATE C. INSERT D. DELETE 31. Redis,以下哪个命令用于获取缓存数据?(redis) A. SET B. GET C. EXPIRE D. INCR 32. Redis,以下哪个命令用于删除缓存数据?(redis) A. SET B. GET C. EXPIRE D. DEL 33. 在Spring Cloud,以下哪个组件提供配置管理功能?(Springcloud) A. Eureka B. Hystrix C. Feign D. Config 34. 在消息队列,以下哪个是消息的间件?(消息队列) A. ActiveMQ B. RabbitMQ C. RocketMQ D. Kafka 35. 在消息队列,以下哪个是消息的传递模式?(消息队列) A. 点对点模式 B. 发布订阅模式 C. 一对多模式 D. 多对多模式 36. 在Javascript,以下哪个方法用于将字符串转为数字?(Javascript) A. parseInt() B. parseFloat() C. toInt() D. toFloat() 37. 在Javascript,以下哪个方法用于将数字转为字符串?(Javascript) A. toString() B. String() C. toStr() D. toS() 38. 在Javascript,以下哪个方法用于返回数组的第一个元素?(Javascript) A. array[0] B. array.first() C. array.shift() D. array.slice(0,1) 39. Vue.js,以下哪个指令用于绑定事件?(Vue.js) A. v-bind B. v-on C. v-for D. v-model 40. Vue.js,以下哪个指令用于双向数据绑定?(Vue.js) A. v-bind B. v-if C. v-for D. v-model 41. Vue.js,以下哪个指令用于条件渲染?(Vue.js) A. v-bind B. v-if C. v-for D. v-model 42. 在Spring Cloud,以下哪个组件提供服务网关功能?(Springcloud) A. Eureka B. Hystrix C. Feign D. Zuul 43. 在关系型数据库,以下哪个操作用于插入数据?(关系型数据库) A. SELECT B. UPDATE C. INSERT D. DELETE 44. Redis,以下哪个命令用于将值自增?(redis) A. SET B. GET C. EXPIRE D. INCR 45. Redis,以下哪个命令用于将值自减?(redis) A. SET B. GET C. EXPIRE D. DECR 46. 在消息队列,以下哪个是消息的消费模式?(消息队列) A. 点对点模式 B. 发布订阅模式 C. 一对多模式 D. 多对多模式 47. 在Javascript,以下哪个方法用于返回数组的最后一个元素?(Javascript) A. array[-1] B. array.last() C. array.pop() D. array.slice(-1) 48. 在Javascript,以下哪个方法用于将字符串转为布尔值?(Javascript) A. toBoolean() B. Boolean() C. parseBoolean() D. toBool() 49. Vue.js,以下哪个指令用于循环渲染?(Vue.js) A. v-bind B. v-if C. v-for D. v-model 50. Vue.js,以下哪个指令用于计算属性?(Vue.js) A. v-bind B. v-if C. v-for D. computed

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Violet Evegarden

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值