第十九章 SQL文保存方法

Spark SQL之dataframe数据保存 Spark SQL之dataframe数据保存 1. 背景 Spark SQL作为处理结构化数据的功能模块,本身支持SQL形式使用功能,内部也做了相对RDD更加高的抽象 DataFrame也是一个抽象数据集合,但对比RDD多了schema数据结构化信息,可以将DataFrame看成是RDD+schema信息 2. dataframe数据保存类型 环境准备 Idea2020 jdk 1.8 scala 2.12.12 maven 3.6.3 pom文件 <!-- 定义了一些常量 --> 阅读详情

第十九章 SQL文保存方法

 

在开发JavaWeb应用程序的过程中可能经常需要使用到SQL语句来访问数据库。为了屏蔽SQL注入带来的危险,在Java中通常使用PreparedStatement,使用预编译的SQL语句。预编译的SQL语句是那些包含?的语句,使用PreparedStatement可以让数据库预先编译这些SQL模板,只有调用的时候套用必须的参数即可。

 

SQL文件的存放位置

那么在JavaWeb项目中预编译的SQL语句到底放在那里呢?

 

放在Java代码里肯定是不好的,为什么,有两点,第一,SQL语句放在Java代码里

太难看可,有不好的味道(参看Refactor),第二,每次SQL语句变更(可能经常发生)

都需要编译这些Java代码,比较烦。

 

那么SQL语句到底放在那里呢?根据这么多年的开发经验SQL文通常可以放在classes目录

下的文件中,存放SQL语句的文件有三种类型:properties文件,xml文件和txt文件。

 

在详细讨论文件格式之前,我们先讨论以下如何在Java类中得到这些文件的引用,以便从中得到需要的SQL语句。

 

使用Class的getResourceAsStream方法可以获得对文件引用的InputStream。例如:文件目录结构:

src

    com

       jpleasure

          dao

                SomeDao.java

                SomeDao.properties

                             SomeDao.xml

                                      SomeDao.sql

// properties

public class SomeDao{

         public InputStream getInputStream() {                                                                                          

this.getClass().getClassLoader().

getResourceAsStream("com/jpleasure/dao/SomeDao.properties");

         }

}

 

// xml

public class SomeDao{

         public InputStream getInputStream() {

                  this.getClass().getClassLoader().

getResourceAsStream("com/jpleasure/dao/SomeDao.properties");

         }

}

 

// txt(.sql)

public class SomeDao{

         public InputStream getInputStream() {

                   this.getClass().getClassLoader().

getResourceAsStream("com/jpleasure/dao/SomeDao.properties");

         }

}

 

Propertis文件

Properties 文件是Java支持的标准的属性文件(相当于Windows对ini文件的支持)。

 

Properties 文件的格式为:

 

# 注释

# 定义key,并且与key对应的值为value

key = value

 

可以使用java.util.Properties类来包装properties文件,使用如下

Properties props = new Properties();

try {

         props.load(this.getInputStream());

} catch(IOException ioex) {

         // 文件不存在,或者格式问题等

}

String value = props.getString("key")

 

注意上述格式中value不能换行,要想换行必须使用转义字符“/”。

 

在存储SQL的时候我们使用如下的格式,例如:

 

# 某业务,某操作SQL

xxx_0001 = select * from dual

 

# 某业务,其他操作SQL

xxx_0002 =  /

select      /

         *    /

from       /

         dual

 

使用Properties文件的优点是:Java内置支持布需要手写文件解析代码,另外使用也非常简单。

缺点是:SQL语句不能直接编写,需要追加转义字符"/",无法将这样的SQL语句直接拷贝到数据库客户端中运行。

 

XML文件

使用XML文件保存SQL比较常用的格式为:

<sqls>

         <sql id=”xxx_0001”>

                   Select

*

from   

dual   <!-- 文件注释  -->

</sql>

         <sql id=”xxx_0001”>

                   …

</sql>

        

</sqls>

 

使用XML格式的文件保存SQL需要自己写文件解析代码,由于Java对XML提供了内置的支持,并且第三方的开源库也很多,并且非常容易使用所以从xml文件中解析SQL语句也没有什么困难。以下以jdom为例讲解如何解析上述的XML格式的SQL文件。

 

protected Map analysis() {

 

                   Map map = new HashMap();

 

                   DOMBuilder builder = new DOMBuilder();

                   Document doc = null;

                   try {

                            // 解析XML文件

                            doc = builder.build(this.getInputStream());

 

                            // 获得根节点: <sqls>

                            Element element = doc.getRootElement();

 

                            // 获得所有根节点的子节点: <sql>节点列表

                            List sqlNodeList = element.getChildren("sql");

                            for (int i = 0; i < sqlNodeList.size(); i++) {

                                     Element sqlNode = (Element) sqlNodeList.get(i);

                                     // 获得SQL语句ID

                                     String id = sqlNode.getAttribute("id").getValue();

                                     // 获得SQL语句内容

                                     String sql = sqlNode.getTextTrim();

                                     map.put(id, sql);

                            }

                   } catch (JDOMException e) {

                            e.printStackTrace();

                   }

                   return map;

         }

 

使用XML文件格式保存SQL语句据的时候需要注意,SQL语句中的大于(>)小于(<)和XML文件的格式冲突,有两种解决方法,

第一:使用全角的大于(>)小于(<)号。

第二:使用<![CDATA[    ]]>来包围所有的内容。

 

另外,通常情况下(不使用<![CDATA[    ]]>的时候)SQL的注释只能使用XML的注释格式(<!-- -->)。

 

使用XML格式的文件的有点:SQL语句可以正常书写,文件解析相对简单。

缺点:大于号,小于号的冲突;无法添加SQL注释(通常只能使用XML格式的注释)

 

TXT文件(以.SQL为后缀)

我们先说一下TXT文件(.sql文件)的格式

 

------------------------------------

--@ SQL-1

------------------------------------

SELECT

    SYSDATE

FROM

    DUAL(SQL)

   

------------------------------------

--@ SQL-2

-- 某某用途的SQL文

------------------------------------

SELECT

    SYSDATE, ROWID   -- 某某字段

FROM

    DUAL(SQL)         -- 某某表

 

使用txt格式的文件,非常的简单,和一般的写SQL语句一样,可以使用任何的SQL标准语法。只是有一个地方需要注意,就是每个SQL语句的头注释的地方加上一行特殊的内容用来标记SQL语句的ID:

--@ SQL-1

 

这样的文件解析比较困难,但是也不是不能做,解析代码如下:

         protected Map analysis() {

 

                   Map sqlMap = new HashMap();

 

                   String id = null;

                   StringBuffer sql = new StringBuffer();

 

                   if (this.getInputStream() != null) {

                            BufferedReader sqlFileReader = null;

                            try {

                                     sqlFileReader = new BufferedReader(

                                                        new InputStreamReader(this.getInputStream()));

                                     String currentLine = null;

 

                                     // 逐行读取文件内容

                                     while ((currentLine = sqlFileReader.readLine()) != null) {

 

                                               // 发现新的SQL语句,将已经发现的SQL语句放在SQL容器中

                                               if (currentLine.startsWith("--@")) {

                                                        if (id != null) {

                                                                 sqlMap.put(id, sql.toString());

                                                                 id = null;

                                                                 sql = new StringBuffer();

                                                        }

                                                        id = currentLine.substring("--@".length()).trim();

                                               } else if (currentLine.startsWith("--")) {

                                                        // 不读取注视行

                                                        continue;

                                               } else {

                                                        // 非注释,ID行

 

                                                        // 去掉SQL语句行的末尾注视

                                                        if (currentLine.length() > 0) {

                                                                 int commentsIndex = currentLine.indexOf("--");

                                                                 if (commentsIndex > 0) {

                                                                           currentLine = currentLine.substring(0,

                                                                                             commentsIndex);

                                                                 }

                                                                 // 将换行符替换为空格

                                                                 sql.append(currentLine + " ");

                                                        } else {

                                                                 // 将换行符替换为空格

                                                                 sql.append(" ");

                                                        }

 

                                               }

                                               currentLine = null;

                                     }

                                     if (id != null) {

                                               sqlMap.put(id, sql.toString());

                                     }

 

                            } catch (IOException ioex) {

                                     ioex.printStackTrace();

                            } finally {

                                     if(sqlFileReader != null) {

                                               try {

                                                        sqlFileReader.close();

                                               } catch (IOException e) {

                                                       

                                               }

                                     }

                            }

                   }

                   return sqlMap;

         }

 

使用TXT格式的文件的有点:SQL语句书写非常方便,可以拷贝出来直接运行,可以使用标准的SQL注释格式。

缺点:每个SQL语句必须添加特殊的ID标志(相对与Properties和xml来说可能也不算是缺点),解析困难,需要较强的文本接卸的能力。

 

通用SQL文件读取库

如何设计一个同时支持三种文件格式的SQL文件读取库?

 

 

首先我们抽象出一个SqlManager的接口,它提供通过Key获得对应SQL语句的操作。代码为:

public interface SqlManager {

         /**

          * 获取指定Key的SQL语句

          *

          * @param key

          *            SQL语句的Key值

          * @return SQL语句内容

          * @throws SqlMgntException

          *             无法取得SQL语句时抛出此异常。

          */

         public String getSql(String key) throws SqlMgntException;

}

 

然后使用一个抽象基类,来定义通用的属性和操作,代码为:

public abstract class AbstractSqlManager implements SqlManager {

 

         /* SQL文件输入流 */

         private final InputStream is;

 

         /**

          * SQL文件输入流获取方法。

          *

          * @return SQL文件输入流

          */

         public InputStream getInputStream() {

                   return is;

         }

 

         /**

          * 默认构造方法

          *

          * @param is

          *            SQL文件输入流

          */

         public AbstractSqlManager(InputStream is) {

                   this.is = is;

         }

 

         /* SQL语句容器 */

         private Map sqlContainer = null;

 

         /* 同步KEY */

         private final Object syncKey = new Object();

 

         /**

          * 通过SQL语句ID获取SQL语句内容。

          *

          * @param key

          *            SQL语句ID

          * @return SQL语句

          */

         public String getSql(final String key) throws SqlMgntException {

                   synchronized (syncKey) {

                            if (sqlContainer == null) {

                                     this.sqlContainer = initContainer();

                            }

                   }

                   return (String) sqlContainer.get(key);

         }

        

         /**

          * 抽象的模板方法,用来解析不同类型的SQL文件。

          * @return 配对的SQL内容

          */

         protected abstract Map initContainer();

 

}

 

注意其中的抽象方法:

protected abstract Map initContainer();

通过这个抽象方法把SQL文件的解析交给了具体的实例(模式参看:模板方法)

 

三个具体的SqlManager类我们不必具体说了,都是对上述抽线的解析方法的实现。

 

工厂类可以根据对应文件的后缀明创建对应的SqlManager。代码为:

public class SqlManagerFactory {

 

         /* XMl文件类型 */

         public static final String TYPE_XML = ".xml";

 

         /* SQL文件类型 */

         public static final String TYPE_SQL = ".sql";

 

         /* 属性文件类型 */

         public static final String TYPE_PROP = ".properties";

 

         // begin ma.zhao@dl.cn 2006/03/09

         // add singleton map for SqlManager

 

         private static Map sqlManagerContainer = new HashMap();

 

         // end ma.zhao@dl.cn 2006/03/09

 

         /**

          * 创建对应的SqlManager实现类

          *

          * @param filePath

          *            SQL文件相对路径和文件名

          * @return

          */

         public static SqlManager createSqlManager(String filePath) throws SqlMgntException {

                   SqlManager manager = null;

                   synchronized (sqlManagerContainer) {

 

                            manager = (SqlManager) sqlManagerContainer.get(filePath);

                           

                            // 如果SqlManager不存在,则根据文件初始化SqlManager,

                            // 并且将它放在SqlManager容器中

                            if (manager == null) {

                                    

                                     InputStream is = SqlManagerFactory.class.getClassLoader()

                                                        .getResourceAsStream(filePath);

                                    

                                     if(is == null) {

                                               throw new SqlMgntException(

"Sql File Not Fount! Input file name path is:" + filePath);

                                     }

                                    

                                     if (filePath.endsWith(TYPE_XML)

                                                        || filePath.endsWith(TYPE_XML.toUpperCase())) {

                                               manager = new SqlManagerXmlImpl(is);

                                     } else if (filePath.endsWith(TYPE_SQL)

                                                        || filePath.endsWith(TYPE_SQL.toUpperCase())) {

                                               manager = new SqlManagerSqlImpl(is);

                                     } else if (filePath.endsWith(TYPE_PROP)

                                                        || filePath.endsWith(TYPE_PROP.toUpperCase())) {

                                               manager = new SqlManagerPropImpl(is);

                                     } else {

                                               throw new SqlMgntException(

"Sql File Type Not Support, Input file path is:" + filePath);

                                     }

                                    

                                     //

                                     if (manager != null) {

                                               sqlManagerContainer.put(filePath, manager);

                                     }

                            }

                   }

                   return manager;

         }

}

注意上述代码可以控制每个对应的SQL文件始终只有一个对应的SqlManager,不会对同一个文件创建多个SqlManager类。

 

所有上述过程中的异常都以SqlMgntException的方式向上抛出,代码为:

public class SqlMgntException extends Exception {

 

         /**

          *

          */

         private static final long serialVersionUID = 1L;

 

         public SqlMgntException() {

                   super();

                   // TODO Auto-generated constructor stub

         }

 

         public SqlMgntException(String message, Throwable cause) {

                   super(message, cause);

                   // TODO Auto-generated constructor stub

         }

 

         public SqlMgntException(String message) {

                   super(message);

                   // TODO Auto-generated constructor stub

         }

 

         public SqlMgntException(Throwable cause) {

                   super(cause);

                   // TODO Auto-generated constructor stub

         }

}

 

优化的方向,

1 初始话加载所有的SQL语句

         程序运行之初,将所有的SQL语句装载在内存中。

 
WPF C# 保存DataGrid数据到SQL数控的四种方法 方法一:用CommandBuilder前提条件:DataGrid中的数据是从SQL数据库中获取的,而不是从其他地方导入的(具体原因不知);它只能处理一个表;底层数据库表必须有主键或唯一键;SqlAdapter的SelectCommand属性必须有一个包含主键列的查询;string connString = @"Server=localhost\SQLEXPRESS;Database=StaffAd... 阅读详情

相关推荐

Spark-SQL数据的加载与保存|加载数据|保存数据|默认数据源

通用的加载和保存 spark.read.load 是加载数据的通用方法 df.write.save 是保存数据的通用方法 加载数据 直接加载数据 spark.read.json("/opt/module/spark-local/examples/src/main/resources/people.json").show format指定加载数据类型 spark.read.fo...

SmallScorpion 677

java db保存在哪里_Java编程 – SQL语句应该存储在哪里?

JDBC兼容的应用程序应该在哪里存储其SQL语句,为什么?到目前为止,我设法找出了这些选项:>在业务对象中进行硬编码>嵌入在SQLJ条款中>封装在单独的类中,例如Data Access Objects>元数据驱动(解耦对象模式从数据模式 –描述它们之间的映射元数据)>外部文件(例如属性或资源文件)>存储过程每个人的“优点”和“缺点”是什么?SQL代码应该被视为“...

weixin_29228781的博客 1087

将SQL语句集成到Java中的技术指南

在Java中定义和存储SQL语句通常涉及字符串变量的使用。可以通过直接赋值的方式存储静态SQL语句:如果SQL语句会动态变化,可以使用或来拼接字符串,以构建复杂的查询:SQL注入是一种常见的攻击手段,攻击者可以通过在输入的SQL语句中嵌入恶意SQL代码片段,以此来控制数据库。

weixin_34163588的博客 433

Java项目怎么定位到SQL语句

Java项目怎么定位到SQL语句 在Java项目开发过程中,定位到执行的SQL语句是调试和优化数据库操作的重要环节。本文将介绍几种常用的方法来帮助开发者定位SQL语句,并提供代码示例以及甘特图来展示整个流程。 1. 使用日志记录 在Java项目中,可以通过配置日志记录SQL语句来定位执行的SQL。常用的日志框架有Log4j...

weixin_41541979的博客 243

ESP8266+Mixly+MIXIO物联网实战:用色盘控制WS2812 RGB灯(附完整代码)

本文详细介绍了如何利用ESP8266微控制器、Mixly图形化编程工具与MIXIO物联网平台,快速构建一个可通过网页色盘远程控制WS2812 RGB智能灯带的实战项目。内容涵盖硬件接线、平台配置、代码编写与调试全流程,旨在帮助物联网爱好者与初学者轻松实现创意灯光应用,掌握智能硬件开发的核心技能。

gin88的博客 261

java SQL配置文件在哪

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Java SQL配置文件的介绍与示例 在Java开发中,尤其是涉及到数据库操作时,配置文件的设置是不可或缺的一环。通过配置文件,开发者可以更加灵活地管理数据库连接信息,从而提高应用程序的可...

weixin_42052924的博客 286

【TI毫米波雷达】IWR6843AOPEVM-G与DCA1000EVM实战:从硬件连接到数据流解析

本文详细解析了TI毫米波雷达开发套件IWR6843AOPEVM-G与DCA1000EVM的硬件连接、模式配置及数据流处理全流程。针对官方手册中的常见配置错误,提供了避坑指南和实测验证的正确设置方法,包括开关配置、网络参数等关键步骤。通过mmWave Studio软件配置雷达参数,并深入解析数据采集与处理流程,帮助开发者高效实现毫米波雷达应用开发。

weixin_30653023的博客 368

java编译sql存过_在 Java 中如何更高效地存储和管理 SQL 语句?

【编者按】还在为管理 Java 代码中的 SQL 语句而烦恼吗?让 Zemian 帮你摆脱困境吧!本文系 OneAPM 工程师编译整理注意:使用java.util.Properties#loadFromXML其实会更简单!如果使用的是普通的、没有任何外部类库的 Java JDBC,那么就必须得自己去管理 SQL 语句。很不幸的是,Java String 并不支持多行结构,所以开发者必须使用许多引号...

weixin_28707365的博客 208

VMware 15 虚拟机安装Ubuntu 18.04

这几年在自动化、计算机之间游来游去,最近又要做机器学习相关的课题,14年做的虚拟机实在不堪重用了,OK,我们重新开始。 VMware的安装就不再赘述了,目前最新版本是15.0.2,官方下载地址: https://my.vmware.com/en/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/15_0...

略懂 2万+

即插即用系列(代码实践)| 2025 Strip R-CNN:大尺寸条形卷积——遥感目标检测新SOTA,专治细长目标(桥梁、船只)

摘要: 论文《Strip R-CNN: Large Strip Convolution for Remote Sensing Object Detection》针对遥感图像中细长目标(如桥梁、道路)检测难题,提出创新性解决方案。通过设计StripBlock模块,将传统方形卷积核替换为大尺寸条形卷积(水平1×19与垂直19×1组合),有效捕获长距离空间特征,同时减少背景噪声。结合CenterPooling增强目标中心定位,该模块可即插即用至现有网络,显著提升遥感检测任务(如DOTA数据集)的精度。代码已开源,

分享顶会顶刊论文即插即用模块 189

在SQL Server中保存和输出图片

介绍     有时候我们需要保存一些binary data进数据库。SQL Server提供一个叫做image的特殊数据类型供我们保存binary data。Binary data可以是图片、文档等。在这篇文章中我们将看到如何在SQL Server中保存和输出图片。  建表    为了试验这个例子你需要一个含有数据的table(你可以在现在的库中创建它,也可以创建一个新的数

cashcho的专栏 2427

【滚雪球学数学建模】第4.1节·概率与统计建模,一文搞懂!

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1348

项目中SQL语句文件保存及提取方法

第十九章 SQL文保存方法@http://blog.youkuaiyun.com/struts2/article/details/1745050在开发JavaWeb应用程序的过程中可能经常需要使用到SQL语句来访问数据库。为了屏蔽SQL注入带来的危险,在Java中通常使用PreparedStatement,使用预编译的SQL语句。预编译的SQL语句是那些包含?的语句,使用Prepare...

weixin_34216196的博客 1915

ESP32-C3入门教程 蓝牙篇①——基于Blufi 的 WiFi 智能配网

文章目录一、前言二、WiFi配网方式三、快速运行四、运行效果五、ESP32-C3程序流程5.1 主程序5.2 回调函数5.3 SmartConfig线程5.4 流程图六、关键函数6.1 设置SmartConfig的协议类型6.2 启动SmartConfig6.3 停止SmartConfig七、其他八、参考 一、前言 本文基于VS Code IDE进行编程、编译、下载、运行等操作 基础知识点请查阅:ESP32-C3入门教程 基础篇①——基于VS Code构建Hello World 二、WiFi配网方式 W

7764

C++实现复制粘贴文本功能

要实现这个功能,我们需要使用操作系统提供的函数来操作剪贴板。在Windows操作系统中,我们可以使用Windows API函数来访问剪贴板。总结起来,使用C++实现复制和粘贴文本功能涉及使用操作系统提供的API函数来操作剪贴板。在本篇文章中,我将向您展示如何使用C++编程语言实现复制和粘贴文本的功能。我们将使用操作系统提供的API来进行剪贴板操作,并编写相应的代码来完成这个任务。如果您使用的是Linux操作系统,您需要使用适当的库和函数来访问剪贴板。函数中,我们首先将一个字符串复制到剪贴板中,然后使用。

PixelDyno的博客 1233

【QT下SQL记录集保存方法】

qt 通用 sql查询记录集的函数

shangwoo的博客 1477

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

SQL Server如何保存DOC文

用VFP的人,有专业的,有非专业了,很多人其实是小白,问出的问题是小白,如果问题不对,我们引导他们问正确的问题。无论如何请不要嘲笑他们说帮助都不看,这么简单的问题都不会,嘲笑别人不行,而无法提出建设性答案,是很low的。无论是VFP,还是JS,还是C,只要能混合起来,都可以发表。微信小程序,微信公众号开发,H5 APP开发,Extjs BS开发,VFP面向对象进阶,VFP中间层开发。"VFP极简混合开发,少写代码、快速出活,用VFP,但不局限于VFP,各种语言混合开发"6、将本地内容升迁到远程视图中去。

加菲猫的VFP 68

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

《SQL—“设计表时保存失败的解决方法”》

作者:龙文浩 撰写时间:2019年01月21日 开发工具与关键技术:SQL 程序员在操作数据库时,有一位程序员在对SQL的表的主键设计成标识规范为是的时候,他点保存,结果显示如下信息: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190329091611866.?x-oss-process=image/watermark,type_ZmFuZ3poZW5...

龙文浩的博客 347

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

PLSQL中动态SQL文运用

 两种情况:      一:简单的动态SQL文,其通过字符串拼起来的。 执行方式:EXECUTE IMMEDIATE vc_sql 后面也可以跟上INTO 将检索到的值保存到变量中去。例子: vc_sql_sub_1  VARCHAR(1024)           := ;        nm_datacount_sub    NUMBER              := 0;

jjaihua的专栏 1320

SQL查询结果的保存方式

SQL查询结果的保存方式 在我们日常工作中,经常需要到数据库服务器上去查询我们需要的数据,并将其保存下来到本地进行数据处理。怎样才能将查询的数据进行有效的保存呢?,在此我总结一些过去保存数据时所遇到的情况,以供大家在数据保存时参考。 在查询结果不大(小于10M)的情况下,特别是远程连接操作的情况下,将查询结果全选并另存到TXT文档的方法很适用。这种保存方法可以保证提...

weixin_34110749的博客 3209

保存您SQL执行计划

In the previous articles of this series (see the index at bottom), we discussed the characteristics of the SQL Execution Plan from multiple aspects, that include the way the SQL Execution Plan is...

culuo4781的博客 562
上一篇: 第二十五章 离线并发与锁机制
下一篇: 从技术的角度审视项目计划
struts2
博客等级 码龄19年 885粉丝 103原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值