题记: 这是我第一次写关于计算机专业技术的文章,这篇文章对我来说可是意义非凡啊,呵呵。它是一个记录点,一个我成长过程中的记录点。

       正文:这几天我花了一些课余时间完成了这个小项目,主要实现数据库查询分析器的增删改查功能。页面比较简陋,没有做什么华丽的修饰。只是为了表达出我做这 个网页版数据库查询分析器的具体思路。由于水平有限,有些实现方式可能会略显粗糙,希望大家能提出更好的建议,互相交流学习。

                 项目所达到的效果:在JSP页面中的文本域(页面被一条标尺线分为两半,文本域在上半部分)中输入SQL的增删改查语句,点击提交按钮,页面的下半部分则会输出数据。

                  项目的主要实现步骤如下:

                  1.  在MyEclipse开发环境中导入数据库驱动(我使用的数据库是SQL Server 2005 ,驱动可在微软官网中下载。),具体操作:在项目名下点鼠标右键——》选择Build Path— —》点击add extenal archives— —》找到你放驱动的位置,双击即可。

2. 在项目的WEB-ROOT文件夹下创建一个名为:Th.jsp的JSP文件。该JSP页面的代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <%@ page import="java.sql.*"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
   <head>
           <script. language="javascript">       <!-- 这个javascript函数是用来接收页面文本域的值的。-->             function getForms(){
             document.forms.submit();
             }
          </script>
   </head>
   
   <body>  <form. name="forms" method="post">
             <center> 
             <p>请输入SQL语句:</p> <p><textarea rows="5" cols="45" name="textarea" ></textarea></p> 
             <input type="submit" name="submit" value="提交" nclick="getForms()"/>
             </center>
         </form><hr/>
           
           
           <%     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();  //导入数据库驱动
                String url = "jdbc:sqlserver://localhost:1433;DatabaseName=studentinfo";
              
               String name = "XXX";   //name和psw变量是用于存放数据库的用户名和密码的,本文中就用XXX代替
               String psw = "XXX"; 
              Connection conn = DriverManager.getConnection(url, name, psw);          //获取一个数据库连接
               PreparedStatement pstate = null;           //声明一个用于执行SQL语句的PreparedStatement类型的对象             ResultSet  rs = null ;             //用于存放查询数据的结果集
             
     
             String sql = request.getParameter("textarea");  //获取文本域中输入的值
             
             int count = 0 ;      //count变量是用来计算修改记录的次数的。
             
             if(sql!=null)            
            {   
                 String s =  sql.substring(0,6).toLowerCase();                     //获取sql的前6个字符串,并将它们转化为小写
                 if(s.equals("update")||s.equals("insert")||s.equals("delete"))   
                 {    pstate = conn.prepareStatement(sql) ;                            //执行SQL语句
                      count = pstate.executeUpdate();
                      System.out.println("记录修改成功,共修改了 "+count+" 次!");  
                 }
                 
          if(s.toLowerCase().equals("select")){
            pstate = conn.prepareStatement(sql);
            rs = pstate.executeQuery();     //将查询到的数据存放在rs结果集中。 
                    
       while(rs.next()){
        %>         //对查询到的数据进行输出,不过,值得注意的是数据库中的每一张表的结构不可能都相同,所以输出的类    型也会不同。本文的后面会提到一个解决思路。     <center><p><%=rs.getString(1)%>--                                                 
                            <%=rs.getString(2)%>--                                      
                           <%=rs.getString(3)%>--      
                            <%=rs.getString(4)%>--      
                           <%=rs.getString(5)%> </p></center>
     <%   
             }
                rs.close();
           }                      
             pstate.close();
             conn.close(); 
     }  
   %>
                  
   </body>
 </html>

      小结:这个小项目本人测试已成功。本文有些细节需要提一下,该项目中连接数据库的方式是使用JDBC接口,其他连接数据库的方式还有JSP+bean和数 据库连接池等。个人认为用数据库连接池技术连接数据库更为方便,高效。不过,对于刚接触连接数据库的人来说,这个技术不易于理解,所以最好是先接触 JDBC或JSP+bean。另外,我使用的执行SQL语句的对象是PreparedStatement 类型的,而不是Statement 类型,PreparedStatement虽然是Statement 的子接口,但是PreparedStatement相比之下更为安全和高效。(具体原因可上网查阅相关资料。)最后,再提一下关于解决查询到的数据输出到 页面问题的思路(这个思路其实是从老师那里问来的,嘿嘿。):输出时不用getString(),getInt()等获取数据类型的方法,而是直接获取表 的列名即getColumnName()方法,但是又衍生出一个问题-------每张表的列名也不会都相同,这就需要在XML中配置了。这个思路的具体 实现方法我也在探索中,如果探索出来了会及时更新到本文中的。