JDBC编程:2(数据库的基本操作)
数据库的基本操作
查询数据
在开始前先简单地介绍一下什么是静态SQL和动态SQL:
静态SQL,在编译阶段就可以确定数据库要做什么事情。在某种高级语言中,如果嵌入了SQL语句,而这个SQL语句的主体结构已经明确,例如在Java的一段代码中有一个待执行的SQL“select * from product where product_price>5”,在Java编译阶段,就可以将这段SQL交给数据库管理系统去分析,数据库软件可以对这段SQL进行语法解析,生成数据库方面的可执行代码,这样的SQL称为静态SQL。
动态SQL,而如果嵌入的SQL没有明确给出,如在Java中定义了一个字符串类型的变量sql:String sql;,然后采用PreparedStatement对象的execute方法去执行这个sql,该sql的值可能等于从文本框中读取的一个SQL或者从键盘输入的SQL,但具体是什么,在编译时无法确定,只有等到程序运行起来,在执行的过程中才能确定,这种SQL叫做动态SQL。
例如每一种数据库软件都有能够执行SQL语句的界面,那个界面接收的SQL就是动态SQL,因为数据库厂商在做这个界面时,并不知道用户会输入哪些SQL,只有在该界面执行后,接收了用户的实际输入,才知道SQL是什么。
另外还要注意一点,在SQL中如果某些参数没有确定,如"select * from product where product_price>? and product_price<?",这种语句是静态SQL,不是动态SQL,虽然个别参数的值不知道,但整个SQL的结构已经确定,数据库是可以将它编译的,在执行阶段只需将个别参数的值补充进来即可。
转载于:https://www.cnblogs.com/FengzZ/p/4890045.html
简单地说就是:
静态sql:语句类型在编程时候必须是确定好的,可以还有某些参数还未确定;
动态sql:语句类型可以在运行期间指定,可以在运行过程中键盘或其他途径输入SQL语句。
使用Statement实例执行静态SELECT语句查询记录
例:
package mydatabase;import java.sql.*;public class Test2 {private static final String url = "jdbc:mysql://localhost:3306/study";private static final String user = "root";private static final String password="xxx";static {try{//注册JDBC驱动程序Class.forName("com.mysql.cj.jdbc.Driver");}catch (ClassNotFoundException e){e.printStackTrace(); //输出捕获到的异常信息}}public static void main(String[]args){try{Connection connection = DriverManager.getConnection(url,user,password);//获得数据库连接Statement statement = connection.createStatement(); //createStatement()方法创建并返回一个Statement实例String sql = "select * from product"; //定义静态SELECT语句ResultSet resultSet = statement.executeQuery(sql); //执行静态SELECT语句while(resultSet.next()){ //遍历结果集,通过next()方法可以判断是否还存在符合条件的记录String name = resultSet.getString(1); //通过列索引获得指定列的值int price = resultSet.getInt(3); //通过列索引获得指定列的值System.out.println(name+" "+price); //打印表中信息}statement.close(); //立即释放Statement实例占用的数据库和JDBC资源connection.close(); //立即释放Connection实例占用的数据库和JDBC资源,即关闭数据库连接}catch (SQLException e){e.printStackTrace();}}
}
结果:
通过PreparedStatement实例执行动态SELECT语句查询记录
例:
package mydatabase;import java.sql.*;public class Test4 {private static final String url = "jdbc:mysql://localhost:3306/study";private static final String user = "root";private static final String password = "xxx";static {try{Class.forName("com.mysql.cj.jdbc.Driver");}catch (ClassNotFoundException e){e.printStackTrace();}}public static void main(String[]args){try{Connection connection = DriverManager.getConnection(url,user,password);//获得数据库连接Statement statement = connection.createStatement(); //createStatement()方法创建并返回一个Statement实例String sql = "select *from product"; //定义静态SELECT语句PreparedStatement preparedStatement = connection.prepareStatement(sql); //预处理动态INSERT语句ResultSet resultSet = preparedStatement.executeQuery(); //执行动态INSERT语句ResultSetMetaData metaData = resultSet.getMetaData(); //获得ResultSetMetaData类的实例System.out.print(metaData.getColumnName(1)+" "); //通过列索引获得指定列的值System.out.print(metaData.getColumnName(2)+" ");System.out.println(metaData.getColumnName(3)); //通过列索引获得指定列的值while(resultSet.next()){String name = resultSet.getString(1);String type = resultSet.getString(2);int price = resultSet.getInt(3);System.out.println(name+" "+type+" "+price);}resultSet.close();preparedStatement.close();connection.close();}catch (SQLException e){e.printStackTrace();}}
}
结果:
插入数据
通过Statement实例执行静态INSERT语句添加单条记录
例:
package mydatabase;import java.sql.*;public class Test5 {private static final String url = "jdbc:mysql://localhost:3306/study";private static final String user = "root";private static final String password = "xxx";static {try{Class.forName("com.mysql.cj.jdbc.Driver");}catch (ClassNotFoundException e){e.printStackTrace(); //输出捕获的异常信息}}public static void main(String[]args){try{Connection connection = DriverManager.getConnection(url,user,password);Statement statement = connection.createStatement();String sql = "insert into product (product_name,product_type,product_price,regist_date) " +"values('内存卡','电子用品',100,'2020-6-3'),('256G硬盘','电子用品',500,'2020-6-3')";statement.executeUpdate(sql); //执行INSERT语句statement.close();connection.close();System.out.println("插入数据成功!");}catch (SQLException e){e.printStackTrace();}}
}
结果:
通过PreparedStatement实例执行动态INSERT语句批量添加记录
例:
package mydatabase;import java.sql.*;public class Test6 {private static final String url = "jdbc:mysql://localhost:3306/study";private static final String user = "root";private static final String password = "xxx";static {try{Class.forName("com.mysql.cj.jdbc.Driver");}catch (ClassNotFoundException e){e.printStackTrace();}}public static void main(String[]args){try{Connection connection = DriverManager.getConnection(url,user,password);String [][] records = {{"雨伞","生活用品","20","2020-6-3"},{"风扇","生活用品","150","2020-6-3"}};String sql = "insert into product(product_name,product_type,product_price,regist_date) values(?,?,?,?)";//定义动态INSERT语句PreparedStatement preparedStatement = connection.prepareStatement(sql); //预处理动态INSERT语句preparedStatement.clearBatch(); //清空Batchfor (int i=0;i<records.length;i++){preparedStatement.setString(1,records[i][0]); //为参数赋值preparedStatement.setString(2,records[i][1]); //为参数赋值preparedStatement.setInt(3, Integer.valueOf(records[i][2]));//为参数赋值preparedStatement.setDate(4, Date.valueOf(records[i][3]));//为参数赋值preparedStatement.addBatch(); //将INSERT语句添加到Batch中}preparedStatement.executeBatch(); //批量执行Batch中的INSERT语句preparedStatement.close();connection.close();System.out.println("插入数据成功!");}catch (SQLException e){e.printStackTrace();}}
}
结果:
相关文章:

[Asp.net 5] Options-配置文件(2)
很久之前写过一篇介绍Options的文章,2016年再打开发现很多变化。增加了新类,增加OptionMonitor相关的类。今天就对于这个现在所谓的新版本进行介绍。 老版本的传送门([Asp.net 5] Options-配置文件之后昂的配置)。 首先上一个图&a…

android-sdk-windows版本号下载
Android SDK 4.0.3 开发环境配置及执行 近期又装了一次最新版本号的ADK环境 眼下最新版是Android SDK 4.0.3 本文的插图和文本尽管是Android2.2的 步骤都是一样的,假设安装的过程中遇到什么问题,能够留言,我会尽快回复! 系统环境的…

vs code搭建Django环境
在网上找了很多博客,看了vs code的官方文档,最终拼凑起来,终于搭建起来了djangode开发虚拟环境(win10下) 一、新建项目文件夹 F:\Python\temp\django_demo(例子) 二、在项目文件夹创建虚拟pytho…

Marvelous Designer衣袖设计教程
大小解压后:2.96G 持续时间3h 28m 包含项目文件 1280X720 MP4 语言:英语中英文字幕(根据原英文字幕机译更准确) 标题:技能分享——卓越设计师大师班(袖子) 信息: 在我的课程中,精彩设计师大师班(袖子)。在本课程中&…

Mybatis入门:1(Mybatis框架的环境搭建)
Mybatis框架的环境搭建 一.创建maven工程并导入坐标 导入坐标: <dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version></dependency><d…

html表单的创建和css的构成
产品参数 <h2>LIFAair LA500参数表</h2><table><tr><td>测试数目</td><td>单位</td><td>数据</td></tr><tr><td>颗粒物CADR</td><td>m<sup>3</sup>/h</td><t…

Gartner2014年魔力象限(商业智能和分析平台)
转载于:https://www.cnblogs.com/crsn/p/4271377.html

@SupperssWarnings注解
SupperssWarnings注解:压制、控制警告 SuppressWarnings(“rawtypes”) 是什么含义 SuppressWarnings压制警告,即去除警告 rawtypes是说传参时也要传递带泛型的参数 SuppressWarnings(“unchecked”) unchecked 执行了未检查的转换时的警告 SuppressWarn…

虚幻引擎C++编程游戏开发基础
流派:电子学习| MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz 语言:英语中英文字幕(根据原英文字幕机译更准确)|大小解压后:23.8 GB |时长:44h 59m 学习C编程和游戏开发基础和虚幻引擎 你会学到什么 通过简单的例子和插…

Mybatis入门:3(动态sql)
动态sql语句 if标签 基本使用 一.在ProductDao接口中创建一个查询方法findByType import com.domain.Product;import java.util.List;public interface ProductDao {/*** 根据类型来查找* param product* return*/Product findByType(Product product); }二.在映射配置文件…

javaweb学习总结(二十三)——jsp自定义标签开发入门
一、自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码。 二、自定义标签开发和使用 2.1、自定义标签开发步骤 1、编写一个实现Tag接口的Java类(标签处理器类) 1 package me.gacl.web.tag;2 3 import java.io.IOException;4 5 import javax.servlet.http.HttpServle…

Java数组的三种声明方式
具体的细节大家可以不用先去了解,这涉及到很多知识,只要记住输出的时候,先导包,然后再利用Arrays.toString(arr)输出就行了。如:先定义好一个长度为4的新数组,此时数组为空,使用arr[ ]数组下标来进行逐个赋值。那我们定义好数组之后,就理所应当的对声明好的数组进行赋值。那么对于未涉及过编程的小伙伴,看到这可能会蒙了。原因就是我们sout(arr)时,输出的是这个数据的内存地址,而不是真实的数据。使用数组: 只需要一个变量,然后数组中存很多的数据, 其实可以把数组想成 一个容器。

Math: Math.atan() 与 Math.atan2() 计算两点间连线的夹角
Math.atan2()函数返回点(x,y)和原点(0,0)之间直线的倾斜角.那么如何计算任意两点间直线的倾斜角呢?只需要将两点x,y坐标分别相减得到一个新的点(x2-x1,y2-y1).然后利用他求出角度就可以了.使用下面的一个转换可以实现计算出两点间连线的夹角.然而,Math.atan()只能返回一个角度值,因此确定他的角度非常的复杂,而且,90度和270度的正切是无穷大,因为除数为零,我们也是比较难以处理的~!angel为一个角度的弧度值,slope为直线的斜率,是一个数字,这个数字可以是负的。

@RequiredArgsConstructor详解&@AllArgsConstructor和@RequiredArgsConstructor区别
RequiredArgsConstructor是Lombok的一个注解,简化了我们对@Autowired书写,我们在写Controller层或者Service层的时候,总是需要注入很多mapper接口或者service接口,如果每个接口都写上@Autowired,这样看起来就会很繁琐,@RequiredArgsConstructor注解可以代替@Autowired注解。

RDIFramework.NET ━ 9.8 用户权限管理 ━ Web部分
RDIFramework.NET ━ .NET快速信息化系统开发框架 9.8 用户权限管理 -Web部分 在实际应用中我们会发现,权限控制会经常变动,如:需要调整角色的分配,需要收回与授予某些角色、用户可访问的模块(菜单)与相应…

python并发
python并发 (这部分还需要改,先将就着看) Python 的 threading 模块引入了锁(Lock)。threading 模块提供了 Lock 和 RLock 两个类,它们都提供了如下两个方法来加锁和释放锁: acquire(blockingTr…

学会在Unity中创建一个Match-3益智游戏 Learn To Create a Match-3 Puzzle Game in Unity
MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确) |时长:48场讲座(6h 38m) |大小解压后:2.8 GB 含课程文件 游戏开发变得容易了。使用Unity学习C#并创建自…

Mybatis入门:2(xml形式的增删改查)
xml形式的增删改查 这里感觉没啥好讲的,照着代码自己敲一遍、认真再看看应该都懂的。 Maven工程坐标 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http:/…

NSDate见解
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { // NSDate *date [NSDate date]; // // NSDateFormatter *formatter [[NSDateFormatter alloc] init];// yyyy 年// MM 月// dd 日// HH 24小时 hh 12小时// mm 分钟// ss 秒钟…

秒杀系统架构设计
秒杀活动的技术挑战 1. 对现有网站业务造成冲击 秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必须会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。…

SpringBoot 2.x 使用 JWT(JSON Web Token)
一、跨域认证遇到的问题 由于多终端的出现,很多的站点通过 web api restful 的形式对外提供服务,采用了前后端分离模式进行开发,因而在身份验证的方式上可能与传统的基于 cookie 的 Session Id 的做法有所不同,除了面临跨域提交 c…

在Unity中制作4种不同的游戏
流派:电子学习| MP4 |视频:h264,1280720 |音频:AAC,48.0 KHz 语言:英语中英文字幕(根据原英文字幕机译更准确)|大小解压后:8.6 GB 含课程素材 |时长:15h 3m Unity 制作4款无代码手机游戏 Make 4 games in Unity with …

Spring学习笔记:1(初步认识概念)
Spring的三大主要特征 spring主要特征有三个:控制反转(IOC),依赖注入(DI)和面向切面(AOP)。 IoC:Inverse of Control(控制反转) 1.对控制反转的…

shell example01
条件判断 if [[ -e ${1} ]]; thenecho "$(tput setaf 2) found ${1} $(tput sgr0)"cat ${1} elseecho "$(tput setaf 1) not found ${1} $(tput sgr0)"exit 1 fi//简化[[ -e ${1} && -e ${2} ]] && cat ${1} > ${2}//判断取反txt4.txti…

gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第一篇:安装配置gradle...
一个bug 一个脚印的叫你们用gradle。 1介于网络上的很多资料都是老的 不适用与现在的新版本gradle 尤其是有些gradle方法改名了老的用不了 2介于网上都是粘贴复制并且零碎我很蛋疼啊,走了很多歪路才弄出来,所以我弄一个完全完整的版本 3我不但会写gradle…

java的static关键字
java的static关键字 静态变量和静态方法 static关键字最基本的用法是: 1、被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来 2、被static修饰的方法属于类方法,可以通过类名.方法名直接引用&…

Spring学习笔记:2(IOC装配Bean之xml方式)
xml配置方式装配Bean 本文借鉴于:https://www.cnblogs.com/qdhxhz/p/6511887.html Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多)静态工厂实例化实例工厂实例化 代码如下: Bean1类(构造方法…

学习RPG Maker MZ开发创建并发布PC和移动端游戏
Complete RPG Maker MZ: Create and Publish for PC and Mobile 完整的RPG制造商MZ:为个人电脑和移动设备创建和发布 MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确…

CSS选择器总结
总结几种自己比较容易混淆的: 1. 后代选择器,写法是 E1 E2,如 ul li,选择的是所有后代,包括子后代、孙后代…; 2. 子选择器,写法 E1 > E2,只选择子后代,不包括孙后代元素…

OSChina 周六乱弹 —— 小明和网关超经典的故事~
2019独角兽企业重金招聘Python工程师标准>>> 周六,又到了瞎扯淡的时间了。周末,约会,男男女女,还有那啥那啥,你们懂得~ 男人和女人明显不同,这样才导致了异性相吸吗? 1. …