您的位置:首页 > 运维架构 > Tomcat

tomcat javaweb 开发基础(4)

2013-05-12 19:03 363 查看
一:访问数据库

首先介绍一下基本的概念:

DBC的英文全称是 Java Database Connectivity 。
JDBC的主要作用是 连接Java程序和数据库的纽带 。

为什么需要JDBC :JDBC是Java数据库连接技术的简称,向Java应用程序提供连接各种常用数据库的能力



(1)JDBC API
提供者:sun公司
内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如:
1.DriverManager类 2. Connection接口
3.Statement接口 4.ResultSet接口
(2)DriverManager
提供者:sun公司
作用:载入各种不同的JDBC驱动
(3)JDBC 驱动
提供者:数据库厂商
作用:负责连接各种不同的数据库

JDBC API
JDBC API可做三件事:与数据库建立连接、执行SQL 语句、处理结果



JDBC API中类和接口的作用:

DriverManager :依据数据库的不同,管理JDBC驱动
Connection :负责连接数据库并担任传送数据的任务
Statement :由 Connection 产生、负责执行SQL语句
ResultSet:负责保存Statement执行后所产生的查询结果

JDBC API: 主要位于java.sql包中

Driver接口和DriverManager类:驱动器,驱动管理器
Connection 接口:数据库连接
Statement 接口:负责执行sql语句
PreparedStatement接口:负责执行预准备的sql语句
ResultSet接口:表示sql查询语句返回的结果集



再进行上面类和各接口的详解:

1.Driver接口和DriverManager类

所有的JDBC驱动器都必须实现Driver接口,在编写访问数据库的java程序时,比较把驱动器包括进来。
DriverManager类用来建立和数据库的连接及管理JDBC驱动器
getConnection(String url,String user,String pwd):
建立和数据库的连接,并返回表示数据库连接的connection对象

2. Connection 接口

createStatement():创建并返回Statement对象
prepareStatement(String sql):创建并返回PreparedStatement对象

3. Statement接口

execute(String sql):执行各种SQL语句。
executeUpdate(String sql):执行SQL的insert,update,delete语句
executeQuery(String sql):执行SQL的select语句,返回一个表示查询结果的ResultSet对象,

4.PreparedStatement接口

继承了Statement接口 ,用来执行预准备的SQL语句,数据库只需对这种SQL语句编译一次,然后就可以多次执行。
con.prepareStatement()生成对象。
setXXX()方法,给参数负值

try {
Class.forName(JDBC驱动类);
} catch (ClassNotFoundException e) {
System.out.println("无法找到驱动类");
}
try {
Connection con=DriverManager.getConnection(JDBC URL,数据库用户名,密码);

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");

while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
con.close();
} catch (SQLException e) {
e.printStackTrace();
}




try {
Class.forName(JDBC驱动类);
} catch (ClassNotFoundException e) {
System.out.println("无法找到驱动类");
}
try {
Connection con=DriverManager.getConnection(JDBC URL,数据库用户名,密码);
String sql = "SELECT userid,name FROM tuser WHERE
userid=? AND password=?" ;
PreparedStatement   pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1, rid) ;
pstmt.setString(2,pass) ;
rs = pstmt.executeQuery() ;
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
con.close();

5.ResultSet接口

表示select查询语句得到的结果集。
next()方法:定位到结果集中的下一条记录。

JDBC驱动 5-1

JDBC驱动由数据库厂商提供
在个人开发与测试中,可以使用JDBC-ODBC桥连方式
在生产型开发中,推荐使用纯Java驱动方式



JDBC驱动 5-2

桥连
将对JDBC API的调用,转换为对另一组数据库连接API的调用
优点:可以访问所有ODBC可以访问的数据库
缺点:执行效率低、功能不够强大



JDBC驱动 5-4

纯Java驱动
由JDBC驱动直接访问数据库
优点:100% Java,快又可跨平台
缺点:访问不同的数据库需要下载专用的JDBC驱动



JDBC驱动 5-5

使用纯Java驱动方式进行直连
1、下载数据库厂商提供的驱动程序包
2、将驱动程序包引入工程中
3、编写代码,通过纯Java驱动方式与数据库建立连接
------语法------

Class.forName(“com.mysql.jdbc.Driver”); //数据库名称
String url="jdbc:mysql://localhost:3306/usesql?user=root&password=admin";
Connection conn=DriverManager.getConnection(url);


注意:

在使用纯Java驱动方式进行数据库连接时,如果程序在运行时抛出异常:
java.sql.SQLException: No suitable driverfound for
jdbc:sqlserver://localhost:1433;DatabaseName=news
那么出错的原因是

找不到合适的驱动类,原因:没有把数据库驱动包引入工程

最后:编写访问数据库程序的步骤

(1)获得要访问数据库的类库,把它放到classpath中。

(2)在程序中加载并注册JDBC驱动器
class.forName(“com.mysql.jdbc.Driver”);
DriverManager.registerDriver(new com.mysql.jdbc.Driver());

实验一:

实验内容:
1)创建数据库及表格存放用户名和密码
2)开发静态网页文件login.htm,用于输入用户名和密码
3)开发check.jsp文件,用于连接数据库实现用户名密码验证
4)验证成功转入success.jsp显示登陆成熟,否则转入failure.jsp显示
check.jsp

<%@ page import="java.sql.*"%>
<%!
public static final String DBDRIVER = "com.mysql.jdbc.Driver" ;
public static final String DBURL = "jdbc:mysql://localhost:3306/logindemo1?user=root&password=123456" ;

%>
<%
Connection conn = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
boolean flag = false ;	// 表示登陆成功或失败的标记
%>
<%
String userid = request.getParameter("userid") ;	// 接收表单参数
String password = request.getParameter("password") ;	// 接收表单参数
try{
Class.forName(DBDRIVER) ;
conn = DriverManager.getConnection(DBURL) ;
String sql = "SELECT userid,name FROM tuser WHERE userid=? AND password=?" ;
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1,userid) ;
pstmt.setString(2,password) ;
rs = pstmt.executeQuery() ;
if(rs.next()){
// 如果有内容,则此处执行,表示查询出来,合法用户

flag = true ;
}
}catch(Exception e){
}finally{
try{
conn.close() ;	// 连接一关闭,所有的操作都将关闭
}catch(Exception e){}
}
%>
<%
if(flag){	// 登陆成功,应该跳转到success.jsp
%>
<jsp:forward page="success.jsp"/>
<%
}else{		// 登陆失败,跳转到failure.jsp
%>
<jsp:forward page="failure.jsp"/>
<%
}
%>


login.html

<script language="javaScript">
function validate(f){
if(!(/^\w{5,15}$/.test(f.userid.value))){
alert("用户ID必须是5~15位");
f.userid.focus();
return false;
}
if(!(/^\w{5,15}$/.test(f.password.value))){
alert("密码必须是5~15位");
f.password.focus();
return false;
}
return true;
}
</script>
<form method="post" action="check.jsp" onSubmit="return validate(this)">
<table>
<tr>
<td colspan="2">用户登录程序</td>
</tr>
<tr>
<td>用户名ID:</td>
<td><input type="text" name="userid"></td>
</tr>
<td>密  码 </td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="登录">
<input type="reset" value="重置">
</td>
</tr>
</table>

</form>


success.jsp

<%@ page contentType="text/html;charset=GBK"%>
<h1>登陆成功,欢迎光临!</h1>


failure.jsp

<%@ page contentType="text/html;charset=GBK"%>
<h1>登陆失败,请重新<a href="login.htm">登陆</a>!</h1>


还是顺着老师的课件复习吧!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: