Java数据进阶知识(二)JDBC
Java数据进阶知识(二)JDBC
首先,JDBC是什么? JDBC是Java数据库连接。其实在Java中,JDBC是一个帮我们去连接数据库的一个“东西”。在Java中JDBC指的就是Java的一套标准的连接数据库的接口。驱动程序包是由个数据库厂商来实现的,也就是说由数据库厂商来编写JDBC的实现类,我们只需要根据JDBC指定的接口去使用即可。
一、一个JDBC程序
- 1、导包(必备)
- 2、代码实现
//说明:SUN公司定义的JDBC只是一些接口,我们想要去操作数据库,需要先把数据库的驱动,就是JDBC的实现类拿到程序里来,这个操作称之为注册驱动。定义使用DriverManager类来完成确定程序的注册
1.注册加载驱动:DriverManager.registerDriver(new Driver)//这里的 new Driver 其实就是 new com.jdbc.mysql.Driver() com.jdbc.mysql 导入的mysql驱动包
2.获取连接:驱动注册后 就可以创建于数据的连接 Connection:其实就是数据库连接对象
Connection con = DriverManager.getconnection(String url,String username,String password); // 实际项目中 这些数据库相关信息基本都放在配置文件中。
3.获取Statement对象 Statement:用来执行sql语句
Statement statement = con.createStatement();
4.执行sql语句
Result result = statement.executeQuery(String sql) ;//用来执行查询语句
int st = statement.executeUpdate(String sql) ;//用来执行增删改语句
//还有一种state.execute(String sql) 增删改查均可执行 没怎么用过 不做细讲
5.解析结果集
//如果是executeUpdate 返回为影响行数
//如果是executeQuery 返回值数据类型是Result,采用的类似于表格的方式
while(st.next()){ //next 游标下移
st.getInt("columnName") //获取结果元素
st.getString("columnName")
}
6.最后断开连接
st.close;
connection.close;
二、API详解
1.DriverManager对象:
registerDriver/getConnection
2.Connection对象:
jdbc程序中的Connection,它用于代表数据库的连接(桥梁),Connection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的。
createStatement/prepareStatement/setAutoCommit/commit/rollback 后三个为事务相关的。
3.Statement对象:
Jdbc程序中的Statement对象用于向数据库发送SQL语句。
executeQuery/executeUpdate/execute
4.ResultSet:
jdbc程序中的ResultSet用于代表Sql语句的执行结果.Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据
next()/previous() 游标上下移动 beforeFirst()/afterLast()移动到第一行之前/移动到第一行之后 getObject/getString ... 获取不同类型的数据
三、数据库的访问过程
*1.客户端与mysql建立连接
2.客户端向数据库发送数据库请求
3.数据库响应请求,并返回结果数据给客户端
4.客户端接收数据库返回的数据,并且对数据进行处理使用
5.释放资源
四、数据库的注入问题
数据注入问题产生的原因:是因为SQL语句的字符串拼接。当用户输入的一些包含SQL关键字的字符的时候,通过字符拼接以后可能会改变SQL语句的格式,进而引发安全问题.
根本原因:Mysql把用户输入的参数卡看做关键字解析了。
如何解决数据库注入问题呢?
- PreparedStatement(预编译的PreparedStatement)
在创建PreparedStatement的时候,PreparedStatement会把当前没有参数的sql语句发送给数据库服务器,执行预编译(预编译:其实就是去解析这个SQL语句中的关键字,变成MySQL可以执行的命令)
在预编译后,输入的参数就会被当做纯文本来解析。
总结: - 在安全性方面,PreparedStatement比Statement好的多,没有安全问题
- 在效率方面,执行单次sql的时候Statement 比PreparedStatement 好一些,因为Statement 在执行sql 的时候只会与数据库通信一次,而PreparedStatement要通信两次
五、批处理
for 循环逐条插入
statement 批处理
PreparedStatement 批处理
原文地址:https://www.cnblogs.com/likangnianxinbaiwan/p/16315175.html
- Linux下的Telnet设置方法介绍
- 2017年11月互联网和相关服务业保持快速增长
- 深度学习胸部x射线
- C+实现神经网络之壹—Net类的设计和神经网络的初始化
- 死亡不可避免,但何时死,人工智能或有发言权
- 打开手机的这个功能,微信支付宝不怕盗刷!
- 手把手教你cuda5.5与VS2010的编译环境搭建
- Apache实现反向代理负载均衡
- linux下Apache服务器使用入门----httpd.conf
- linux下JBOSS使用入门
- CentOS下重新安装JDK,避免OpenJDK干扰
- linux虚拟机与winodows共享文件夹----linux安装VMware tools
- 虚拟机vmware与本地磁盘共享方法
- ADX3000二层的负载均衡设计问题
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Python基础之函数加强
- Python基础之函数二
- 前端|动态发光按钮
- Windows系统命令拼接
- 利用Hexo打造属于自己的网页版简历
- RCE远程控制Windows服务器——以win10虚拟机为例
- 解决InnoDB: Table mysql/innodb_index_stats has length mismatch
- R语言中对文本数据进行主题模型topic modeling分析
- QT学习第3天:QSlider使用方法
- qt学习第2天:QRadioButtonTest+ButtonGroup单选后提示消息,QComBox
- Python使用矩阵分解法找到类似的音乐
- SpringBoot集成ELK实现日志收集实践
- python在Scikit-learn中用决策树和随机森林预测NBA获胜者
- R语言:用R语言填补缺失的数据
- R语言如何和何时使用glmnet岭回归