如题 代码如下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);
}不知什么原因,大牛们给小弟解释解释???
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);
}不知什么原因,大牛们给小弟解释解释???
解决方案 »
- 客户端调用Https Webservice关于安装证书的问题
- james无法启动问题
- Hibernate插入操作时报value larger than specified precision allows for this column错误
- 关于JSON的中文编码问题
- 请问JNDI数据库连接java:comp/env/jdbc/mydb在那里设置?
- servlet传中文显示乱码,请教。
- hibernate开发工具
- 运行Java程序时的提示,本人看不明白,高手指教
- 急!我在j2sdk1.3.1中把jsp文件放到public_html里,但bean放哪?
- 关于ResultSet
- Java操作SQL Server数据库 睡眠进程
- java 在java解惑中 看到一个字眼 叫 性能临界环境。有大虾给解释下不
以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
你看看你的r呀 肯定是横向等的....String getName()
以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
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);
}
所以就会这样了:因为你判断的是类的方法类型!
String getName() 以 String 的形式返回此 Class 对象的名称
原来后面有分号????
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判断成立的所执行的部分,简单的说,这是两个部分了。分号“;”前是一部分,分号后是另一部分所以,你永远看到{}里面的内容永远执行
才会是true呢?
{ 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