初学JDBC
来源:互联网 发布:java文档注释 编辑:程序博客网 时间:2024/05/17 05:06
1.数据库驱动概念
数据库驱动就是数据库厂商提供的用来操作数据库用的jar包。
2.JDBC入门
如由数据库厂商提供自己的数据库驱动会比较繁杂,所以sun公司提供了一套数据库驱动的接口规范JDBC,其本质是连接多种数据库的接口。
2.1 准备工作
在数据库中建立表
导入数据库的驱动包
3.操作JDBC
3.1 注册数据库驱动
DriverManager.registerDriver(new Driver());
缺点1:在初始化Driver类时已经注册了一次驱动,调用DriverManager的registerDriver()方法时会再注册一次驱动,造成驱动被注册了两次。
缺点2:整个程序域mysql数据库驱动绑定增加了耦合性
替代方案:利用反射注册驱动
Class.forName("com.mysql.jdbc.Driver");
3.2 获取连接
DriverManager.getConnection(url, user, password);
~url的写法:
Oracle:jdbc:oracle:thin:@localhost:1521:sid
SqlServer:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid
MySql:jdbc:mysql://localhost:3306/sid
~url可以接的参数
user、password
useUnicode=true&characterEncoding=UTF-8
3.3 获取传输器
createStatement():创建向数据库发送sql的statement对象。
prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
3.4 利用传输器执行sql语句获取结果集
executeQuery(String sql) :用于向数据发送查询语句。
executeUpdate(String sql):用于向数据库发送insert、update或delete语句
execute(String sql):用于向数据库发送任意sql语句
3.5 遍历结果集取出结构
ResultSet以表的样式在内存中保存了查询结果,其中维护了一个游标,并提供了以下的操作方法:
next():移动到下一行,
Previous():移动到前一行,
absolute(int row):移动到指定行,
beforeFirst():移动resultSet的最前面,
afterLast() :移动到resultSet的最后面。
ResultSet还提供了多个Get方法来获取查询结果中的不同类型的数据。
3.6 释放资源
conn、stat、rs使用完后需要关闭
释放时按照先创建的后释放
if(rs != null){try {rs.close(); //stat.close();//conn.close();} catch (SQLException e) {e.printStackTrace();} finally{rs = null;//stat= null;//conn= null;}}
4.PreparedStatement
4.1 Sql注入:
由于jdbc程序在执行的过程中sql语句在拼接时使用由页面传入参数,如果用户恶意传入一些sql中的特殊关键字,会导致sql语句变化,这种攻击方式就叫做sql注入,参考用户注册登录案例。
4.2 PreparedStatement
是Statement的子类,不同的是PreparedStatement使用预编译机制,在创建PreparedStatement对象时需要将sql语句传入,需要的参数用“?”替代,传入的sql会被预编译,然后再调用PreparedStatement的setXXX方法设置参数,由于sql语句经过了预编译,再传入特殊值也不会起作用了。
4.3 PreparedStatement采用预编译机制
sql语句在执行的过程中效率比Statement要高。
5.大数据
5.1 mysql数据库可以在数据库中保存大文本和大二进制数据:
Text
TINYTEXT(255)、TEXT(64k)、MEDIUMTEXT(16M)和LONGTEXT(4G)
Blob
TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB
5.2 JDBC操作大文本:
5.2.1 插入大文本:
ps = conn.prepareStatement("insert into Demo2Text values(null,?,?)");
ps.setString(1, "string_name");
File file = new File("1.txt");
ps.setCharacterStream(2, new FileReader(file), (int) file.length());
若出现异常:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
原因:文件过大,导致PreparedStatement中数据占用内存过大
解决:内存溢出-Xms256M-Xmx256M
若出现异常:com.mysql.jdbc.PacketTooBigException: Packet for query is too large (10886466 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
原因:数据库连接传输用的包不够大,传输大文本时报此错误
解决:在my.ini中配置max_allowed_packet指定包的大小
5.2.2 查询大文本:
Reader rd = rs.getCharacterStream("content");
5.3 JDBC操作大二进制
5.3.1 插入二进制:
ps = conn.prepareStatement("insert into Demo3Blob values(null,?,?)");
ps.setString(1, "multiMedia_name");
File file = new File("1.mp3");
ps.setBinaryStream(2, new FileInputStream(file), (int) file.length());
5.3.2 查询二进制
InputStream in = rs.getBinaryStream("content");
- 初学JDBC
- 初学JDBC
- 初学JDBC
- 初学JDBC
- JDBC初学
- 初学JDBC
- 初学JDBC
- 初学到jdbc数据库连接
- 初学JDBC(八)-JDBC的事务处理
- 初学JDBC请教基础问题
- JavaWeb初学(tomcat,JDBC)
- 初学JDBC(二)-连接数据库
- 初学JSP与JDBC(mysql数据库)
- 初学JDBC(一)-简介与工作原理
- JSP连接数据库(初学JDBC+access数据库 )
- JDBC初学后的第一次复习:Class.forname
- JDBC初学后的第一次复习:Connection , DriverManager
- 初学JDBC(四)-使用Preparedstatement接口实现增删改操作
- 数据提取之JSON与JsonPATH
- Java Web基础——Action+Service +Dao三层的功能划分
- 模拟用户弧线滑动,算法python实现
- saltstack安装
- sqlite 利用bat批处理
- 初学JDBC
- MFC菜单设置
- markdown文件怎么查看?
- 如何给窗体添加背景图片让字显示出来 步骤图
- 修改docker0默认ip
- Weblogic 禁用不安全的http请求
- plc通信协议
- linux中ftp服务
- 欢迎使用CSDN-markdown编辑器