核心技术(卷二)05、第4章-数据库编程

MySQL数据库面试题(一)(MySQL Database Interview Questions I) MySQL数据库面试题涵盖了从基础知识到高级概念的广泛内容,包括数据库设计、事务处理、查询优化、存储引擎等多个方面。本章详细介绍MySQL数据库面试题希望对大家有帮助。 阅读详情

数据库编程

JDBC

JDBC并非Java Database Connectivity的缩写,而是一个注册了商标的术语,它的命名体现了对ODBC(为C语言访问数据库提供了一套编程接口)的致敬。

JDBC与ODBC有基于同一个思想:根据API编写的程序都可以与驱动管理器 进行通信,而驱动管理器则通过驱动程序与实际的数据库进行通信。

JDBC的典型用法

数据库URL

JDBC URL的一般语法为:JDBC:subprotocol:other stuff

其中,subprotocol用于选择连接到数据库的具体驱动程序。other stuff参数的格式由subprotocol决定。

数据库subprotocolotherstuff备注
MySqlmysql//[hosts][/database][?properties]参考这里
Oracleoracle:driver_type:[username/password]@ [database_specifier](https://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#JJDBC08200)driver_type 包括thin,oci和kprb,用的最多的就是thin,它的格式为@//host_name:port_number/service_name。参考这里
redisredis、rediss、redis-socket、redis-sentinel//[[username :] password@] host [: port] [/ database][? [timeout=timeout[d\|h\|m\|s\|ms\|us\|ns]]]参看这里
mongodbmongodb//[username:password@]host1[:port1][,…hostN[:portN]][/[defaultauthdb][?options]]参考这里
postgresqlpostgresql:[//host:[port]/]database参考这里

JDBC驱动

数据库DriverClassLibrary
MySql5.1版本:com.mysql.jdbc.Driver/8.0版本:com.mysql.cj.jdbc.Driver
				
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.19</version>
</dependency>
				
			
Oracleoracle.jdbc.OracleDriver
				
<dependency>
	<groupId>com.oracle.ojdbc</groupId>
	<artifactId>ojdbc8</artifactId>
	<version>19.3.0.0</version>
</dependency>
				
			
MongoDB
				
<dependency>
	<groupId>org.mongodb</groupId>
	<artifactId>mongodb-driver</artifactId>
	<version>3.12.3</version>
</dependency>
				
			
Postgresqlorg.postgresql.Driver
				
<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<version>42.2.12</version>
</dependency>
				
			

执行Sql语句

注册启动器类

对于遵循JDBC4的驱动程序都是支持自动注册的,若不支持,可使用一下方式手动注册:

  • Class.forName(driverClass);
  • 设置jdbc.drivers属性:java -Djdbc.drivers=driverClass ProgramName
  • System.setProperty("jdbc.drivers",driverClass);

连接到数据库

打开数据库连接

Connection conn = DriverManager.getConnection(url,username,password);

驱动管理器遍历所有注册过的驱动程序,找到与数据库URL中子协议匹配的驱动程序。

获得语句对象(Statement)

Statement statement = conn.createStatement();

执行SQL语句

statement.execuet(sql);
int rows = statement.execuetUpdate(sql);//返回受该sql影响的行数
ResultSet resultSet = executeQuery(sql);//查询语句必须使用该方法

分析结果集

通常使用下列的循环来分析查询结果

while(resultSet.next()){//每一次调用next,就将结果集中的游标向后移一行
	//分析一行结果
	//通过传入列标签或列序号取回数据
	result.getString(colLable);
	result.getString(colIndex);//序号从1开始

}

管理连接、语句和结果集

每一个Connection对象可以创建一到多个Statement对象,每个Statement对象可以执行多条Sql语句,但是一个Statement对象最多只能有一个打开的结果集。若需要同时分析多个结果集,就需要创建多个Statement对象。如果结果集相互关联,我们最好是使用关联查询。在数据库进行关联查询比在程序中遍历多个结果集效率高的多。

每一个Connection,Statement和ResultSet对象都使用了数据库有限的资源,我们在使用完这些资源后都应该及时关闭。这三个类都实现了AutoClouseable,所以使用带资源的tyr/catch块是一个不错的选择。

执行查询操作

预备语句

使用PreparedStatement对象,我们可以在预备语句中将宿主变量(查询条件、插入值)用"?"代替,在执行预备语句之前使用set方法将变量绑定到实际值上。在执行下一次相同查询时,只需要再次使用set方法更新宿主变量就行。

String sql = " select * from books where name = ? ";
PreparedStatement pStatement = new connection.prepareStatement(sql);
pStatement.setString(1,"Core Java");//下标从1开始
ResultSet resultSet = pStatement.executeQuery();
...

读写LOB

数据库还可以存储大对象,例如图片,文档等。在SQL中,二进制大对象称为BLOB,字符型大对象称为CLOB。

写BLOB
public static void saveBlob(){
    byte[] bytes = new byte[1024];
    try{
        try(Connection connection = DriverManager.getConnection(url,userName,passWord)){
            Blob blob = connection.createBlob();//获取Blob对象
            try(OutputStream out = blob.setBinaryStream(1); //获取Blob对象的输出流
                InputStream in = new FileInputStream("images.PNG");){
                while(in.available() >  0){
                    in.read(bytes);
                    out.write(bytes);
                }
                out.flush();
            }
            PreparedStatement preparedStatement = connection.prepareStatement(" insert into test (name,blob) values(?,?)");
            preparedStatement.setString(1,"file.zip");
            preparedStatement.setBlob(2,blob);
            preparedStatement.executeUpdate();
        }
    }catch(SQLException e){
        e.printStackTrace();
    }catch (FileNotFoundException e){
        e.printStackTrace();
    }catch (IOException e){
        e.printStackTrace();
    }
}
读Blob
public static void readBlob(){
    byte[] bytes = new byte[1024];
    try{
        try(Connection connection = DriverManager.getConnection(url,userName,passWord)){
            Statement statement = connection.createStatement();
            try(ResultSet resultSet = statement.executeQuery("select * from test")){
                if (resultSet.next()){
                    Blob blob = resultSet.getBlob(3);//获取Blob对象
                    try( InputStream in = blob.getBinaryStream();//获取Blob对象的输入流
                         OutputStream outputStream  = new FileOutputStream("images_copy.PNG",true);){
                        while(in.read(bytes) > 0){
                            outputStream.write(bytes);
                        }
                    }
                }
            }
        }
    }catch (SQLException e){
        e.printStackTrace();
    }catch (FileNotFoundException e){
        e.printStackTrace();
    }catch (IOException e){
        e.printStackTrace();
    }
}
写Clob
public static void saveClob(){
    try{
        try(Connection connection = DriverManager.getConnection(url,userName,passWord)){
            Clob clob = connection.createClob();//获取Clob对象
            try(Reader reader = new FileReader("test2.txt")){
                PreparedStatement statement = connection.prepareStatement(" insert into test (name,clob) values(?,?)");
                statement.setString(1,"test.txt");
                Writer writer = clob.setCharacterStream(1);//获取Clob的字节输出流
                char[] chars = new char[10];
                while(reader.read(chars)>0){
                    writer.write(chars);
                }
                writer.close();
                statement.setClob(2,clob);
                statement.executeUpdate();
            }

        }
    }catch (SQLException e){
        e.printStackTrace();
    }catch (FileNotFoundException e){
        e.printStackTrace();
    }catch (IOException e){
        e.printStackTrace();
    }
}
读Clob
public static void readClob(){
    try{
        try(Connection connection = DriverManager.getConnection(url,userName,passWord)){
            Statement statement = connection.createStatement();
            try(ResultSet resultSet = statement.executeQuery("select clob from test where name='test.txt'")){
                if (resultSet.next()){
                    Clob clob = resultSet.getClob(1);
                    BufferedReader reader = new BufferedReader(clob.getCharacterStream());//获取Clob的字节输入流
                    while (reader.ready()){
                        logger.info(reader.readLine());
                    }
                }
            }
        }
    }catch (Exception e){
        e.printStackTrace();
    }
}

SQL转义

日期与时间

日期和时间字面常量随数据库的不同而变化很大。要嵌入日期或时间字面常量,需要按照一定格式指定它的值,之后驱动程序会将它转译为本地格式。

  • DATE:{d ‘2020-04-20’}
  • TIME: {t ‘11:25:35’}
  • TIMESTAMP: {ts ‘2020-04-20 11:25:35.999’}
标量函数

标量函数是指仅返回一个值的函数。要调用函数,需要像下面这样嵌入标准的函数名和参数:

{fn left(?,20)}
{fn user()}
存储过程

使用call转义命令来调用存储过程:

{call PROC1(?,?)}
{call PROC2} //没有参数就不用加括号
{call ?=PROC3(?)} //用=来捕获存储过程的返回值
%和_

这两个字符在LIKE子句中具有特殊含义。_用来匹配一个字符,%用来匹配资格字符序列。

如果想要匹配包含_的字符串,可以使用下面结构:

where ? like %_%{escapge '!'}

这里将!定义为转义字符。

获取自动生成键

statement.executeUpdate(insertSql,Statement.RETURN_GENERATED_KEYS);
ResultSet rs = statement.getGeneratedKeys();
if (rs.next){
	int key = rs.getInt(1);
}

如果只执行的语句是插入语句,且指定了Statement.RETURN_GENERATED_KEYS,那么结果集的第一列就是数据库自动生成的主键。

可滚动和可更新结果集

默认情况下获得结果集都是不可滚动和更新的。使用下面的方式来构造不同的Statement,以实现结果集可滚动和可更新

Statement	createStatement(int resultSetType, int resultSetConcurrency);
PreparedStatement	prepareStatement(String sql, int resultSetType, int resultSetConcurrency);

resultSetType有:

resultSetConcurrency有:

期值为:

并不是所有的数据库都支持这些模式,我们应该检查结果集的功能。

DataBaseMetaData metaData = connection.getMetaData();
if (metaData.supporsResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE)){
	...
}
if (metaData.supportResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)){
	...
}
可滚动集的操作
rs.privous();//向后滚动
rs.next();//向前滚动
rs.relative(n);//n为正数,则向前滚动,n为负数则向后滚动,超过结果集范围,则游标被置于第一行之前或最后一行之后且返回false
rs.absolute(n);//将游标置于指定的行号上
rs.getRow();//获取当前行号
可更新集操作
resultSet.updateXXX(colNameorIndex,valaue); //所有对应于SQL类型的数据类型都配有updateXxx方法,比如updaateDouble,updateString等
resultSet.updateRow();//更新字段后一定要调用这个方法,否则所有的字段更新都会被遗弃。
//插入数据
rs.moveToInsertRow();//将游标移动大奥特定的可插入行
rs.updateXxx();
...

rs.insertRow();//将新增行插入数据库
rs.moveToCurrentRow();//将游标移回调用moveToInserRow方法之前的位置

rs.deleteRow();//删除游标所指行

并非所有的结果集都是可更新的

事务

默认情况下,数据库连接处于自动提交模式。每个SQL语句一旦被执行便被提交给数据库,一旦被提交,便无法回滚。

在使用事务时,需要关闭自动提交:

connection.setAutoCommit(false);
Statement statement = connection.createStatement();
try{
	statment.execuetUpdate(commond1);
	statment.execuetUpdate(commond2);
	statment.execuetUpdate(commond3);
	statment.execuetUpdate(commond4);
	//没有出错,提交事务
	connection.commit();
}catch(SQLException e){
	//出错了,回滚事务
	connection.rollback();
}

保存点

使用保存点,可以更细粒度的控制事务

connection.setAutoCommit(false);
Statement statement = connection.createStatement();
statment.execuetUpdate(commond1);
statment.execuetUpdate(commond2);
Savepoint svpt = connection.setSaavepoint();
statment.execuetUpdate(commond3);
statment.execuetUpdate(commond4);
//没有出错,提交事务
if (...){
	connetion.rollback(svpt);//回滚到执行common3之前
}
//当不在需要保存点时,必须释放它
connection.releaseSavepoint(svpt);

批量更新

首先需要判断数据库是否支持批量更新:

DatabaseMetaData databaseMetaData = connection.getMetaData();
if (databaseMetaData.supportsBatchUpdates()){
   ...
}

为了在批量模式下正确的处理异常,必须将整个批量更新视为单个事务,需要关闭自动提交。批量更新的语句应该是INSERT,UPDATE,DELETE等操作,也可以是数据库定义的语句,如CREATE TABLE,DROP TABLE等,不能 是SELECT,批量更新中有查询语句会抛出异常。

DatabaseMetaData databaseMetaData = connection.getMetaData();
if (databaseMetaData.supportsBatchUpdates()){
   connection.setAutoCommit(false);
   Statement statment = connection.createStatement();
   while(...){
	   String Sql = ...;
	   statement.addBacth(Sql);
   }
   //提交整个提交语句
   int[] counts = statment.executeBatch();
   connection.commit();
   connection.setAutoCommit(true);
}

executeBath返回一个数组,其中的每个元素都对应一条语句。如果其值 非负数,则代表受该条语句影响的记录数;如果其值为Statement.SUCCESS_NO_INFO,则表示执行成功,单没有记录数可用;如果其值为Statement.EXECUTE_FAILED,则表示该语句执行失败。

学会C++,告别内卷,成为“卷”王 前几天有个后端程序员跟我吐槽:今年大部分的时间一直在重复着「增删改查」,回顾这一年基本没啥进步,内卷严重啊,这样下去好怕被裁员啊! 在现实情况中,好像大多数人都会遭遇这样的职场瓶颈:工作越久,年龄越大,所面临的职场危机就越来越多,薪资不好涨、大厂不好跳、精力体力通通在倒退,更可怕的是,不知道什么时候就会遭遇被裁员的不利处境。 在随时都可能发生的既定危机面前,越来越多的人选择开辟新的路径学习新的知识去改变自己的不利处境。 就这样,越来越多的程序员开始学起了C/C++。 01 我们为什么要学习C/ 阅读详情

相关推荐

深入解读 ABAP 7.40 SP05:语言新特性与 HANA 实战经验全盘梳理

ABAP 7.40 SP05 带来了多项重要更新,主要包括:1)内存数据处理增强,如内表支持 MOVE-CORRESPONDING、FOR 表推导等;2)数据库访问现代化,包括新 Open SQL 语法和 code pushdown 概念;3)引入 CDS View 和 AMDP 为 HANA 优化铺路。这些改进使 ABAP 更接近现代语言特性,提升了开发效率和代码可读性,特别是在处理复杂数据结构和数据库操作时。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 128

AutoCloseable详解

1. Java Doc 正文 代表一个对象在close之前可能持有某些资源(文件或socket)。如果对象是在try-with-resources代码块中声明的, AutoCloseable对象的close()方法会被自动执行。这种构造方式保证了最快的资源释放,避免资源耗尽异常。 2. 方法 void close() throws Exception 关闭资源,放弃所有内在的资源。如果对象是在try-with-resources代码块中声明的,那么这个方法会自动被执行。 虽然这个接口的方法声明成抛出Exce

沈光阳的博客 8984

单相全桥逆变三种SPWM调制方式(单极/双极/倍频)到底怎么选?一篇讲透优缺点与选型

本文深入解析单相全桥逆变器中单极性、双极性和单极性倍频三种SPWM调制方式的原理与工程选型策略。通过对比开关损耗、谐波特性和驱动复杂度等关键指标,提供基于STM32的实战方案和选型框架,帮助工程师在新能源发电、电机驱动等应用中做出最优决策。

weixin_34046298的博客 807

oracle批处理执行

sqlplus scott/tiger@zlkj_kk @sql.txt 放在一个bat文件中即可 sql.txt是保存sql语句的文件

旋风熊 216

Deeplabcut实战:从数据标注到行为分析的全流程解析

本文详细解析了Deeplabcut从数据标注到行为分析的全流程实战技巧,包括项目创建、配置文件定制、智能帧提取、高效标注方法、模型训练优化以及多视角融合等高级应用。通过具体案例和实用参数配置,帮助研究者快速掌握这一行为分析工具,提升实验效率和准确性。

weixin_29057163的博客 246

特性阻抗 – SI/PI 世界碰撞的地方

除了谐振零点和峰值外,在一定频率下,传输线的阻抗看起来像远端开路时的电容器的阻抗,也看起来像远端短路时电感的阻抗。如果随后的制造变化将测得的阻抗推到 -10% 容差的低端(例如 44 欧姆)的测量区域内,那么如果在初始下降时测量,则真正的特性阻抗将在 42 欧姆时降低 5%,并且超出规格。这意味着,当我们测量红色或蓝色图的峰和相邻谷之间的中间阻抗时,它是该频率下传输线的特性阻抗。图 7 远端开路时(红色常亮)与远端短路时(蓝色常亮)的电感和电容抗阻抗与频率的关系(上图)和传输线的阻抗与频率(下图)的对比。

jkh920184196的博客 962

数据库批处理的几种方法

首先,要关闭数据库连接的自动提交。否则就不叫批处理了,哈哈。connect.setAutoCommit(false);然后,判断该数据库是否支持批更新。DatabaseMetaData dbmData = connect.getMetaData();//...if (dbmData.supportsBatchUpdates()){  //使用Statement创建批处理  statement.

Leo的专栏 1万+

BMW Standard Tools 宝马FSC工具套装下载

这是一款非常专业的一套宝马编码工具,懂行的人自然知道他的用处,不懂行的人,我解释再多也不会明白的,需要的拿去吧。软件名:BMW Standard Tools包含工具:BMW Coding Tool v2.50、change Language、CIC Mafia、Dr.Gini B021、EasyConnect、EDIABAS Konfigurator v1.1、EDIABAS Konfigurator v2.0.0、FSC-Tools_2.18、FSTool_v2_CarServer、INPA、ITool

Zj_arrow的博客 6998

java statement升级_通过 Statement 执行数据表的更新操作

通过Statement来执行SQL的Insert,Delete,Update操作package xuezaipiao;/*** 通过JDBC向数据表中添加数据* 1.获取数据库连接* 2.Statement : 用于执行SQL的对象* --通过 Connection 的createStatement() 方法来获取* --通过executeUpdate(sql) 可以执行SQL语句* --注意SQ...

weixin_29628189的博客 836

用STM32L552驱动AD9102:一个硬件工程师的实战避坑指南(附完整代码)

本文详细介绍了如何使用STM32L552微控制器驱动AD9102任意波形发生器芯片,从硬件设计到波形生成的完整实战指南。内容包括电源架构、时钟电路设计、输出调理电路等关键硬件设计要点,以及软件驱动架构、波形存储优化和典型波形生成实例。通过实战经验分享,帮助硬件工程师避开常见设计陷阱,提升开发效率。

weixin_30889885的博客 333

Duplicate Cleaner Pro 5.16 保姆级教程:如何用哈希值精准清理重复文件(附音频/视频模式详解)

本文详细介绍了Duplicate Cleaner Pro 5.16如何利用哈希值技术精准清理重复文件,特别针对音频、视频和图片等多媒体文件提供了专业解决方案。通过哈希算法比对和多媒体特征识别,帮助用户高效管理存储空间,提升文件整理效率。

weixin_27032989的博客 566

java自动关闭流

jdk7可以用 thy-with-resoucese,不用手动关闭 查询资料都说要实现autoclouseable接口才能自动关闭流 ,但自测了多次,不管是否测试aoutocloeseable中的close()方法都可以自动关闭 try( BufferedWriter write= new BufferedWriter(new FileWriter("E:\\testA...

diantahui0092的博客 568

HTOL集成电路老化测试学习总结-20250510

电子元器件的可靠性在产品开发中至关重要,尤其是在微电子技术迅速发展的今天。电子元器件的失效率通常遵循“浴盆曲线”,分为早期失效期、可使用期和老化期。为了评估芯片的可靠性,常采用高温操作寿命测试(HTOL),通过高温和高压加速芯片老化,以筛选出早期失效的芯片并评估其长期可靠性。HTOL测试中,芯片在高温下运行并监控其性能变化,通过阿伦尼乌斯公式计算加速因子,预测芯片的失效率和寿命。此外,Burn-in测试用于加速芯片老化,提前发现并剔除不合格产品,而早期失效率测试(ELFR)则用于评估产品初期使用阶段的可靠性

歌颂苦难的行为是无耻的; 2103

Java 核心技术 卷II 高级特性 第5章数据库编程

5.1 JDBC的设计 5.1.1 JDBC驱动程序类型 5.1.2 JDBC的典型用法 5.2 结构化查询语言 5.3 JDBC配置 5.3.1 数据库URL

dldldl1994的博客 323

【深度学习基础】多任务学习(Multi-Task Learning)

多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法。在机器学习领域,标准的算法理论是一次学习一个任务,也就是系统的输出为实数的情况。复杂的学习问题先被分解成理论上独立的子问题,然后分别对每个子问题进行学习,最后通过对子问题学习结果的组合建立复杂问题的数学模型。多任务学习是一种联合学习,多个任务并行学习,结果相互影响。一次只学习一个任务(task),大部分的机器学习任务都属于单任务学习。

十二月的猫 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JavaWeb_第9章_数据库编程

第9章 数据库编程摘要 本章介绍了Java程序通过JDBC技术连接和操作关系型数据库的方法。主要内容包括: JDBC概述:JDBC是一套标准Java类库,提供了统一的API接口规范,使Java程序能够连接不同类型的数据库(MySQL、Oracle等),解决了数据库访问的移植性问题。 JDBC快速入门: 搭建步骤:准备数据库→创建项目引入依赖→编写代码 核心流程:注册驱动→获取连接→创建Statement→执行SQL→处理结果→释放资源 示例代码展示了完整的JDBC查询操作 核心API: DriverMana

weixin_45846724的博客 376

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VC++数据库编程核心技术:MFC ODBC类深度解析与实战优化

数据库编程是连接应用程序与数据存储的核心技术,其本质在于通过标准化的接口协议实现高效、安全的数据交换。在C++生态中,ODBC作为跨数据库的统一接口基石,提供了驱动程序管理器与驱动程序的标准化调用层,确保了应用程序与多种数据库的兼容性。这一原理为上层封装框架奠定了技术基础,其价值在于平衡了开发效率与底层控制力,尤其适用于对性能与资源有严苛要求的金融、工业控制等场景。MFC ODBC类库正是基于此构建的经典封装,通过CDatabase和CRecordset等核心类,将ODBC API的面向过程调用转化为面向对

weixin_33739646的博客 825

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

05_TiDB MCP Server实战:将数据库能力接入AI工具生态

摘要: TiDB MCP Server通过Model Context Protocol(MCP)将数据库能力接入AI工具生态,实现自然语言操作数据库。MCP作为AI工具与外部系统的通用协议,支持Claude Code、Cursor等工具直接查询TiDB,无需手写SQL。配置方式包括命令行和.mcp.json文件,支持SSL连接TiDB Cloud。MCP Server提供元数据发现、SQL执行等功能,使AI助手能自动获取数据库结构并执行查询,显著提升开发效率。

模界 | AI工程化实践者 503

2021-01-05

1、 大数据具有哪些特点?ABCD (A) 数据的“大量化” (B) 数据的“快速化” (C) 数据的“多样化” (D) 数据的“价值化” 2、 大数据的两个核心技术是什么?AC (A) 分布式存储 (B) 数据处理与分析 (C) 分布式处理 (D) 数据存储与管理 第二章 大数据处理架构Hadoop 单选题 1、 下列哪个不属于Hadoop的特性?A (A) 成本高 (B) 高可靠性 (C) 高容错性 (D) 运行在Linux平台上 2、 Hadoop框架中最核心的设计是什么?A (A) 为海量数据提供

m0_46143427的博客 1万+

mysql数据库管理(二)

MySQL的数据库管理包括但不限于以下几个方面:‌ 数据库的基本管理:‌包括查看、‌新建、‌更改、‌删除等操作。‌ 数据密码管理:‌包括数据库密码的更改、‌破解等。‌备份与恢复:‌对整个数据库或单独的数据库进行备份,‌以及备份的恢复。‌ 用户授权:‌创建用户、‌给用户添加权限、‌去除权限、‌删除用户等操作。‌ 安装与管理工具:‌如phpMyAdmin的安装和使用,‌便于管理和操作数据库。本章将更详细的介绍MySQL数据库的管理操作。

Linux运维老纪的博客 1064

springboot基于协同过滤算法的新闻推荐系统 w05h4

本文的重点是对该系统的开发环境、要实现的基本功能和开发步骤进行了说明,并重点阐述了系统设计方案的关键点、设计思想该系统基于浏览器B/S的方式进行访问,采用springboot集成快速开发框架,前端使用vue方式,开发工具IntelliJ IDEA x64,因为该开发工具,内嵌了Tomcat服务运行机制,可不用单独下载Tomcat server服务器。由于考虑到数据库结构的灵活性,本系统想要使用 MySQL来设计数据库[1],而 java技术[2], B/S架构则确保了较高的平台适应性。

QQ402205496的博客 1338

java核心技术第一篇之数据库基础

01.数据库的概念: 1).数据库的概念:数据库(Database),就是存储数据的仓库。 2).作用:用来存储和管理大量数据的。内部采用了非常便于查询的机制来存储数据,能保证我们在大量数据的情况下 可以很快,并且很准确为我们查询到所需记录。 3).什么是数据库管理系统:指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制, 以保证数据库的安全性和完整性。用户通...

不一样的花朵的博客 234

JDBC核心技术总结

JDBC核心技术01 JDBC概述1. 数据的持久化:2. JDBC的理解:3.图示理解:4. 数据库的驱动:5.面向接口编程的思想:02 数据库的连接JDBCUtils.java03 Statement接口实现CRUD操作(了解)04 PreparedStatement替换Statement实现CRUD操作1.PreparedStatement的理解:2.使用PreparedStatement实现通用的增、删、改的方法:version 1.0【总结】05 PreparedStatement操作Blob类型

VagerLI 513

网络编程核心技术:从TCP/IP到高并发架构实战

网络编程作为分布式系统的通信基础,其核心在于实现跨设备的数据传输。TCP/IP协议栈通过分层设计解决寻址、路由、可靠传输等关键问题,其中TCP的ACK确认和流量控制机制确保数据传输的可靠性,而UDP则适用于实时性要求高的场景。现代高并发系统常采用I/O多路复用技术如epoll和协程模型提升吞吐量,配合连接池、协议优化等手段实现性能突破。在云原生时代,容器网络和服务网格进一步简化了微服务间的通信复杂度。无论是电商秒杀系统还是实时通信应用,良好的网络编程实践都能显著提升系统性能和可靠性。

weixin_42549451的博客 350

javaWeb核心技术05--JPA、ORM、hibernate

ORM思想 ORM(Object-Relational Mapping) 表示对象关系映射。在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中。只要有一套程序能够做到建立对象与数据库的关联,操作对象就可以直接操作数据库数据,就可以说这套程序实现了ORM对象关系映射 简单的说:ORM就是建立实体类和数据库表之间的关系...

qq_34536604的博客 187

很多人还在卷大厂,其实银行科技岗才是今年春招的隐藏机会

信息差的第二条:银行科技岗的“真实总包”往往比表面高30%以上。如果你发现自己属于“不适合银行”的那类人,不要硬拗。👉 这已经是“少数人的游戏”,普通同学很难靠努力硬挤进去。👉 第一份工作的“平台”,正在决定你未来3年的天花板。很多岗位实际是“缺人”的状态,只要你匹配,就有机会。所以现在最聪明的做法不是“谁要我我就去”,而是:。测试不是一个“退而求其次”的选择。:租房补贴、生活补贴、交通补助、餐补、通讯补贴。:20+兴趣小组、交友联谊、公益支教、文创周边。专业:计算机、软件工程、数据科学、统计学等。

CeshirenTester的博客 363
上一篇: 核心技术(卷二)04、第3章-网络
下一篇: 《Spring in Action》第4章-Spring Security
风萧水丶寒
博客等级 码龄11年 6粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值