sty3318 2010-08-30 21:05
浏览 239
已采纳

请指教,很急,谢谢

源文件:
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.Map;

import com.sty.hibernate.model.Student;

public class Session {
// ping sql 需要这些配置方法,但成员变量中不能有语句,所以写一个构造方法
String tableName = "_student";
Map cfs=new HashMap();//为什么用map字段名与属性名一一对应

// 因为?中有int和string的类型,插入数据的方法不统一,所以采用了hibernate的反射机制,即下面的
String[] methodName;//某个属性对应的调用某个方法名,然后存到字符数组里;String[] methordName=new String[cfs.size()];
//放在这是错误的,因为还没初始化

public Session(){
cfs.put("_id", "id");//数据库中的_id对应属性id
cfs.put("_name", "name");
cfs.put("_age", "age");
methodName=new String[cfs.size()];
}
//这样当调用craateSQL时map、tableName中就有值了
public void save(Student s) throws Exception {

// String TableName = "_Student";
// Map cfs=new HashMap();//为什么用map字段名与属性名一一对应
// cfs.put("_id", "id");//数据库中的_id对应属性id
// cfs.put("_name", "name");
// cfs.put("_age", "age");
// 此部分应该写在配置文件里

String sql=createSQL();
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/hibernate","root","sty");
PreparedStatement ps=conn.prepareStatement(sql);
for(int i=0;i<methodName.length;i++){//先拿到方法,然后执行方法,然后执行返回结果,再将其结果添加到?中去
Method m=s.getClass().getMethod(methodName[i]);//getClass()先拿到student类,getMethod(mName)将method的名字传入
Class r=m.getReturnType();//获取返回的class类型
System.out.println(r.getName()+"|"+m.getName());
if(r.getName().equals("java.lang.String")){
String returnValue=(String)m.invoke(s);//m.invoke(obj, args)因为没有参数所以省略args;m.invoke(s)返回的是object类型

ps.setString(i+1, returnValue);
}
if(r.getName().equals("int")){
Integer returnValue=(Integer)m.invoke(s);//m.invoke(obj, args)因为没有参数所以省略args;m.invoke(s)返回的是object类型

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);//获取cfs.put("_id", "id");中value的值,即id
v=Character.toUpperCase(v.charAt(0))+v.substring(1);//方法名的首字母改为大写
methodName[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);

String sql="insert into"+tableName+"("+str1+")"+"values ("+str2+")";

return sql;
}

}

问题提示:
int|getId
int|getAge
java.lang.String|getName
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'hibernate.into_student' doesn't exist
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.Util.getInstance(Util.java:384)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2409)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2327)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2312)
at Session.save(Session.java:60)
at StudentTest.main(StudentTest.java:11)

不知道是什么原因,谢谢
数据库是MySQL,其他配置正常

  • 写回答

2条回答 默认 最新

  • weixin_42525443 2010-08-31 11:11
    关注

    String sql="insert into<空格>"+tableName+"("+str1+")"+"values ("+str2+")";

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题