代码结构如下求教try 
    { 
      
      Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
      String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test"; 
//你的数据库的 
String user="sa"; 
String password="1234 
Connection con= DriverManager.getConnection(url,user,password);
      Statement stmt2=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  Statement stmt1=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
  String sql5="select * from dbo.t_OCMS  where f_contractNO='"+f_contractNO+"' "; 
  ResultSet rs5=stmt2.executeQuery(sql5);
out.print(rs5.next());
       if(rs5.next()) 
{
         stmt2.executeUpdate(sqlString);
 out.print(rs5.next());
}
else
{
stmt2.executeUpdate(sqlString2);
}

      con.close();
    }
 catch(SQLException e1) 
    {
      out.print("SQL异常");
    }其中 String1是一句insert 语句
String2 是一句UPDATE语句
用rs5语句来查找是否有和输入的contractNO变量一样的记录,如果有的话(rs5.next())一定是true;
这样执行INSERT,否则为修改执行过程中该值一直为false,不明白什么原因,请教该如何写另外请教一个问题,SQL08,用UTF-8的编码JSP写入中文怎么都是乱码,请教如何查看数据库的编码类型,和解决方法
表单sqlsqlserver

解决方案 »

  1.   

    out.print(rs5.next()); //游标下移一次
           if(rs5.next())  //至少有两行数据,这里才能为true
            {
             stmt2.executeUpdate(sqlString);
             out.print(rs5.next()); 
            }正常人都用select count(*) from xxx看看结果是否为0来执行判断操作。
      

  2.   

    如果只有一条数据 ,if(rs5.next())  这个就不会走了。
      

  3.   

    恩,本意是想看下RS5的遍历状态,这明显错误改掉了,但是此语句貌似仍然是只能UPDATE不能INSERT另外求教编码乱码问题
      

  4.   

    多谢各位大能悉心解答求教继续,JAVA苦手<%@ page contentType="text/html;charset=utf-8" %>
    <%@ page import="java.sql.*" %>
    <%!
    public String codeToString(String str)
    {//处理中文字符串的函数
      String s=str;
      try
        {
        byte tempB[]=s.getBytes("utf-8");
        s=new String(tempB);
        return s;
       }
      catch(Exception e)
       {
        return s;
       }  
    }
    %>
    <%//接收客户端提交的数据
      String f_chargetime=codeToString(request.getParameter("f_chargetime"));
      

  5.   

    你看看是不是页面传输的时候出问题  你可以弄个过滤器 把request和response的编码都设置为utf-8  在不行区看看是不是sqlserver里面存储编码的问题
      

  6.   

    使用以上代码的时候,仍然无法执行
    if(rs5.next()) 
            {
             stmt2.executeUpdate(sqlString);这短语句,
    新建的没法执行
      

  7.   

     ResultSet rs5=stmt2.executeQuery(sql5); 这个有数据吗 
      

  8.   

    这个有,依据是sqlstring2 的update语句
    stmt2.executeUpdate(sqlString2)可以执行,有返回值写到数据库内
      

  9.   

    不要误人子弟好不好?看过api吗?照你这么说,那岂不是只有一行数据的时候就无法取值了?
    看看API怎么说的:
    boolean next()
                 throws SQLException将光标从当前位置向前移一行。ResultSet 光标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。 
    当调用 next 方法返回 false 时,光标位于最后一行的后面。任何要求当前行的 ResultSet 方法调用将导致抛出 SQLException。如果结果集的类型是 TYPE_FORWARD_ONLY,则其 JDBC 驱动程序实现对后续 next 调用是返回 false 还是抛出 SQLException 将由供应商指定。 
    如果对当前行开启了输入流,则调用 next 方法将隐式关闭它。读取新行时,将清除 ResultSet 对象的警告链。 
    返回:
    如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false 
    抛出: 
    SQLException - 如果发生数据库访问错误或在关闭的结果集上调用此方法
         ResultSet rs5=stmt2.executeQuery(sql5);out.print(rs5.next());
           if(rs5.next()) 
    {         stmt2.executeUpdate(sqlString);         out.print(rs5.next());        }        else        {            stmt2.executeUpdate(sqlString2);        }         
    出现楼主这种情况,问题原因在于out.print(rs5.next()); 如果只有一行,那么这句代码将会使游标下移。再进行if(rs5.next())判断时,因为前一句代码已经使游标移到最后一行,所以这里始终是false。
    这才是根本原因。
      

  10.   

    现在去掉那条out.print(rs5.next());
    状态是UPDATE不报错,INSERT就报错
    catch(SQLException e1) 
        {
          out.print("SQL异常");
        }直接抓到这条SQL异常
      

  11.   

    jsp如果传递中文到后台,服务器是tomcat,那么,默认编码是iso8859-1,这时,在后台你需要进行转码
    new String(param.getBytes("iso8859-1"), "UTF-8")
      

  12.   


    多谢,每个变量都是使用这个函数变更?public String codeToString(String str)
    {//处理中文字符串的函数
      String s=str;
      try
        {
        byte tempB[]=s.getBytes("utf-8");
        s=new String(tempB);
        return s;
       }
      catch(Exception e)
       {
        return s;
       }  
    }
    这个函数应该如何改写?
      

  13.   

    不要误人子弟好不好?看过api吗?照你这么说,那岂不是只有一行数据的时候就无法取值了?
    看看API怎么说的:
    boolean next()
                 throws SQLException将光标从当前位置向前移一行。ResultSet 光标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。 
    当调用 next 方法返回 false 时,光标位于最后一行的后面。任何要求当前行的 ResultSet 方法调用将导致抛出 SQLException。如果结果集的类型是 TYPE_FORWARD_ONLY,则其 JDBC 驱动程序实现对后续 next 调用是返回 false 还是抛出 SQLException 将由供应商指定。 
    如果对当前行开启了输入流,则调用 next 方法将隐式关闭它。读取新行时,将清除 ResultSet 对象的警告链。 
    返回:
    如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false 
    抛出: 
    SQLException - 如果发生数据库访问错误或在关闭的结果集上调用此方法
         ResultSet rs5=stmt2.executeQuery(sql5);out.print(rs5.next());
           if(rs5.next()) 
    {         stmt2.executeUpdate(sqlString);         out.print(rs5.next());        }        else        {            stmt2.executeUpdate(sqlString2);        }         
    出现楼主这种情况,问题原因在于out.print(rs5.next()); 如果只有一行,那么这句代码将会使游标下移。再进行if(rs5.next())判断时,因为前一句代码已经使游标移到最后一行,所以这里始终是false。
    这才是根本原因。
    大哥还帮api 翻译了一遍,说的不错。我理解是只有一条数据,游标上面一个out 之后,rs5就会false走到下面的去了。
      

  14.   

    遍历的目的是,通过一个不重复的关键值 f_contractNO,来查找数据库内有无重复的记录,如果有,那取得数据的行为就是更新该条数据如果没有,那就要INSERT插入一条所以使用 if(rs5.next()) {}来判断条件不过,还有INSERT无法执行这个问题,很奇怪
      

  15.   

    一般jsp写入中文乱码都是使用过滤器处理,这个网上一搜一大堆。如果是insert报错,那么报的什么异常呢。没有异常信息,分析不出到底是什么原因导致的错误。
    可能是sql语句语法有问题,也可能是不能为空的字段插入了空值...原因不少。