如题 代码如下import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;public class Session
{

String tableName = "_student";
Map<String, String> cfs = new HashMap<String, String>();
    String methodNames[];
public Session()
{
        cfs.put("_id", "id");
        cfs.put("_name", "name");
        cfs.put("_age", "age");
        methodNames = new String[cfs.size()];
}
    
public void save(Student s) throws Exception
{
String sql = createSQL();
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/hibernate","root","feifei");
PreparedStatement ps = conn.prepareStatement(sql);

for(int i = 0; i < methodNames.length; i++)
{
System.out.println(methodNames[i]);
Method m = s.getClass().getMethod(methodNames[i]);
Class r = m.getReturnType();

//System.out.println(r.getName().equals("java.lang.String"));
if(r.getName().equals("java.lang.String"));///这句总会正确执行
{
String returnValue =  m.invoke(s) + "";
ps.setString(i+1, returnValue);
}
if(r.getName().equals("int"));          //这句总会正确执行 {
Integer returnValue = (Integer)m.invoke(s);
ps.setInt(i+1, returnValue);
}
}

    ps.executeUpdate();
    ps.close();
    conn.close(); } private String createSQL() 
{
String str1 = "";
        int index = 0;
for(String s : cfs.keySet())
{
String v =cfs.get(s);
v = Character.toUpperCase(v.charAt(0)) +v.substring(1);
methodNames[index] = "get" + v;
str1 += s +",";
index++;
}
str1 = str1.substring(0,str1.length()-1);
String str2 = "";
for(int i = 0; i < cfs.size(); i++)
{
str2 += "?,";
}
str2 =str2.substring(0,str2.length()-1);
System.out.println(str2);
String sql ="insert into " + tableName + "(" + str1 + ")"
 + "values(" + str2 + ")";
System.out.println(sql);
return sql;
}  
}
Student 代码public class Student 
{
private int id;
private String name;
private int age;

public void setId(int id)
{
this.id = id;
}

public int getId()
{
return id;
}

public void setName(String name)
{
this.name = name;
}

public String getName()
{
return name;
} public void setAge(int age)
{
this.age = age;
}

public int getAge()
{
return age;
}
}
                           if(r.getName().equals("java.lang.String"));///这句总会正确执行
{
String returnValue =  m.invoke(s) + "";
ps.setString(i+1, returnValue);
}
if(r.getName().equals("int"));          //这句总会正确执行 {
Integer returnValue = (Integer)m.invoke(s);
ps.setInt(i+1, returnValue);
}不知什么原因,大牛们给小弟解释解释???

解决方案 »

  1.   

    getName() 返回的是String,永远为真一点也不奇怪,应该仔细看看JDK,不要瞎写代码。
      

  2.   

     String getName() 
              以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。 
      

  3.   

    Class r = m.getReturnType();
    你看看你的r呀  肯定是横向等的....String getName()  
      以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
      

  4.   

    String getName()   
      以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
      

  5.   

    Student s
    Method m = s.getClass().getMethod(methodNames[i]);
    Class r = m.getReturnType();
    public String getName()
    {
    return name;
    }/System.out.println(r.getName().equals("java.lang.String"));
    if(r.getName().equals("java.lang.String"));///这句总会正确执行

    String returnValue = m.invoke(s) + "";
    ps.setString(i+1, returnValue); 

    if(r.getName().equals("int")); //这句总会正确执行{ 
    Integer returnValue = (Integer)m.invoke(s);
    ps.setInt(i+1, returnValue);
    }
    所以就会这样了:因为你判断的是类的方法类型!
      

  6.   

    问题就在这!!!!
    String getName()   以 String 的形式返回此 Class 对象的名称
      

  7.   

    if(r.getName().equals("int")); //这句总会正确执行
    原来后面有分号????
      

  8.   

    if(r.getName().equals("java.lang.String"));///这句总会正确执行多了一个分号
      

  9.   

    对了,正常的判断语句,如果成立,是执行紧跟在后面的语句,但是你用分号了,说明分号后面的语句不是这个判断内需要执行的语句,呵呵,表达能力不强,看代码,就拿这个来说吧
    if(r.getName().equals("java.lang.String"));///这句总会正确执行

    String returnValue = m.invoke(s) + "";
    ps.setString(i+1, returnValue); 
    }

    if(r.getName().equals("java.lang.String"))

    String returnValue = m.invoke(s) + "";
    ps.setString(i+1, returnValue); 
    }
    是不一样的,前面是你的代码,你在if()加了分号"if();",导致了在{}里面的代码块不属于if判断成立的所执行的部分,简单的说,这是两个部分了。分号“;”前是一部分,分号后是另一部分所以,你永远看到{}里面的内容永远执行
      

  10.   

    1楼说的未必对9楼是重点还有 我这么觉得只有 name = "java.lang.String" 这句r.getName().equals("java.lang.String")
    才会是true呢?
      

  11.   

    public class TestMain
    {    private String name = "";
        public String getName()
        {
            return name;
        }
        public void setName(String name)
        {
            this.name = name;
        }
        /**
         * @param args
         */
        public static void main(String[] args)
        {
            System.err.println(new TestMain().getName().equals("java.lang.String"));
        }} 我这结果输出的它就是false