问题1:
后台java使用什么数据类型来接收前台的几百字文本?
答:一般在后台只能看到数字和字符,不能准确的看出链接的入口;Java后台只能用字符串类型接收和前台传来的参数。
问题2:
创建text数据库类型的表
答:
create table userinfo
(
id int primary key not null identity (1,1),
[name] char(20) unique,
age int check(age>10),
sex char(2)
)
建议一个名叫userinfo的表,字段为
id ,自动+1,主键,不为空!
name ,char(20) 不重复!
age int类型,年龄必须大于10,否则会出现错误!
sex 性别 char(2)
问题2:
创建数据库时提示You have an error in your sql syntax
答:因为creat table update();缘故,update时sql的关键字,不能用来做表名。
问题3:
从数据库中查找到一条数据,如何将数据的值用来构建一个新的对象?
答:通过连接数据库,生成
String sql="select * from gengxin where id="+id;
Statement stat = null;
ResultSet rs = null;
Connection conn = new DBHelper().getConn();
update cnbean=new update();
try{
stat = conn.createStatement();//Statement对象用来向数据库发送查询和命令
rs = stat.executeQuery(sql);
while(rs.next()){
cnbean.setText(rs.getString("message"));
}
问题4:
Error setting expression 'message' with value ['hhhh', ];
问题描述:
在文本框中输入信息之后,点击更新按钮,后报错,信息如上;
百度的结果:
Action不能设置表单中相应参数值给Action类中的属性,可能是出现了Action中没有相应属性的getter和setter方法、或是表单中的name属性的值和Action的属性名不一致。例:当你的form中比如有个输入框,当提交到Action时不能正确的将此loginName参数的值赋给Action中的loginName属性。此时就有可能是以上错误。
个人思路:
1、问题归结于mysql的驱动包问题,下载安装驱动包,结果仍旧一样;
2、无法跳转到测试页面-success.jsp,可能是struts.xml文件配置的问题,添加到具体路径/WEB-INF/success.jsp,仍旧无法解决问题;
3、认为时前台form提交数据没有和Java中的属性值对应上,经过检查代码(反复测试了很久),最后以为是setMessage()名字Message没有大写导致,改过仍旧无法解决。
4、认为是action默认方法execute()无法使用,因为会提示overrides com.opensymphony.xwork2.ActionSupport.execute;所以百度无解,换成自己的方法mymethod(),仍旧无法解决。
5、网上百度,得知忽视类名必须首字母大写,所以重新写类,无法解决;
6、看到以前的项目,都是通过javaBean函数作为中介,进行传值存储,而不是直接将action类作为数据库存储的调用者,所以新增bean类,间接调用存储前台数据,但是仍旧无法解决问题,
测试断点:
通过写输出函数System.out.println()的输出信息,来判定在那一段代码出现了问题,
1、在action类中,最后有输出的语句是在
UpdateDao test1=new UpdateDao();
System.out.println("到达dao包");//能够输出
test1.Add(ud);//调用dao包的add函数无法输出
2、进入dao包中的UpDateDao类中进行测试,最后的输出语句在
Statement stat = null;
ResultSet rs = null;
Connection conn = new DBHelper().getConn();
System.out.println("连接到数据库!"+"sql语句为:"+sql);//输出正常
try{
stat = conn.createStatement();
System.out.println("插入数据到数据库!");//没有输出
stat.executeUpdate(sql);
System.out.println("插入数据到数据库!");
} catch (SQLException e) {
e.printStackTrace();
}
大问题:stat = conn.createStatement();
2018年9月12日结
继续设置断点,发现断点在com.db包中的,数据库连接语句上conn=DriverManager.getConnection(dbUrl,dbUser,dbPassword);无法回馈下一步操作,即之后输不出console信息,语句意思是返回的conn就是一个数据库连接对象,通过它你就可以对这个数据库做添删改查动作了。
CSDN:在使用这句语句时,要加一个强转(Connection),(Statement)不然类型不匹配。。。
换电脑测试运行,发现另一台电脑更改mysql的登录密码,即更改连接语句时,运行输出的console信息仍旧是上台电脑的MySQL密码,即语句未改变。猜测可能是conn对象每次用过之后没有关闭连接,导致连接次数到上线,一直存储的是上次的conn对象的数据。
2018年9月13日结
再次通过设置断点,查看UpdateDao包中conn对象的返回输出,发现是null,所以进一步进入连接池设置断点,以前测试在conn= DriverManager.getConnection(url); 之后就无输出,所以很明显conn也是一个空对象;
通过csdn询问为何conn= DriverManager.getConnection(url)会返回null,得到原因是没有 classes12.jar,所以继续设置断点:
try{
System.out.println("进入Class.forName!");//有输出
Class.forName(jdbcName);
System.out.println("驱动成功!");//无法输出
}
所以应该是此处有问题,是打包的时候没有吧mysql的jar包打到包里,用eclipse的fat插件重新打了次包就好了。
导包步骤,需要选中项目文件夹,点击右键,单击properties,单击Java Build Path.选中栏目中的Add JARs。找到lib目录下的mysql包就行了(事先已经拷贝了一份到lib目录下)
问题5:
解决上述问题,继续报错:
The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
答:问题struts.xml配置并无问题,result返回与struts.xml文件中的name属性一致,能够调用到actin的类,能够到达返回result的那一步,就是接收不到返回的result。
问题五:
如何将数据库的内容提取出来,通过javabean实例化之后传给前台,前台不需要提交请求,直接展示到页面中?
答:通过修改UpdateDao类中的返回语句:return "success";即可正常跳转。