问题集合-解决方法1

问题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";即可正常跳转。

 

 

你可能感兴趣的:(个人网站开发问题与解决方法)