tomcat javaweb 开发基础(4)

一:访问数据库

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

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 driver found 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>


 

 

 

 

 

 

 

还是顺着老师的课件复习吧!!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值