Java EE 基础解决方案Word格式.docx
- 文档编号:16550861
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:38
- 大小:64.58KB
Java EE 基础解决方案Word格式.docx
《Java EE 基础解决方案Word格式.docx》由会员分享,可在线阅读,更多相关《Java EE 基础解决方案Word格式.docx(38页珍藏版)》请在冰豆网上搜索。
•Persistence
2.JDBC基础
2.1.JDBC规范
•先看看咱中国僵尸片的拍摄
•再看JDBC规范
僵尸片开拍前
•导演说:
–僵尸是有吸血牙的
–僵尸是穿清朝大官衣服的
–这是僵尸的属性
–僵尸是跳着走路的
–僵尸还会咬人哦
–僵尸的嘴巴还会吐烟
–这是僵尸的行为
•于是,演员知道了,这是僵尸的规范,要照着这个规范来。
僵尸片开拍时
•演员:
–规范上说:
僵尸是有吸血牙的。
•我演的僵尸一定有。
•但是喜欢用泥巴还是牙签做这个牙就随便我了。
僵尸是穿清朝大官衣服的。
•我演的僵尸一定穿清朝官服。
•但是,穿“班尼路”还是“耐克”的牌子就随便我了。
–于是,在属性上,我就遵守了导演给出的僵尸规范。
僵尸是跳着走路的。
•我演的僵尸一走路就会跳。
•但是用脚尖跳还是用脚跟跳就随便我了。
•我演的僵尸肯定咬人。
•但是从左上斜着往右下咬,还是从右上往左下咬,就随便我了。
•我演的僵尸绝对吐烟
•但是,吐的是“红塔山”还是“芙蓉王”就随便我了。
–于是,从僵尸的行为上来讲,我也遵守了导演给出的僵尸规范
2.1.1僵尸片总结
2.1.2同一规范的好处
•对于看电影的人来说:
–一看见穿清朝官服嘴上有大牙的,走路还跳着走,同时嘴巴还不时冒冒烟,而且热爱咬人的分子,就知道这是僵尸。
–而不论这个僵尸是谁演的。
–只需要学一次,不需要重复的学习什么是僵尸,就拥有识别僵尸的功能了。
2.1.3JDBC规范
•如同电影里需要僵尸一样,我们的软件系统需要一个Java类库来操作不同数据库,而这些类库就称之为“数据库驱动”。
•于是,如同电源里的导演规定僵尸的规范一样,Sun公司规定了数据库的驱动的编写规范。
•即规定了:
–需要哪些类来完成哪些动作
–各个类中有什么成员变量
–各个类中有什么方法
•然后,如果导演让不同的演员照着自己定的规范来实现各个僵尸一样,Sun让数据库厂商照着自己的规范来实现数据库操作的类库。
2.1.4JDBC规范的好处
•如同看电影的人一样,开发数据库的工程师只需要学习一次JDBC规范,就能够调用数据库驱动对各种数据进行操作。
•而不用管数据库的驱动是哪个厂家实现的。
2.2.JDBC使用流程
•获取数据库连接
–服务器IP,端口
–协议
–库或服务名称
•执行SQL语句
•如果执行的是查询的话,要接收查询结果
•断开与数据库的连接
2.3.JDBC入门实例
具体实例,请参照配套源码中的项目JDBC_demo中的jdbc_first_test包。
3.JDBC详细介绍
3.1.JDBC类地图
首先从总体上了解一下JDBC类库中包含哪些类。
3.2.类介绍
DriverManager:
通过驱动,建立与数据库间的连接。
Connection:
代表着与数据库间的连接。
Statement:
代表着要执行的SQL语句。
ResultSet:
代表着数据库查询到的结果集。
3.3.数据库操作的基本功能之插入数据
//动态导入数据库的驱动
Class.forName("
com.mysql.jdbc.Driver"
);
//获取数据库链接
conn=DriverManager.getConnection(
"
jdbc:
mysql:
//localhost:
3306/jdbc_teaching"
"
root"
//创造SQL语句
Stringsql="
INSERTINTOuser_list(user_name,user_password)VALUES('
Eric'
'
123'
)"
;
//执行SQL语句
stmt=conn.createStatement();
stmt.executeUpdate(sql);
插入数据:
请参照配套源码中的项目JDBC_demo中的包jdbc_every_action。
3.4.数据库操作的基本功能之修改数据
UPDATEjdbc_teaching.user_listSETuser_password='
456'
WHEREuser_name='
修改数据:
3.5.数据库操作的基本功能之删除数据
DELETEFROMjdbc_teaching.user_listWHEREuser_name='
删除数据:
3.6.数据库操作的基本功能之查询数据
conn=DriverManager.getConnection("
SELECT*FROMuser_list"
rs=stmt.executeQuery(sql);
while(true){
//移动到下一条数据
booleanb=rs.next();
//检查下一条数据是否存在
if(false==b){
//如果下一条数据不存在,就不用再遍历了
break;
}
//取得用户名
StringuserName=rs.getString("
user_name"
);
//取得密码(字段的编号从1开始,密码排第二位)
StringuserPassword=rs.getString
(2);
System.out.println(userName+"
:
"
+userPassword);
查询数据:
3.7.数据库操作的基本功能之查询统计函数
SELECTCOUNT(*)FROMuser_list"
rs.next();
//取得结果
intcount=rs.getInt
(1);
查询统计函数:
3.8.带参数的SQL查询
为什么需要带参数?
如何带参数?
带参数的SQL查询
SELECT*FROMuser_listWHEREuser_name='
?
'
stmt=conn.prepareStatement(sql);
//参数赋值(参数的顺序是从1开始的)
stmt.setString(1,"
Eric"
//执行SQL
请参照配套源码中的项目JDBC_demo中的包parameter_sql。
3.9.存储过程的调用
3.9.1.MySql中的存储过程:
CREATEDEFINER=`root`@`localhost`PROCEDURE`test_procedure`()
BEGIN
INSERTINTOjdbc_teaching.user_list(user_name,user_password)
VALUES('
Janet'
678'
END
3.9.2.Java调用程序:
//创造调用存储过程的SQL
{CALLtest_procedure()}"
//执行调用存储过程的SQL语句
stmt=conn.prepareCall(sql);
stmt.execute(sql);
请参照配套源码中的项目JDBC_demo中的包call_procedure。
4.JDBC元数据
4.1.元数据MetaData
4.1.1.什么是元数据?
–本身固有的特性。
4.1.2.元数据分类
–数据库的元数据:
如数据库的名称,版本等。
–查询结果的元数据:
查询结果集中字段数量,某字段的名称等。
4.2.数据库的元数据
//获取数据库元数据
DatabaseMetaDatadmd=conn.getMetaData();
StringproductName=dmd.getDatabaseProductName();
StringproductVersion=dmd.getDatabaseProductVersion();
StringdriverName=dmd.getDriverName();
StringdriverVersion=dmd.getDriverVersion();
System.out.println(productName+"
-------"
+productVersion+"
\n"
+driverName+"
+driverVersion);
请参照配套代码中的项目JDBC_demo中的包meta_data。
4.3.结果集的元数据
//获取结果集元数据
ResultSetMetaDatarsmd=rs.getMetaData();
intcolumnCount=rsmd.getColumnCount();
Stringlabel=rsmd.getColumnLabel
(1);
System.out.println(columnCount+"
\n"
+label);
5.JDBC事务
5.1.事务的基本知识
•什么是事务
–银行转帐过程
–由银行转帐看事务
–什么是事务
5.2.银行转帐过程
5.3.由银行转帐看事务的特性
–原子性(Atomicity)
–一致性(Consistency)
–隔离性(Isolation)
–持续性(Durability)
5.4.事务实例
Connectionconn=null;
Statementstmt=null;
try{
//开启事务
–conn.setAutoCommit(false);
//提交事务
mit();
}catch(Exceptione){
//回滚事务
conn.rollback();
}catch(Exceptione2){}
源码请参照配套源码中的项目JDBC_demo中的包jdbc_transaction。
6.Blob与Clob字段的处理
6.1.Clob字段的处理
为什么要特殊处理Clob字段?
如何特殊处理Clob字段?
6.2.同理处理Blob字段
如何处理
6.2.1.代码-插入数据:
INSERTINTOpic_list(pic_id,pic_data)"
+"
VALUES('
pic1'
?
//将SQL语句绑定到PreparedStatement中
//准备数据
Filefile=newFile("
./resources/test.jpg"
FileInputStreamfis=newFileInputStream(file);
//设定数据
stmt.setBinaryStream(1,fis,(int)file.length());
//执行插入操作
stmt.executeUpdate();
fis.close();
6.2.2.代码-查询数据:
SELECT*FROMpic_listWHEREpic_id='
rs=stmt.executeQuery();
//将读到的数据写到硬盘上的管道
f:
\\test.jpg"
FileOutputStreamfos=newFileOutputStream(file);
//从数据库读数据的管道
InputStreamis=rs.getBinaryStream
(2);
intlen=0;
byteb[]=newbyte[1024];
//一边读一边写
while(-1!
=(len=is.read(b))){
fos.write(b,0,len);
fos.close();
is.close();
6.2.3.配套源码
请参照配套源码中的项目JDBC_demo中的包blob与clob。
7.连接池与数据源
7.1.连接池
先看看我家楼下租电影堞的姑娘如何租堞
再看连接池是什么
7.2.数据源
•先看看分布式应用
–看杀手集团操作感悟分布式
•一个人也称作杀手集团?
它怎么运作
•有了经理人后又怎么运作
–原来这就是分布式
•再看远程方法调用
•再看JNDI
7.3.Tomcat的连接池
•Tomcat连接池原理
•Tomcat连接池的使用方法
8.JavaWeb开发预准备
8.1.C/S结构与B/S结构
看金山词霸
再Google翻译
8.2.Web应用架构
8.3.Web应用架构与JavaEE规范
8.4.Web应用架构与JavaEE规范高级
8.5.Web应用架构与民间解决方案
9.Servlet基础
9.1.HttpSerlvet接口介绍
protectedvoidservice(HttpServletRequestarg0,HttpServletResponsearg1)throwsServletException,IOException;
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException;
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
9.2.Servlet配置
¡
在WebRoot下的WEB-INF目录下的web.xml文件中:
<
servlet>
servlet-name>
MyServlet<
/servlet-name>
<
servlet-class>
servlet_interface_introduction.MyServlet
/servlet-class>
/servlet>
servlet-mapping>
url-pattern>
/servlet/MyServlet<
/url-pattern>
/servlet-mapping>
9.3.入门实例
请参照配套源码中的项目ServletDemo。
9.4.在Servlet中显示页面
解决方案:
●在Servlet的方法中打印HTML即可。
throwsServletException,IOException{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java EE 基础解决方案 基础 解决方案