jsp第六课-在jsp中使用数据库

本章大部分例子采用的模式是JSP+JavaBean模式,即JSP页面调用bean来完成对数据库的操作,使用的数据库管理系统是SQL Server 2000。


1. SQL Server 2000数据库管理系统
SQL Server 2000是一个网络数据库,可以使远程的计算机访问它所管理的数据库。安装好SQL Server 2000后,需启动SQL Server 2000提供的数据库服务器,以便使远程的计算机访问它所管理的数据库。
如果您已经安装SQL Server 2000,可以如下操作启动SQL Server 2000提供的数据库服务器:单击“开始”→“程序”→“Microsoft SQL Server” →“服务器管理器”。


2. JDBC
JDBC(Java DataBase Connectivity)是Java运行平台的核心类库中的一部分,提供了访问数据库的API,它由一些Java类和接口组成。 
JDBC操作不同的数据库仅仅是连接方式上的差异而已,使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库 
使用JDBC进行如下操作:
   与一个数据库建立连接。
   向已连接的数据库发送SQL语句。
   处理SQL语句返回的结果。


3. 数据库连接的常用方式
  1.一种常见方式是建立起一个JDBC-ODBC桥接器:
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
  2.另一种使用纯Java数据库驱动程序 
  加载SQLServer驱动程序代码如下:
     Class.forName("com.microsoft.sqlserver. jdbc .SQLServerDriver");


4.查询操作
与数据库建立连接后,就可以使用JDBC提供的API和数据库交互信息,如查询、修改和更新数据库中的表等。 
创建Statement对象
 Statement  sql=con.createStatement();
sql对象就可以调用相应的方法,实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中
 ResultSet  rs=sql.executeQuery("SELECT * FROM  score"); 


5. 更新、添加与删除操作
Statement对象调用方法:
public int executeUpdate(String sqlStatement);
通过参数sqlStatement指定的方式实现对数据库表中记录的更新、添加和删除操作.


6.分页显示记录
用户使用分页方式显示ResultSet对象中的数据,就必须始终保持和数据库的连接,直到用户将ResultSet对象中的数据查看完毕。我们知道,每种数据库在同一时刻都有允许的最大连接数目,因此当多个用户同时分页读取数据库表的记录时,应当避免长时间占用数据库的连接资源。
CachedRowSetImpl对象可以保存ResultSet对象中的数据,而且CachedRowSetImpl对象不依赖Connnection 对象,这意味着一旦把ResultSet对象中的数据保存到CachedRowSetImpl对象中后,就可以关闭和数据库的连接。
假设CachedRowSetImpl对象中有m行记录,准备每页显示n行,那么,总页数的计算公式是:
  如果m除以n的余数大于0,总页数等于m除以n的商加1;
  如果m除以n的余数等于0,总页数等于m除以n的商。
即总页数=(m%n)==0?(m/n):(m/n+1);
  如果准备显示第p页的内容,应当把CachedRowSetImpl对象中的游标移动到第(p-1)*n+1 行记录处。   


7.常见数据库连接
(1)连接Oracle数据库
加载驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
建立连接
Connection conn=DriverManager.getConnection( "jdbc:oracle:thin:
@主机host:端口号:数据库名“, ”用户名“, ”密码“); 


(2)连接MySql数据库
加载MySql驱动程序:
try{  Class.forName("com.mysql.jdbc.Driver")
}
catch(Exception e){ }
建立连接
try{  String uri= “jdbc:mysql://localhost/数据库名";
     String user=“用户名";
     String password=“密码";
     con=DriverManager.getConnection(uri,user,password);
}
catch(SQLException e) { }


8.使用连接池
连接池的思想是:Tomcat服务器可以事先预备好若干个连接对象,将这些连接对象存放在一个称作连接池的容器中,通常由链表来担当这一角色。当某用户需要操作数据库时,只要从连接池中取出一个连接对象即可,当用户使用完该连接对象后,将该连接对象放回到连接池中。如果某用户需要操作数据库时,连接池中已没有连接对象可用,那么该用户就必须等待,直到连接池中有连接对象。


9.使用预处理语句
对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么 con就可以调用
  prepareStatement(String sql)
方法对参数sql指定的SQL语句进行预编译处理,生成该数据库地层的内部命令,并将该命令封装在PreparedStatement对象中.


例子1
showByJdbcOdbc.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML><BODY bgcolor=cyan>
 <% Connection con;
    Statement sql; 
    ResultSet rs;
    try{  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       }
    catch(ClassNotFoundException e)
       {  out.print(e);
       }
    try { con=DriverManager.getConnection("jdbc:odbc:mymoon","sa","sa");
          sql=con.createStatement();
          rs=sql.executeQuery("SELECT * FROM employee WHERE salary>3000");
          out.print("<table border=2>");
          out.print("<tr>");
            out.print("<th width=100>"+"雇员号");
            out.print("<th width=100>"+"姓名");
            out.print("<th width=50>"+"出生日期");
            out.print("<th width=50>"+"薪水");
         out.print("</TR>");
       while(rs.next())
       {  out.print("<tr>");
             out.print("<td >"+rs.getString(1)+"</td>"); 
             out.print("<td >"+rs.getString(2)+"</td>");
             out.print("<td >"+rs.getDate("birthday")+"</td>"); 
             out.print("<td >"+rs.getFloat("salary")+"</td>");
          out.print("</tr>") ; 
        }
        out.print("</table>");
        con.close();
     }
   catch(SQLException e) 
     {  out.print(e);
     }
 %>
</BODY></HTML>
例子2
showBySQLDriver.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML><BODY bgcolor=cyan>
<% Connection con;
   Statement sql; 
   ResultSet rs;
   try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
       }
   catch(Exception e)
       { out.print(e);
       }
   try { String uri= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=factory";
         String user="sa";
         String password="sa";
         con=DriverManager.getConnection(uri,user,password);
         sql=con.createStatement();
         rs=sql.executeQuery("SELECT * FROM employee WHERE salary>3000");
         out.print("<table border=2>");
         out.print("<tr>");
           out.print("<th width=100>"+"雇员号");
           out.print("<th width=100>"+"姓名");
           out.print("<th width=50>"+"出生日期");
           out.print("<th width=50>"+"薪水");
        out.print("</TR>");
      while(rs.next())
      {  out.print("<tr>");
            out.print("<td >"+rs.getString(1)+"</td>"); 
            out.print("<td >"+rs.getString(2)+"</td>");
            out.print("<td >"+rs.getDate("birthday")+"</td>"); 
            out.print("<td >"+rs.getFloat("salary")+"</td>");
         out.print("</tr>") ; 
       }
       out.print("</table>");
       con.close();
    }
  catch(SQLException e) 
    {  out.print(e);
    }
%>
</BODY></HTML>
例子3
QueryBean.java
package database.operation;
import java.sql.*;
public class QueryBean
{   String databaseName="";        //数据库名
   String tableName="";           //表名
   String user=""       ;         //用户
   String secret="" ;            //密码 
   StringBuffer queryResult;     //查询结果
   public QueryBean()
   {  queryResult=new StringBuffer();
      try{  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
         }
      catch(Exception e) {} 
   }
   public void setDatabaseName(String s)
   {  databaseName=s.trim();
      queryResult=new StringBuffer();  
   }
   public String getDatabaseName()
   {  return databaseName;
   }
   public void setTableName(String s)
   {  tableName=s.trim();
      queryResult=new StringBuffer();
   }
   public String getTableName()
   {  return tableName;
   }
   public void setSecret(String s)
   {  secret=s.trim();
      queryResult=new StringBuffer();
   }
   public String getSecret()
   {  return secret;
   }
   public void setUser(String s)
   {  user=s.trim();
      queryResult=new StringBuffer();
   }
   public String getUser()
   {  return user;
   } 
   public StringBuffer getQueryResult()
   {  Connection con;
      Statement sql; 
      ResultSet rs;
     try { queryResult.append("<table border=1>"); 
           String uri= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName="+databaseName;
           String id=user;
           String password=secret;
           con=DriverManager.getConnection(uri,id,password);
           DatabaseMetaData metadata=con.getMetaData();
           ResultSet rs1=metadata.getColumns(null,null,tableName,null);
           int 字段个数=0;
           queryResult.append("<tr>");
           while(rs1.next())
            { 字段个数++;
              String clumnName=rs1.getString(4);
              queryResult.append("<td>"+clumnName+"</td>");
            }
           queryResult.append("</tr>");
           sql=con.createStatement();
           rs=sql.executeQuery("SELECT * FROM "+tableName);
           while(rs.next())
           {  queryResult.append("<tr>");
              for(int k=1;k<=字段个数;k++) 
               {  queryResult.append("<td>"+rs.getString(k)+"</td>");
               }
              queryResult.append("</tr>");
           }
           queryResult.append("</table>");
           con.close();
          }
      catch(SQLException e)
         {  queryResult.append("请输入正确的用户名和密码");
         }
      return queryResult;
  }    
}     
inquire.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="database.operation.QueryBean" %> 
<jsp:useBean id="base" class="database.operation.QueryBean" scope="session"/>
<jsp:setProperty  name= "base"  property="*" />
<HTML><Body bgcolor=cyan><Font size=2>
<FORM action="" Method="post" >
   输入数据库名: <Input type=text name="databaseName" size=8>
   输入表的名字: <Input type=text name="tableName"  size=8>  
  <br>输入用户名:<Input type=text name="user" size=6>
   输入密码:  <Input type="password" name="secret" size=6>     
  <Input type=submit name="g" value="提交">
</Form>
   在<jsp:getProperty name="base" property="tableName"/>表查询到记录:
<BR> <jsp:getProperty name="base" property="queryResult"/>
</Font></Body></HTML>
例子4
RandomQueryBean.java
package database.operation;
import java.sql.*;
import java.util.*;
public class RandomQueryBean
{   String databaseName="";             //数据库名称
   String tableName="";                //表的名字
   int count;                          //记录总数
   int randomNumber;                   //随机输出的记录数
   StringBuffer randomQueryResult;     //查询结果
   Connection con;
   Statement sql; 
   ResultSet rs; 
   public RandomQueryBean()
   {  randomQueryResult=new StringBuffer();
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值