代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_Web开发

初学jsp遇到数据库连接处理有关问题

发布时间:2018-08-16浏览(2106)

    初学jsp遇到数据库连接处理问题
    首先是我的处理数据库连接的java代码部分


    package jspex;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;

    import javax.servlet.jsp.jstl.sql.Result;
    import javax.servlet.jsp.jstl.sql.ResultSupport;

    public class DBHelper {

    private static final String className = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    private static final String url = "jdbc:sqlserver://localhost:1433;databasename=studentm";
    private static final String uname = "sa";
    private static final String upass = "c111111";

    public static Connection getConn(){
    Connection conn = null;
    try{
    Class.forName(className);
    conn = DriverManager.getConnection(url,uname, upass);
    } catch(Exception e){
    e.printStackTrace();
    }

    return conn;
    }

    public static void closeConn(Connection conn){
    try{
    if(conn!=null){
    conn.close();
    }
    } catch(Exception e){
    e.printStackTrace();
    }
    }
    public static void closePstmt(PreparedStatement pstmt){
    try{
    if(pstmt!=null){
    pstmt.close();
    }
    } catch(Exception e){
    e.printStackTrace();
    }
    }
    public static void closeRs(ResultSet rs){
    try{
    if(rs!=null){
    rs.close();
    }
    } catch(Exception e){
    e.printStackTrace();
    }
    }
    public static boolean runupdatesql(String sql,Object[]params){
    Connection con=null;
    PreparedStatement ps=null;
    try{
    con=getConn();
    ps=con.prepareStatement(sql);
    for(int i=0;i<params.length;i++){
    ps.setObject(i+1, params[i]);
    }
    ps.executeUpdate();
    return true;
    }catch(Exception e){
    e.printStackTrace();
    return false;
    }
    finally{
    try{
    ps.close();
    con.close();
    }
    catch(Exception e){
    e.printStackTrace();
    }
    }
    }
    public static Result runselectsql(String sql,Object[]params){
    Connection con=null;
    PreparedStatement ps=null;
    ResultSet res=null;
    Result result=null;
    try{
    con=getConn();
    ps=con.prepareStatement(sql);
    for(int i=0;i<params.length;i++){
    ps.setObject(i+1, params[i]);
    }
    res=ps.executeQuery();
    result=ResultSupport.toResult(res);
    }
    catch(Exception e){
    e.printStackTrace();
    }
    finally{
    try{
    res.close();
    ps.close();
    con.close();
    }catch(Exception e){
    e.printStackTrace();
    }

    }
    return result;
    }
    }




    我的网页代码,为了方便发现问题,我把js相关的功能注释掉了

    <html>
      <head>
        <title>reg</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <style type="text/css">
     #loginform{
     width:300px;
     height:auto;
     }
     label{
     width:60px;
     height:30px;
     text-align:left;
     font-size:14px;
     font-weight:hold;
     vertical-align:bottom;
     }
     .inpute{
     width:160px;
     height:20px;
     }
     .row{
     width:300px;
     height:30px;
     }

     </style>
     <script type="text/javascript">
     function checkform(){
     var name=document.getElementById("uid");
     var pass=document.getElementById("pwd");
     /*var rpass=document.getElementById("rpwd");*/
     if(name.value.length<=0){
     alert("用户名不能为空");
     name.focus();
     return false;
     }

     if(pass.value.length>=8){
     alert("密码长度不对");
     pass.focus();
     return false;
     }

     /**if(pass!=rpass){
     alert("密码不一致");
     return false;
     }**/
     return true;
     }
     </script>
      </head>
      
      <body>
      <div id="loginform">
      <form  onsubmit="return checkform();"action="doreg.jsp" method="post">
      <div class="row">
      <label for="uid">用户名: </label>
      <input name="uid" type="text" class="inpute" id="uid">
      </div>
      <div class="row">
      <label for="pwd">密码:  </label>
      <input name="pwd" type="password" class="inpute" id="pwd">
      </div>
       </div>
      <!--  <div class="row">
      <label for="rpwd">确认密码:</label>
      <input name="rpwd" type="password" class="inpute" id="rpwd">
      </div> --> 
      <div class="row">
      <input type="submit" value="注册"/><input type="reset" value="重新填写"/>
      </div>
      </form>
      
      </div>
      </body>
    </html>


    然后是连接数据库判断用户名是否存在,不存在则可以注册的代码部分,运行后不管输入什么,都是只打印出“注册失败,用户名已存在”

    <%
      String uid=request.getParameter("uid");
      String pwd=request.getParameter("pwd");
      Object[] params={uid};
      String sql ="select count(*)from tb_vip where userid=?";
      Result result=DBHelper.runselectsql(sql, params);
      if(result.getRowCount()==0){
      Object[]paramss={uid,pwd};
      String sqll="insert into tb_vip values(?,?)";
      if(DBHelper.runupdatesql(sqll, paramss)){ 
      out.print("已经成功注册");
      }else{out.print("服务器问题请与客服联系");}}
     else{
      out.print("注册失败,用户名已存在");
      }
       %>

    发现问题后,我运行了最简单的注册部分代码,发现功能正常

    <%
      String uid=request.getParameter("uid");
      String pwd=request.getParameter("pwd");
      Object[]paramss={uid,pwd};
      String sqll="insert into tb_vip values(?,?)";
     
      if(DBHelper.runupdatesql(sqll, paramss))
      { 
      out.print("已经成功注册");
      }
      else
      out.print("服务器问题请与客服联系");

       %>

    初学jsp,敲了一下简单的代码就出错了,很是头疼,希望大家可以帮帮我
    ------解决思路----------------------
    引用:
    Quote: 引用:

    select count(*)from tb_vip where userid=?
    你这里需要一个空格,你知道吗,count(*)和from之间
    查询语句写错了


    我用的数据库是SQL Server,我试过了,这样写没问题的,因为有小括号作为标志

    没错也要改过来。你这样很不规范,而且其他的数据库不一定支持
    ------解决思路----------------------
    http://wenku.baidu.com/link?url=DclIlmV-zAV6IMWWcUe4Jgo6WPRAJfRxKbk3Qcrl_qe5TiijhJ6MqtCuQH8HrNVW6zRpFLgnwvp2l_fBHHx9L1-3KbTSYds-3LfHs_7TWfu
    ------解决思路----------------------
    连接数据库没问题,就多print打一下输出。你老错是因为你的写法就不规范。哪有都用Object呀,这样的prepareStatement的功能何处体现。