执行流程:
连接数据源,如:数据库。
为数据库传递查询和更新指令。
处理数据库响应并返回的结果。
JDBC 架构
分为双层架构和三层架构。
双层:
作用:此架构中,Java Applet 或应用直接访问数据源。
条件:要求 Driver 能与访问的数据库交互。
机制:用户命令传给数据库或其他数据源,随之结果被返回。
部署:数据源可以在另一台机器上,用户通过网络连接,称为 C/S配置(可以是内联网或互联网)。
三层:
模型:
侧架构特殊之处在于,引入中间层服务。
流程:命令和结构都会经过该层。
吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势。
历史趋势: 以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,如EJB,Java 开始用于中间层的开发这也让 Java 的优势突显出现出来,使用 Java 作为服务器代码语言,JDBC随之被重视。
JDBC 编程步骤
加载驱动程序:
Class.forName(driverClass)
//加载MySql驱动
Class.forName("com.mysql.jdbc.Driver")
//加载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver")
获得数据库连接:
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "root");
创建Statement\PreparedStatement对象:
conn.createStatement();
conn.prepareStatement(sql);
案例
连接数据库登录界面的实现:
(1)数据库准备:
新建一个useer表
(2)界面部分:
(上一篇中的界面。这里就不放代码了)
(3)实现效果:
若输入的用户名密码在数据库中存在,则跳转至登录成功页面,若没有则跳转登录失败页面
(4)代码实现(检测部分):
<%
String a=request.getParameter("zhanghao");
String b;
b=request.getParameter("mima");
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/jee?useSSL=false";
String username="root";
String pwd="1234";
Connection conn=DriverManager.getConnection(url, username, pwd);
PreparedStatement stmt=conn.prepareStatement("select * from useer where usename=? and usepwd=?");
stmt.setString(1,a);
stmt.setString(2,b);
ResultSet rs=stmt.executeQuery();
%>
<% if(rs.next()){%>
<% request.setCharacterEncoding("UTF-8") ;
//创建cookie对象
Cookie nameCookie=new Cookie("username",a);
Cookie pwdCookie=new Cookie("userpwd",b);
//设置有效期
nameCookie.setMaxAge(60*60);
pwdCookie.setMaxAge(60*60);
//向客户端写cookie
response.addCookie(nameCookie);
response.addCookie(pwdCookie);
//创建session对象
session.setAttribute("username", a);
//session.setAttribute("pwd", b);
session.setAttribute("testData", "123456");
session.setAttribute("shoppingList", "鞋子");
session.setMaxInactiveInterval(60*3);
System.out.print("测试"+session.getAttribute("username"));%>
<jsp:forward page="./loginSuccess.jsp"/>
<%
}else{
%>
<jsp:forward page="./loginDefeat.jsp">
<jsp:param name="yyy" value="登录失败"/>
</jsp:forward>
<%
}
%>