数据库中有这样一组数据:pid=p1001 pname="mp3" price=200
现有如一个javabean,如下package ajax.biz;
import java.sql.*;
public class Product
{
private String productId=null;
private String productName=null;
private double productPrice=0;
private int productsNum=0;
public Product(String productId)
{
String sql="select pid,pname,price from products where pid=?";
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try
{
Class.forName("org.gjt.mm.mysql.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost/ajax?useUnicode=true&CharacterEncoding=utf-8","root","123");
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,productId);
rs=pstmt.executeQuery();
if(rs.next())
{
this.productId=rs.getString(1);
this.productName=rs.getString(2);
this.productPrice=rs.getDouble(3);
this.productsNum=1;
}
rs.close();
pstmt.close();
conn.close();

}
catch(Exception e)
{
e.printStackTrace();
} }

public String getProductId()
{
return productId;
}
public void setProductId(String productId)
{
this.productId=productId;
}
public String getProductName()
{
return productName;
}
public void setProductName(String productName)
{
this.productName=productName;
}
public int getProductsNum()
{
return productsNum;
}
public void setProductsNum(int productsNum)
{
this.productsNum=productsNum;
}
public double getProductPrice()
{
return productPrice;
}
public void setProductPrice(double productPrice)
{
this.productPrice=productPrice;
}

} 有一个jsp页面:
<%@ page import="ajax.biz.*" contentType="text/html;charset=utf-8"%>
<%try{

Product product=new Product("p1001");
out.println(product.getProductName());
out.println(product.getProductsNum());
out.println(product.getProductId());
}
catch(Exception e)
{
out.println(e.toString());
}
%>
这个jsp页面的输出结果为什么是null 0 null?

解决方案 »

  1.   

    改写一下代码看看:
    while(rs.next())
                {
                    this.productId=rs.getString(1);
                    this.productName=rs.getString(2);
                    this.productPrice=rs.getDouble(3);
                    this.productsNum=1;
                }
      

  2.   

    rs.next 进行读取结果集的下一条数据 成功为true 不成功为false 
    while(rs.next) //就是 将rs全部进行读取 
    if(rs.next) //rs进行读取一次 判断是否有数据 
      

  3.   

    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con=java.sql.DriverManager.getConnection("jdbc:mysql://localhost/ajax?useUnicode=true&CharacterEncoding=utf-8","root","123");
      

  4.   

    package JavaBean;import java.sql.*;public class Bean{
    public Bean()
    {
    }
    private String DbName = "nacs";
    private String pass = "";
    private String url = "";
    private Connection con = null;
    private Statement stmt = null;
    private ResultSet rs = null;public Connection getConn()
    {
    try
       {
         Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
         url ="jdbc:mysql://localhost/"+DbName+"?user=root&password="+pass+"&useUnicode=true&characterEncoding=UTF-8";
         con= DriverManager.getConnection(url); 
         stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
        }
    catch (Exception e)
       {
    e.printStackTrace();
       }
       return con;
     }public ResultSet selectLog(String sql)
    {
    try
    {
    rs = stmt.executeQuery(sql);
    }
    catch(Exception e)
    {
    System.out.println(e.toString());
    }
    return rs;
    }public int updateLog(String sql)
    {
    int count=0;
    try
    {
    Statement stmt= con.createStatement();
         count= stmt.executeUpdate(sql);
    }
    catch (Exception e)
    {

    }
    return count;
    }public void close()
    {
    try
    {
    con.close();
    stmt.close();
    }
    catch (SQLException e)
    {
    }
    }

    这个是mysql的连接 你还要去下一个连接驱动
      

  5.   

      关键你的结果集是否已经有数据了,rs.next 进行读取结果集的下一条数据。没有调用rs.next之前是指向第0条数据。
      

  6.   

    if(rs.next())就是只取第一条记录,也可以的。try
            {
                Class.forName("org.gjt.mm.mysql.Driver");
                conn=DriverManager.getConnection("jdbc:mysql://localhost/ajax?useUnicode=true&CharacterEncoding=utf-8","root","123");
                pstmt=conn.prepareStatement(sql);
                pstmt.setString(1,productId);
                rs=pstmt.executeQuery();
                if(rs.next())
                {
                    System.out.println("ok");----------->看看是否进这个if了
                    this.productId=rs.getString(1);
                    this.productName=rs.getString(2);
                    this.productPrice=rs.getDouble(3);
                    this.productsNum=1;
                }
                rs.close();
                pstmt.close();
                conn.close();
                System.out.println(productId+" "+productName+" "+productPrice );-->再看看这里输出什么
            }
      

  7.   

    使用while(rs.next())再判断你的值是否已经查询出来了
      

  8.   

    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      

  9.   

    先看下你数据是否有数据.....
    然后再看下你rs.NEXT()是否执行.
    饿~~~~~~~~7楼正解
      

  10.   

    if(rs.next())
                {
                    this.productId=rs.getString(1);
                    this.productName=rs.getString(2);
                    this.productPrice=rs.getDouble(3);
                    this.productsNum=1;
                }
    if改成while