JavaBean与数据库的使用
来源:互联网 发布:php ajax返回json数据 编辑:程序博客网 时间:2024/06/05 16:36
1.实验目的
本实验的目的是掌握怎样在JSP中使用Javabean完成数据的封装操作,并能够使用Javabean操作文件或连接数据库。
2.实验内容
编写一个JSP页面:inputAndShow.jsp和一个名字为car的Javabean,其中car由Car.class类负责创建。
1.inputAndShow.jsp的具体要求
inputAndShow.jsp页面提供一个表单。其中表单允许用户输入汽车的牌号、名称和生产日期,该表单将用户输入的信息提交给当前页面,当前页面调用名字为car的bean,并使用表单提交的数据设置car的有关属性的值,然后显示该car的各个属性的值。
该页面还能够显示已经提交的所有车辆信息。
2.Car.java的具体要求
编写的Car.java应当有刻画汽车号码、名称和生产日期的属性,并提供相应的getXxx和setXxx方法,来获取和修改这些属性的值。Car.java能够将汽车的信息保存到某个文本文档,或者能够将汽车的信息保存到某个数据库中,可由同学们自行选择。
实现代码:
(1) Car.java
package jspBean;import java.sql.*;import com.sun.rowset.*;public class Car { String number;//车牌号 String type;//品牌 String date;//生产日期 int pageSize=10;//每页显示的记录数 int pageAllcount=0;//分页后的总页数 int showPage=1;//当前显示页数 StringBuffer presentPageResult;//显示当前页的内容 CachedRowSetImpl rowSet;//用于存储Result对象 int columns=0;//数据库表的列数 String column[]=new String[100]; Boolean insert=false; public Car() { presentPageResult=new StringBuffer(); try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch(Exception e) {} } public int getPageSize() { return pageSize; } public void queryDataBase()//从数据库中获取查询结果并保存到结果集中 { String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Car"; try { Connection con=DriverManager.getConnection(uri,"sa","123456"); DatabaseMetaData metadata=con.getMetaData(); ResultSet rs1=metadata.getColumns(null,null,"Cars",null); while(rs1.next()) { column[columns]=rs1.getString(4);//获取字段的名字 columns++;//列数加一 } Statement sta=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);//只读 ResultSet rs=sta.executeQuery("select * from Cars"); rowSet=new CachedRowSetImpl();//创建行级对象 rowSet.populate(rs); sta.close(); con.close(); rowSet.last(); int m=rowSet.getRow();//总行数 int n=pageSize;//每页显示记录数 pageAllcount=((m%n)==0)? (m/n):(m/n+1); //计算分页后的总页数 } catch(Exception exp) { } } public void InsertData()//向数据库中插入数据 { String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Car"; try { Connection con=DriverManager.getConnection(uri,"sa","123456"); //String sql="insert into Cars values(,?,?,?)"; String sql="insert into Cars values('"+number+"','"+type+"','"+date+"')"; /* PreparedStatement ps=con.prepareStatement(sql);//创建预编译sql语句 //添加记录 ps.setString(2, number); ps.setString(3,type); ps.setString(4,date); ps.executeUpdate(); ps.close(); */ Statement sta=con.createStatement(); sta.executeUpdate(sql); sta.close(); con.close(); } catch(Exception exp) { } } public void setPageSize(int pageSize) {//设置每页显示的记录数 this.pageSize = pageSize; if(!insert) { queryDataBase(); } } public void setInsert(Boolean insert) { this.insert = insert; if(this.insert) { InsertData(); queryDataBase(); } } public int getPageAllcount() { return pageAllcount; } public void setPageAllcount(int pageAllcount) { this.pageAllcount = pageAllcount; } public int getShowPage() { return showPage; } public void setShowPage(int showPage) { this.showPage = showPage; } public StringBuffer getPresentPageResult() { if(showPage>pageAllcount)//如果当前显示页大于页面总数,则跳回第一页 showPage=1; if(showPage<=0) showPage=pageAllcount; presentPageResult=show(showPage); return presentPageResult; } public StringBuffer show(int page)//从结果集中读取内容 { StringBuffer str=new StringBuffer(); str.append("<table border=1>"); str.append("<tr>"); for(int i=0;i<columns;i++) { str.append("<th>"+column[i]+"</th>"); } str.append("</tr>"); try{ rowSet.absolute((page-1)*pageSize+1);//移动到当前页面记录所对应在结果集中的行数 for(int i=1;i<=pageSize;i++)//读取的记录数(行数)小于每页所能显示的记录数 { str.append("<tr>"); for(int k=1;k<=columns;k++) { str.append("<td>"+rowSet.getString(k)+"</td>");//从之前查询出来的结果集中获取单元格的内容 } str.append("</tr>"); rowSet.next(); }//for循环结束 }//try结束 catch(SQLException exp) { } str.append("</table>"); return str;//返回查询结果 } public void setNumber(String number) { this.number = number; } public String getNumber() { return number; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getDate() { return date; } public void setDate(String date) { this.date = date; }}
(2)inputAndShow.jsp
<%@ page contentType="text/html;charset=utf-8" %><%@ page import="java.sql.*" %><%@ page import="jspBean.*" %><jsp:useBean id="handle" class="jspBean.Car" scope="request" ></jsp:useBean><html><body bgcolor=yellow><form action=""> 汽车牌号: <input type="text" name="number" >(如:"陕A12345")<br> <br>汽车品牌: <input type="text" name="type" >(如:"BYD牌")<br> <br>生产日期: <input type="text" name="date" >(如:"2016.10")<br> <br><input type="submit" name="submit" value="提交"></form> <jsp:setProperty name="handle" property="*"/> <%!int n;%> <% //n=0; //session.setAttribute("times",new Integer(n)); boolean insert; %> <% //n=(int)session.getAttribute("times"); //if(n!=0){ out.println(" 最后一个提交的数据为:"); String Number=request.getParameter("number"); String Type=request.getParameter("type"); String Date=request.getParameter("date"); out.println("车牌号:"+Number+" 品牌:"+Type+" 生产日期:"+Date); if(((Number!=null)&&(Type!=null)&&(Date!=null))) { insert=true; } else { insert=false; } %> <jsp:setProperty name="handle" property="insert" value="<%=insert%>" /><% //} %> <%n++; session.setAttribute("times",new Integer(n)); %> <jsp:setProperty name="handle" property="pageSize" value="5" /> <br>共有<jsp:getProperty name="handle" property="pageAllcount" />页, <br>每页最多显示<jsp:getProperty property="pageSize" name="handle"/>条记录。 <jsp:getProperty property="presentPageResult" name="handle" /><!-- 从bean中获取当前页面要显示的内容 --> <br>单击"前一页"或”后一页“按钮查看记录(当前显示第<jsp:getProperty property="showPage" name="handle"/>页)。 <table> <tr><td><form action=""> <input type=hidden name="showPage" value="<%=handle.getShowPage()-1 %>"> <input type=submit name="g" value="前一页"> </form> <jsp:setProperty property="*" name="handle" /> </td> <td><form action=""> <input type=hidden name="showPage" value="<%=handle.getShowPage()+1 %>"> <input type=submit name="g" value="后一页"> </form><jsp:setProperty property="*" name="handle" /></td> <td><form action=""> 输入页码:<input type="text" name="showPage" size=5 > <input type="submit" name="g" value="提交"> </form><jsp:setProperty property="*" name="handle" /></td> </tr> </table> </body></html>
结果展示:
初始页面:
向数据库中添加数据:
(实验总结真的很重要!!!加深你对实验过程中遇到的问题的认识!)
实验总结:
最大的感受就是心力憔悴!
Eclipse中写jsp, 然后Notepad++改java文件。改完到记事本中转换编码。然后到cmd编译得到class文件。然后复制粘贴到WEB-INF的class/jspBean目录下。然后重启eclipse.
反复修改,来回切换真的好累!
问题一大堆,主要都是太粗心大意,太智障了!
主要问题就是:将表单中的数据插入到数据库中。
(1)什么时候插?
将表单的数据通过setProperty传给Car.java之后。由于jsp页面遇见输入表单数据不会停下来,所以页面一开始提交给Car.java的数据都是空的。当前的记录为空因此此条记录以及之后的数据都无法成功插入了。
所以在插入记录时要判断插入的记录的合法性,首先满足不为空,在都不为空的情况下将insert设为true。
(2)插完什么时候显示?怎么显示?
由于一开始进入页面就要显示之前的记录,所以在设置pageSize时就要显示一次。再插入数据后,更新结果集再显示一次。但这两者只能显示一次,否则查询出来的结果表格就是两个表字段叠加,记录混乱。所以在setPageSize时判断当前有没有插入。没有插入就直接显示。有插入则插入后再显示。
(3)插入数据总是失败?
数据库中的为char类型,java中的变量是字符串形式,所以要这样写:
String sql=”insert into Cars values(‘”+number+”’,’”+type+”’,’”+date+”’)”;
(4)Sql的标识规范问题。
由于serial这个列属性用了标识规范,为自动增长,所以是无法手动向里面插入数据的。在用sql语句插入数据时直接省略第一位,insert into try
values(‘B’,’C’,’D’);
(5)我觉得在sql Server中建表时还是用代码的方式比较好,这样方便查看文件,到时候移植到其它的地方(别的电脑)也比较方便,在对sql语句还不熟练的情况下方便测试sql语句,测试好了再到java中操作。
心得体会:
做完这次实验对javaBean产生了深深的厌倦!
写完之后同学要看我的报告我直接说我没写完。凭什么我就要把我辛辛苦苦做了一天多的东西(主要是我太粗心大意太智障才搞了折磨久)直接给你们看,你们吃饭的时候我在想代码,你们打游戏,逛淘宝的时候我在想bug,难道我就不想下去买东西吃,玩玩游戏,逛逛淘宝?
我又不是你老师,没有这个义务,就算是老师也只会对你的错误给你指点,不会直接给你发分答案临摹吧!也不会看见你运行不出来就直接调好发给你吧,要自己发现错误,解决问题,不劳而获对那些付出努力的人真的很不公平。
所以转载文章或者参考代码注明出处这点很重要哦!
- JavaBean与数据库的使用
- jsp与javaBean的使用
- JavaBean的创建与使用
- JSP与JavaBean的使用
- jsp与javaBean的使用
- jsp与javaBean的使用
- 使用JavaBean进行数据库的连接(转载)
- 使用JavaBean连接数据库
- 使用JavaBean访问数据库
- JavaBean的简单介绍与使用
- javaEE jsp与javaBean的使用
- 用反射处理javaBean与数据库的交互
- Struts使用JavaBean连接数据库
- 使用JavaBean封装数据库操作
- Ireport 连接数据库 javabean 使用参数的简单例子
- 使用jdbc和javabean操作数据库遇到的鸡肋问题
- 使用JavaBean实现对MySQL数据库的增删改操作
- Java Web笔记 – JavaBean的使用 JavaBean的范围 与Java代码的交互
- JVM运行时内存布局
- 让你分分钟理解 JavaScript 闭包
- 可变参数
- JavaWeb三大框架之---struts2详解
- Machine Learning Books List
- JavaBean与数据库的使用
- 前端面试中的常见的算法问题
- ajax跨域请求保持session一致
- ORB 优化(5)
- 每天一个linux命令(22):find 命令的参数详解
- 八段代码彻底掌握Promise
- C的栈、堆、自由存储区(C++)、全局/静态存储区、常量存储区
- ORB-SLAM(六)回环检测
- CAS单点登录-自定义认证之重写Credential(十五)