perl mysql dml_MySQL Connector执行SQL语句的三种方式

描述

当我们需要在Java程序中与数据库进行交互,可能首先想到的是使用某个ORM框架,因为ORM框架封装了一些实现细节,在使用上非常方便,并且一定程度上可以提升代码稳定性。

在ORM框架中,都会依赖MySQL Connector包,因为真正与数据库进行交互的是在MySQL Connector包里面实现。

5.x版本maven依赖:

mysql

mysql-connector-java

5.1.47

三种方式

MySQL Connector执行SQL语句主要有executeQuery,executeUpdate,execute等三种方式。

executeQuery

此方法执行Selec查询语句,通过ResultSet返回结果集。

private static void executeQuery() throws Exception{

Connection connection = null;

Statement statement = null;

ResultSet rs = null;

try {

connection = DriverManager.getConnection(url);

statement = connection.createStatement();

statement.setFetchSize(Integer.MIN_VALUE);

String sql = "select * from user";

rs = statement.executeQuery(sql);

int count=0;

while (rs.next()){

count++;

}

System.out.println("executeQuery count: " + count);

} catch (Exception e){

e.printStackTrace();

} finally {

close(connection,statement,rs);

}

}

executeUpdate

此方法执行Insert,Update,Delete语句,返回变更影响的行数。

private static void executeUpdate() throws Exception{

Connection connection = null;

Statement statement = null;

int updateCount = 0;

try {

connection = DriverManager.getConnection(url);

statement = connection.createStatement();

String sql = "update user set name='啊啊啊' where id = " + new Random().nextInt(999999);

updateCount = statement.executeUpdate(sql);

System.out.println("executeUpdate count: " + updateCount);

} catch (Exception e){

e.printStackTrace();

} finally {

close(connection,statement,null);

}

}

execute

当我们不知道来源SQL是Select查询还是Insert/Update/Delete更新时,可以统一使用excute()方法来执行SQL语句,此方法返回一个boolean值,如果返回true,表示执行的SQL语句为Select查询语句,此时可以通过Statement#getResultSet()方法来获取结果集;如果返回false,表示执行的时Insert/Update/Delete语句,此时可以通过Statement#getUpdateCount()来返回此次SQL执行对数据库影响的行数。

private static void executeForSelect() throws Exception{

Connection connection = null;

Statement statement = null;

ResultSet rs = null;

try {

connection = DriverManager.getConnection(url);

statement = connection.createStatement();

statement.setFetchSize(Integer.MIN_VALUE);

String sql = "select * from user";

if (statement.execute(sql)){

rs = statement.getResultSet();

}

int count=0;

while (rs.next()){

count++;

}

System.out.println("executeForSelect count: " + count);

} catch (Exception e){

e.printStackTrace();

} finally {

close(connection,statement,rs);

}

}

private static void executeForUpdate() throws Exception{

Connection connection = null;

Statement statement = null;

int updateCount = 0;

try {

connection = DriverManager.getConnection(url);

statement = connection.createStatement();

String sql = "update user set name='啊啊啊' where id = " + new Random().nextInt(999999);

if (!statement.execute(sql)){

updateCount = statement.getUpdateCount();

}

System.out.println("executeForUpdate updateCount: " + updateCount);

} catch (Exception e){

e.printStackTrace();

} finally {

close(connection,statement,null);

}

}

验证

执行测试:

public static void main(String[] args) throws Exception {

Long start = System.currentTimeMillis();

executeForSelect();

System.out.println("executeForSelect 耗时: " + (System.currentTimeMillis() - start) + " ms \n");

start = System.currentTimeMillis();

executeForUpdate();

System.out.println("executeForUpdate 耗时: " + (System.currentTimeMillis() - start) + " ms \n");

start = System.currentTimeMillis();

executeQuery();

System.out.println("executeQuery 耗时: " + (System.currentTimeMillis() - start) + " ms \n");

start = System.currentTimeMillis();

executeUpdate();

System.out.println("executeUpdate 耗时: " + (System.currentTimeMillis() - start) + " ms \n");

}

private static void close(Connection connection, Statement statement, ResultSet rs) throws Exception{

if (rs != null){

rs.close();

}

if (statement != null){

statement.close();

}

if (connection != null){

connection.close();

}

}

返回结果:

executeForSelect count: 4717924

executeForSelect 耗时: 4791 ms

executeForUpdate updateCount: 1

executeForUpdate 耗时: 6 ms

executeQuery count: 4717924

executeQuery 耗时: 4340 ms

executeUpdate count: 1

executeUpdate 耗时: 8 ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改软件许可证使用时间_阮一峰:为什么开源数据库改变许可证?

CockroachDB 是一个开源的分布式数据库,最近改变了代码授权,放弃了 Apache 许可证。许多开源数据库这一两年都改变了授权,比如 Confluent、Elastic 、MongoDB、Redis Labs、TimescaleDB。本文分析这种现象。一、CockroachDB 的许可证变更Cock…

mysql数据库设计三大范式_数据库设计三大范式详解

引言数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,…

Broadcast简单使用

Activity Service之间的通信单用intent有时候还是不能满足要求,毕竟intent只能在启动一个activity的时候传一点消息过去 这个时候就用到广播了,至此,四大组件Activity Broadcast Service ContentProvider中终于用过三个了。。。当然目前只是…

线程 sleep 取消_C/C++ 多线程机制

一、C/C多线程操作说明C/C多线程基本操作如下: 1. 线程的建立结束 2. 线程的互斥和同步 3. 使用信号量控制线程 4. 线程的基本属性配置 在C/C代码编写时,使用多线程机制,首先需要做的事情就是声明引用,具体如下:#inclu…

Windows + Ubuntu下JDK与adb/android环境变量配置完整教程

假设JDK和android sdk路径分别如下: D:\Program Files\Java\jdkD:\android-sdk 1.JDK环境变量配置JAVA_HOMED:\Program Files\Java\jdk path%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; classpath,;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar &a…

python制作界面怎么触发事件_python模拟事件触发机制详解

本文实例为大家分享了python模拟事件触发机制的具体代码,供大家参考,具体内容如下EventManager.py# -*- encoding: UTF-8 -*-# 系统模块from queue import Queue, Emptyfrom threading import *class EventManager:def __init__(self):"""…

python 格式化工具_小而美的 Python 格式化工具--black

Black号称不妥协的代码格式化工具,为什么叫不妥协呢?因为它检测到不符合规范的代码风格直接就帮你全部格式化好,根本不需要你确定,直接替你做好决定。它也是 requests 作者最喜欢的工具之一.使用非常简单,安装成功后&a…

常用英语短语收集1

1、are you fucking kiding me? 转载于:https://www.cnblogs.com/badboys/p/8729474.html

事务java_Java事务之一——Java事务的基本问题

Java中的事务处理有多简单?在使用EJB时,事务在我们几乎察觉不到的情况下发挥着作用;而在使用Spring时,也只需要配置一个TransactionManager,然后在需要事务的方法上加上Transactional注解就行了。Java的事务处理之所以…

seo模拟点击软件_浅谈百度SEO快排是什么、原理、如何判断及应对

前言:以前我说过不准备写这个快排,一是我自己的网站没有操作过所谓的快排 ,二是我并不能像网上很多写的揭秘百度快排(说实话,你都能揭秘的方法了,还真的很有用吗?真正懂的人都在低调赚money)。我只是站在一个小白角度…

冲刺no.4

项目:ccsu小助手 角色:用户 访问链接:http://47.93.57.6:8888/login/ 目的(Purpose) ccsu小助手是一款面向长沙学院所有学生、老师、学校部门、校园的账户信息输出类产品,部门可以通过和本系统负责人签订产品使用协议,申请集成使用该产品 对应网页使用权…

java web 开发基础_javaweb开发基础(一)

001使用MyEclispe建立web工程我的建立在D盘WebAPP这个目录下在myeclipse中启动Tomcat,在浏览器中输入http://localhost:8080/,如果不出意外的话,会出现白板,说明Tomcat启动成功。这篇文档则详细的说明了如何在MyEclipse下部署一个…

python如何处理视频_OpenCV-Python系列之视频处理入门

视频处理在OpenCV中处于极为重要的地位,目标实时跟踪等各种实时图像处理算法都是以视频为基础。从相机捕获视频首先我们来了解一下使用电脑自带的相机来进行捕获视频。通常,我们必须使用摄像机捕获实时流。OpenCV提供了一个非常简单的界面来执行此操作。…

100多年了,左右大脑的不对称性依然备受关注

来源:brainnews1,不对称的视角下的大脑偏侧化关于大脑不对称性的比较研究最早可以追溯到19世纪,但由于早期认为偏侧化为人类所独有,因此该领域的研究一度消失。这一领域在20世纪70年代重新出现,使我们了解到脑和行为的…

java-线程-生产者-消费者

概述 在Java中有四种方法支持同步,其中前三个是同步方法,一个是管道方法。 wait() / notify()方法 await() / signal()方法 BlockingQueue阻塞队列方法 PipedInputStream / PipedOutputStream wait() / notify()方法 public class Storage {private fina…

如何用python做计算软件_如何用Python写一个计算器软件 附带效果图

1 import tkinter #导入tkinter模块23 root tkinter.Tk()4 root.minsize(280,500)5 root.title(李蛟龙的计算器)678 #1.界面布局9 #显示面板10 result tkinter.StringVar()11 result.set(0) #显示面板显示结果1,用于显示默认数字012 result2 tkinter.StringVar() #…

BI之报表测试总结

报表测试总结: 1、测试准备工作: 数据准备 保证足够多的有效数据 清楚报表中涉及到的算法、公式 清楚业务功能接口 2、报表测试点 基本测试点:界面、控件、格式、布局、明显的数据错误、js报错、报表标题,报表整体风格,翻页&#…

经由因果分析,反驳AI监控学生上课,及辨别健康类谣言

来源:混沌巡洋舰想象这样一个场景,你和你心爱的女孩一起自习,你的理科好,于是你看着她听数学的网课时,有时露出困惑的表情,还有时会走神。然后等她听完,你再把你觉得她没有听懂的部分&#xff0…

python 连续三个数满足条件_计算满足条件的连续值数(Pandas Dataframe)

这是一个带有^{}-# https://stackoverflow.com/a/52718782/ Divakardef maxisland_start_len_mask(a, fillna_index -1, fillna_len 0):# a is a boolean arraypad np.zeros(a.shape[1],dtypebool)mask np.vstack((pad, a, pad))mask_step mask[1:] ! mask[:-1]idx np.fl…

java controller json_springMVC的controller层接收前端json数据

1.前端的操作:对象接收json数据方式:将所需要传的数据转化为json数据,并将这些数据以post方式传到后台的controller层,然后controller层接收json数据,并且是以对象的形式进行接收。这里面是springmvc自动控制将这些数据…