jdbc动态查询语句_Java修行第037天--JDBC技术
学习目标:
1.掌握JDBC概念
2.掌握JDBC常用接口和类的作用
3.掌握JDBC连接数据库的步骤
4.掌握JDBC操作数据库,以及资源关闭
练习代码
今天练习代码
properties文件使用:
封装的JDBC工具类
今日代码的重中之重
PreparedStatement的使用
第五章 JDBC 技术
1 JDBC 简介
(1) JDBC是什么
JDBC(Java DataBase Connectivity)java 数据库连接是 JavaEE 平台下的技术规范
定义了在 Java 语言中连接数据,执行 SQL 语句的标准,可以为多种关系数据库提供统一访问
(2) 数据库驱动程序是什么
数据库厂商对 JDBC 规范的具体实现
不同数据产品的数据库驱动名字有差异
在程序中需要依赖数据库驱动来完成对数据库的操作
(3)程序操作数据库流程
2 JDBC3.0 标准中常用接口与类
(1)Diver接口
Diver接口的作用是用来定义数据库驱动对象应该具备的一些能力,在程序中要连接数据库,必须先通过 JDK 的反射机制加载数据库驱动
类,将其实例化。不同的数据库驱动类的类名有区别
加载 MySql 驱动:Class.forName("com.mysql.jdbc.Driver");
加载 Oracle 驱动:Class.forName("oracle.jdbc.driver.OracleDriver");
(2)DriverManager 类
DriverManager 通过实例化的数据库驱动对象,能够建立应用程序与数据库之间建立连
接。并返回 Connection 接口类型的数据库连接对象
(2.1)DriverManager类的常用方法
getConnection(String jdbcUrl, String user, String password)
该方法通过访问数据库的 url、用户以及密码,返回对应的数据库的 Connection 对象。
(2.1)JDBC URL
与数据库连接时,用来连接到指定数据库的标识符.在URL中包括了该数据库的类型,地址,端口,库名称等信息
(3)Connection接口
Connection接口
Connection与数据库的连接(会话)对象.我们再通过该对象执行sql语句并返回结果
连接不同的数据库各有不同的区别
连接MySql数据库
Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database", "user",
assword");
连接 Oracle 数据库:
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");
连接 SqlServer 数据库:
Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port;
DatabaseName=database", "user", "password");
(3.1)常用的方法
createStatement():创建向数据库发送 sql 的 Statement 接口类型的对象。
preparedStatement(sql) :创建向数据库发送预编译 sql 的 PrepareSatement 接口类型的对象。
prepareCall(sql):创建执行存储过程的 CallableStatement 接口类型的对象。
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit() :在链接上提交事务。
rollback() :在此链接上回滚事务。
(4)Statement接口
用于执行静态SQL语句并返回他所生成结果 的对象
由createStatement创建 ,用于发送简单的SQL语句(不支持动态绑定)
(4.1)常用方法
execute(String sql):执行参数中的 SQL,返回是否有结果集。
executeQuery(String sql):运行 select 语句,返回 ResultSet 结果集。
executeUpdate(String sql):运行 insert/update/delete 操作,返回更新的行数。
addBatch(String sql) :把多条 sql 语句放到一个批处理中。
executeBatch():向数据库发送一批 sql 语句执行。
(5)PrepareStatement接口--具有绑定接口能力
继承于Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句PreparedStatement对象比statement对象的效率更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement
(5.1)常用方法
• addBatch()把当前 sql 语句加入到一个批处理中。
• execute() 执行当前 SQL,返回个 boolean 值
• executeUpdate()运行 insert/update/delete 操作,返回更新的行数。
• executeQuery() 执行当前的查询,返回一个结果集对象
以下方法在statement中并没有
• setDate(int parameterIndex, Date x)向当前SQL语句中的指定位置绑定一个java.sql.Date值。
• setDouble(int parameterIndex, double x)向当前 SQL 语句中的指定位置绑定一个 double值
• setFloat(int parameterIndex, float x)向当前 SQL 语句中的指定位置绑定一个 float 值
• setInt(int parameterIndex, int x)向当前 SQL 语句中的指定位置绑定一个 int 值
• setString(int parameterIndex, String x)向当前 SQL 语句中的指定位置绑定一个 String 值
(6)ResultSet接口---结果集封装查询结果
ResultSet提供检索不同类型字段的方法
(6.1)常用方法
• getString(int index)、getString(String columnName)
获得在数据库里是 varchar、char 等类型的数据对象。
• getFloat(int index)、getFloat(String columnName)
获得在数据库里是 Float 类型的数据对象。
• getDate(int index)、getDate(String columnName)
获得在数据库里是 Date 类型的数据。
• getBoolean(int index)、getBoolean(String columnName)
获得在数据库里是 Boolean 类型的数据。
• getObject(int index)、getObject(String columnName)
获取在数据库里任意类型的数据。
(6.2)ResultSet 对结果集进行滚动的方法
• next():移动到下一行。
• Previous():移动到前一行。
• absolute(int row):移动到指定行。
• beforeFirst():移动 resultSet 的最前面。
• afterLast() :移动到 resultSet 的最后面。
(7)Callablestatement接口
继承自PreparedStatement接口,由方法prepareCall创建(3.1中的常用方法),用于调用数据库的存储过程
3 JDBC的使用 ---******************
加载数据库驱动程序 -->建立数据库连接Connection -->创建执行SQL的语句
-->Statement -->处理执行结果ResultSet -->释放资源
(1)下载数据驱动
(1.1)MySQL 驱动
Download Connector/J
(1.2)Oracle 驱动
数据库安装目录oracleproduct11.2.0dbhome_1jdbclib
(2)创建项目添加驱动
将MySQL驱动程序添加到eclipse中
(3)通过Statement向表中插入数据
(3.1)注册驱动
Class.forname("com.mysql.jdbc.Driver");
(3.2)获取连接
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:
3306/bjsxt?useUnicode=true&characterEncoding=utf-8","root", "root")
(3.3)执行SQL
String sql="insert into departments
values(default,'"+department_name+"'"+location_id+")";
Statement state = conn.createStatement();
(3.4)释放资源
截图
(4)通过 Statement 对象修改表中的数据
(5)封装JDBC工具类
(6)通过Statement对象完成查询
查询时,使用的方法是executeQuery()
在查询时使用及工具类,需要重新添加关闭结果集ResultSet连接
注意在运行程序中,前两个添加和更新数据,在关闭集合资源时
JdbcUtil.closeResource(state, conn,null);
最后一个值为null
在查询数据时:
JdbcUtil.closeResource(state,conn,rs);
(6.1)使用Properties优化DBUtil
什么是Properties及其特点
Properties是一个外部文本文件,我们可以根据环境变化,可以随意的修改数据的内容
java中如何读取Properties中的数据?
在src中先创建一个Properties文件,然后读取Properties文件内容,这 是一个IO操作,但我们需要只读取一次文件内容就行,所以在静态块中读取,通过ResourceBundle中的getBundle(“文件名”)方法即可读取到
(7)什么是ResultSet
注意 ResultSet 中封装的并不是我们查询到的所有的结果集,而是返回了查询到的结果集的数据库游标。通过 ResultSet 中的 next()方法操作游标的位置获取结果集
(8)通过ResultSet实现逻辑分页--一般开发更多使用物理分页
实际上逻辑分页并没有降低查询量,他只是空值游标来取部分的结果集而已
(9)SQL注入问题
(9.1)注入是什么
所谓 SQL 注入,就是通过把含有 SQL 语句片段的参数插入到需要执行的 SQL 语句中,最终达到欺骗数据库服务器执行恶意操作的 SQL 命令
(10)PreparedStatement对象的使用(重点!)
(10.1)PreparedStatement对象特点:
PreparedStatement 接口继承 Statement 接口
PreparedStatement 效率高于 Statement
PreparedStatement 支持动态绑定参数
PreparedStatement 具备 SQL 语句预编译能力
使用 PreparedStatement 可防止出现 SQL 注入问题
(10.2)使用方法:
PreparedStatement 对参数处理十分容易,不用再拼接字符串,只要按照问号占位符位置,做一个参数的给定.PreparedStatement的方法就可以帮助我们做一个参数的绑定
(11)PreparedStatement的预编译能力
(11.1)预编译是什么
所谓预编译语句就是将这类语句中的值用占位符替代,可以视为将 sql 语句模板化或者说参数化
预编译语句的优势在于:一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止 sql 注入,预编译是属于软解析
(11.2)预编译方式:
一种是以来数据库驱动完成预编译
另一种是依赖数据 库服务器完成预编译
开始数据库的日志
show VARIABLES like '%general_log%' set GLOBAL general_log = on
set GLOBAL log_output='table'
(12)通过PreparedStatement对象完成数据的更新
PreparedStatement在执行时先对语句进行编译,然后再做值的绑定
jdbc动态查询语句_Java修行第037天--JDBC技术相关推荐
- 如何解决动态查询语句太长,大于数据库字符的最大长度
上周,在写sql server2005数据库存储过程的时候,用到了动态查询语句,但是由于语句太长,定义的变量最长为varchar(8000),在字符串大于8000的时候,数据库会做截断,进而在执行动态 ...
- oracle 动态条件查询语句,教您Oracle动态查询语句的用法
Oracle动态查询语句是一类特殊的查询语句,下面就为您详细介绍Oracle动态查询语句的语法,如果您对Oracle动态查询方面感兴趣的话,不妨一看. 1. 当使用EXECUTE IMMEDIATE语 ...
- java两个数据库连表查询语句_Java如何连接多个表并查询表中的数据内容?
在Java编程中,如何连接多个表并显示表中的数据内容?假定数据库名称是:testdb,其中有两张表:employee和dept,employee表中有4条记录,dept表中有2条记录. 创建数据库表的 ...
- java中sql查询语句_JAVA中用 SQL语句操作小结
1.添加记录(INSERT) 使用SQL语句的INSERT命令可以向数据库中插入记录,INSERT命令的基本形式为: INSERT INTO 表名 [(字段名1,字段名2-)] VALUES (值1, ...
- java 分页查询语句_Java实现分页查询
MySQL分页语句:LIMIT M,N M:开始记录的索引.从0开始的 N:每次查询多少条. 每次查10条: 查第一页的:SELECT * FROM table LIMIT 0,10; 查第二页的:S ...
- Java异常日志的查询语句_java学习异常,断言和日志
1.异常处理的任务就是将控制权从错误产生的地方转移给能够处理这种情况的错误处理器 2.错误分类 用户输入错误 设备错误 物理限制 代码错误 3.异常分类,所有的异常都是由Throwable继承而来,有 ...
- java jdbc访问access数据库_Java实训设计----使用JDBC访问Access数据库
运行测试环境 JAVA JDK:j2sdk-1_5_0-beta-windows-i586 集成环境:JCreatorPro_3.50.013_Fix-Georgewing PS:我在自己的机子上成功 ...
- java mysql 动态sql_Java下拼接运行动态SQL语句
Java拼接动态SQL的一般做法有 1.使用动态语句 非常多数据库都提供了处理动态SQL的语法,如Oracle的EXECUTE IMMEDIATE语句.MSSQL的EXEC和SP_EXECUTESQL ...
- ibatis Dynamic总结(ibatis使用安全的拼接语句,动态查询)
ibatis中使用安全的拼接语句,动态查询,ibatis比JDBC的优势之一,安全高效 说明文字在注释中 一.引入 一个小例子 <select id="selectAllProd ...
最新文章
- float占几个字节_一个HashMap对象占多少字节?
- Ionic系列——环境配置和项目搭建
- asp.net广告控件的使用
- 【BZOJ 4169】 4169: Lmc的游戏 (树形DP)
- oracle 转 mysql 乱码问题吗_Oracle数据传输MySQL中文编码问题
- JFace中TableViewer的使用
- Idea java 程序打jar包(maven)
- Unable to start LiveReload server
- Java常用框架有哪些?
- 三角形的几何公式大全_初中数学几何公式、定理梳理大全,老师都收藏了
- 快进php,【插件推荐】视频速度控制器,网页视频加速/减速播放
- 如何更改文件夹图标和颜色
- linux开机故障,Entering emeryency mode. Exit the shell to continue.
- windows10家庭版升级为专业版
- 百度无线音乐盒刷打印服务器,百度无线音乐盒固件
- vite打包工具的介绍
- OpenWrt mesh组网设置
- 资本的游戏-笔记(一)
- 最新数据显示:2025年中国将拥有世界最大数据圈
- SNMP4J(通过java实现SNMP协议)
热门文章
- 有必要学python吗-让孩子学Python编程有必要吗
- python免费教学视频教程-Python免费教程_Python免费视频教程大全_易玩网
- python和c++哪个好找工作-升学为主的编程学python和C++哪个好?
- python使用方法-Python中bisect的使用方法
- python下载的文件放在哪里的-python实现文件下载的方法总结
- python3.7和3.8的区别-Python 3.8 有什么新变化
- Centos下gcc的安装、gcc的更新、gcc安装过程中报错:make[1]: *** [stage1-bubble] 错误 2
- python unicode编码书写方式_python 中文编码 小结 ,json读写,str转换unicode,文字比较...
- LeetCode Permutations II(有重复元素的全排列)
- RTP与RTSP的区别