详解JDBC的使用

一.jdbc的介绍

1.jdbc是什么?

	JDBC(Java Data Base Connectivity,java数据库连接)
	简单说:就是可以直接通过java语言,去操作数据库。
	jdbc是一套标准,它是由一些接口与类组成的。

2.学习中涉及到的类与接口

它们主要在两个包下
		java.sql
			类:DriverManger
			接口  Connection 
					Statement 
					ResultSet  
					PreparedStatement
					CallableStatement(它是用于调用存储过程)
		javax.sql
			接口 DataSource

3.什么是驱动?

	两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,
	通过软件可以与该设备进行通信

4.jdbc入门语句

			// 1.注册驱动
			DriverManager.registerDriver(new Driver());

			// 2.获取连接对象
			Connection con = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/class_info", "root", "abc");

			// 3.通过连接对象获取操作sql语句Statement
			Statement st = con.createStatement();

			// 4.操作sql语句
			String sql = "select * from user";

			// 操作sql语句(select语句),会得到一个ResultSet结果集
			ResultSet rs = st.executeQuery(sql);

			// 5.遍历结果集
			boolean flag = rs.next(); // 向下移动,返回值为true,代表有下一条记录.
			int id = rs.getInt("id");
			String username=rs.getString("username");
			System.out.println(id);
			System.out.println(username);
			
			while(rs.next()){
				int id=rs.getInt("id");
				String username=rs.getString("username");
				String password=rs.getString("password");
				String email=rs.getString("email");
				
				System.out.println(id+"  "+username+"  "+password+"  "+email);
			}
			
			//6.释放资源
			rs.close();
			st.close();
			con.close();

5.操作详解

1.注册驱动

			DriverManager.registDriver(new Driver());
			
			1.DriverManager类
				它是java.sql包下的一个驱动管理的工具类,可以理解成是一个容器(Vector),可以装入很多数据库驱动
				
				它的registDriver方法分析
					  public static synchronized void registerDriver(java.sql.Driver driver)
					  参数:java.sql.Driver
					  我们传递的是  com.mysql.jdbc.Driver;
					  
			在com.mysql.jdbc.Driver类中有一段静态代码块:
					
					static {
						try {
							java.sql.DriverManager.registerDriver(new Driver());
						} catch (SQLException E) {
							throw new RuntimeException("Can't register driver!");
						}
					}
				上述代码的问题:
					1.在驱动管理器中会装入两个mysql驱动.
						解决方案:使用反射
								Class.forName("com.mysql.jdbc.Driver");
								
				分析:使用反射的方式来加载驱动有什么好处?
					1.只加载一次,装入一个驱动对象.
					2.降低耦合,不依赖于驱动.
					
			2.可以通过DriverManager来获取连接对象
				Connection con=DriverManager.getConection(String url,String user,String password);
					url作用:就是用于确定使用哪一个驱动.
						mysql url:  jdbc:mysql://localhsot:3306/数据库名.
						oralce url: jdbc:oracle:thin:@localhost:1521:sid
	
					总结:DriverManager作用:
						1.注册驱动
						2.获取连接Connection.
			3.关于url
			url格式
					主协议  子协议   主机 端口  数据库
					jdbc   :  mysql ://localhost:3306/class_info
					
				mysql的url可以简写:
					前提:主机是localhost 端口是3306
					jdbc:mysql:///class_info
					
				了解:在url后面可以带参数
					useUnicode=true&characterEncoding=UTF-8

2.Connection详解

	java.sql.Connection,它代表的是一个连接对象。简单说,就是我们程序与数据库连接。	
	Connection作用:
			1.可以通过Connection获取操作sql的Statement对象。
				Statement createStatement() throws SQLException
				示例:
				Statement st=con.createStatement();
				
				了解:
					1.可以获取执行预处理的PreparedStatement对象.
						PreparedStatement prepareStatement(String sql) throws SQLException
					2.可以获取执行存储过程的 CallableStatement
						CallableStatement prepareCall(String sql) throws SQLException
			2.操作事务
				setAutoCommit(boolean flag);开启事务
				rollback();事务回滚
				commit();事务提交

3.Statement详解

	java.sql.Statement用于执行sql语句.
	Statement作用:
			1.执行sql
				DML:insert update delete
					int executeUpdate(String sql)
					
					利用返回值判断非0来确定sql语句是否执行成功。
					
				DQL:select
					ResultSet executeQuery(String sql)
					
				可以通过execute方法来执行任何sql语句.
					execute(String sql):用于向数据库发送任意sql语句

			2.批处理操作
				addBatch(String sql); 将sql语句添加到批处理
				executeBatch();批量执行
				clearBatch();清空批处理.

4.ResultSet详解

	java.sql.ResultSet它是用于封装select语句执行后查询的结果。
		常用API
			1.next()方法
				public boolean next();
					用于判断是否有下一条记录。如果有返回true,并且让游标向下移动一行。
					如果没有返回false.
					
			2.可以通过ResultSet提供的getXxx()方法来获取当前游标指向的这条记录中的列数据。
				常用:
					getInt()
					getString()
					getDate()
					getDouble()
					参数有两种
						1.getInt(int columnIndex);
						2.getInt(String columnName);
						
					如果列的类型不知道,可以通过下面的方法来操作
						getObject(int columnIndex);
						getObject(String columnName);

5.关闭资源

	Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,
这些对象通常是ResultSet, Statement和Connection对象。
	特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,
如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
	为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

二.dao模式简介

1.什么是dao模式

DAO模式(Data Access Object 数据访问对象):在持久层通过DAO将数据源操作完全封装起来,业务层通过操作Java对象,完成对数据源操作

  • 业务层无需知道数据源底层实现 ,通过java对象操作数据源

2.Dao模式结构

1、数据源(MySQL数据库)
2、Business Object 业务层代码,调用DAO完成 对数据源操作
3、DataAccessObject 数据访问对象,持久层DAO程序,封装对数据源增删改查,提供方法参数都是Java对象
4、TransferObject 传输对象(值对象) 业务层通过向数据层传递 TO对象,完成对数据源的增删改查

使用dao模式完成登录操作:

  1. web层
    login.jsp LoginServlet User
  2. service层
    UserService
  3. dao层
    UserDao

三.jdbc处理大数据

mysql中有大数据

		blob 大二进制
		TINYBLOB(255)、BLOB(64kb)、MEDIUMBLOB(16m)和LONGBLOB(4g)
		text(clob) 大文本
		TINYTEXT(255)、TEXT(64kb)、MEDIUMTEXT(16m)和LONGTEXT(4g)

对于大数据操作,我们一般只有两种 insert select
演示1:
大二进制操作

		create table myblob(
			id int primary key auto_increment,
			content longblob
		)
		
		向表中插入数据

问题1:

java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setBinaryStream(ILjava/io/InputStream;)V

原因:
mysql驱动不支持setBinaryStream(int,InputStream);

修改成

		pst.setBinaryStream(1, fis,file.length());

注意:如果文件比较大,那么需要在my.ini文件中配置

		max_allowed_packet=64M

总结:

存	pst.setBinaryStream(1, fis, (int) (file.length()));
			
取	InputStream is = rs.getBinaryStream("content");

演示:存储大文本

		create table mytext(
			id int primary key auto_increment,
			content longtext
		)
	存储
		File file = new File("D:\\java1110\\workspace\\day17_3\\a.txt");
		FileReader fr = new FileReader(file);
		pst.setCharacterStream(1, fr, (int) (file.length()));
	获取:
		Reader r = rs.getCharacterStream("content");

四.jdbc批处理

1.什么是批处理

一次可以执行多条sql语句.
在jdbc中可以执行sql语句的对象有Statement,PreparedStatement,它们都提供批处理.

2.Statement执行批处理

	addBatch(String sql);  将sql语句添加到批处理
	executeBatch(); 执行批处理
	clearBatch();

2.PreparedStatement执行批处理

	addBatch();
	executeBatch();
	clearBatch();

3.Statement和PreparedStatement批处理的区别

	1.Statement它更适合执行不同sql的批处理。它没有提供预处理功能,性能比较低。		
	2.PreparedStatement它适合执行相同sql的批处理,它提供了预处理功能,性能比较高。

4.注意事项

mysql默认情况下,批处理中的预处理功能没有开启,需要开启
	1.在 url下添加参数
		url=jdbc:mysql:///day17?useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true
	2.注意驱动版本
		Mysql驱动要使用mysql-connector-java-5.1.13以上
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值