日期:2014-05-17  浏览次数:20412 次

新人的一个小问题
在看视频教程学习jdbc的时候遇到了一个小问题,用的数据库是mysql。
先贴java代码
import java.sql.*;
import java.lang.reflect.*;
public class ORMTest
{
public static void main(String[] args)throws Exception
{
User user = (User)getObj("select id as Id,name as Name,birthday as Birthday,"+
"money as Money from user where id=1",User.class);
System.out.println(user);
}
public static Object getObj(String sql,Class clazz)throws Exception
{
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try
{
conn = JdbcUtils.getConnection();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
String[] colNames = new String[count];
for(int i = 1;i<=count;i++)
{
colNames[i-1] = rsmd.getColumnLabel(i);
}
Object obj = null;
if(rs.next())
{
obj = clazz.newInstance();
for(int i = 0;i<colNames.length;i++)
{
String colName = colNames[i];
String methodName = "set" + colName;
//System.out.println(methodName);
Method[] ms = obj.getClass().getMethods();
for(Method m : ms)
{
if(methodName.equals(m.getName()))
{
/*
if(methodName.equals("setId"))
m.invoke(obj,rs.getInt(colName));
else
*/
m.invoke(obj,rs.getObject(colName));
}
}
}
}
return obj;
}
finally
{
JdbcUtils.free(rs,ps,conn);
}
}
}

在47行的时候有点问题。
在数据库中user表的列分别是id,name,birthday,money。
存储类型分别是Integer,VARCHAR,DATA,FLOAT
这里47行的ResultSet的getObject()方法为什么返回的不是int类型的数据而是long型的?(因为我把类User的成员变量id的类型换成long就运行没有问题)
怎么修改比较好
mysql jdbc

------解决方案--------------------
这个怕是去java问哦,也许就是long
------解决方案--------------------
java没有integer类型吗?还有你发错地方了,这是讨论sqlserver的地方,不是mysql或者java
------解决方案--------------------
这个 就要 看 你 数据库 的 设计 了 看看  你这咧 是 什么 类型
------解决方案--------------------
JAVA语句没问题,把数据量和USER实体类的字段类型在检查一下
------解决方案--------------------
应该是java在处理数据库值时,用的long吧,在处理oracle时,好像也是这样的。