仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1785|回复: 18
打印 上一主题 下一主题

[学习教程] JAVA教程之怎样间接在扫瞄器内运转SQL命令

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:40:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。扫瞄器
  本文树模了怎样用一个JavaServlet、一个JSP页面和一个静态Java类机关出一个SQL网关使用。使用这个使用,你能够间接在扫瞄器内实行SQL命令,扫瞄器将把SQL命令提交给远程服务器上的数据库体系,然后前往了局。

  假如你正在利用ISP(InternetServiceProvider)供应的数据库,大概已熟习SQL网关使用的观点了。有的ISP会供应一个操纵数据库的HTML页面,就象本文供应的网关使用一样。假如ISP没有供应如许的界面,你能够把本文的程序上载到服务器,今后要会见ISP服务器上的数据库就很便利了。

  SQL网关使用不但能够用于开辟历程,并且还能够间接供应给对照熟习体系的终极用户利用。固然,同意终极用户间接在数据库上运转SQL命令会带来一些平安隐患,应该稳重思索。

  本文请求读者具有必定的Java、Servlet、JSP和数据库的基本常识,假如要运转本文的程序,还要有一个Servlet/JSP服务器和数据库服务器。鄙人面的申明中,我们要利用的是Tomcat4.0和MySQL,但它应当也能在其他JSP/Servlet容器中运转;假如你要改用MySQL以外的其他数据库,只需供应一个得当的驱动程序,然后修正数据库毗连字符串就能够了。

  1、用户界面

  就是本文SQL网关的用户界面。在这个界面中,SQL网关已实行了一条SQL命令并前往了却果。


<br>

:SQL网关的用户界面

  从能够看出,页面底部的一条信息显现出比来实行的SQL命令影响的行数。假如SQL命令是一个SELECT语句,当SELECT语句实行乐成,页面底部将用HTML表格显现出查询了局,如图二所示。


<br>

:HTML表格显现出查询了局集

  固然,假如SQL命令实行失利,SQL网关将前往非常信息。

  2、计划JSP页面

  在JSP页面中,我们起首放进一个Scriptlet,它的功效是从session对象提取两个属性:

ffffffcellPadding=2width=540align=centerborderColorLight=blackborder=1>
  1. <!doctypehtmlpublic"-//W3C//DTDHTML4.0Transitional//EN"><%StringsqlStatement=(String)session.getAttribute("sqlStatement");if(sqlStatement==null)sqlStatement="";Stringmessage=(String)session.getAttribute("message");if(message==null)message="";%>
复制代码

  第一个属性sqlStatement暗示SQL命令字符串,第二个属性message是包括了局信息的字符串。假如这两个属性的值是null,则暗示它们还没有被设置,我们把sqlStatement和message变量设置成空字符串。

  JSP页面另有一个HTML表单,HTML表单包括一个文本地区(TEXTAREA)和一个“实行”按钮。
  1. <formaction="../servlet/test.SQLGatewayServlet"method="post"><b>SQL命令:</b><br><textareaname="sqlStatement"cols=60rows=8><%=sqlStatement%></textarea><br><br><inputtype="submit"value="实行"></form>
复制代码

  表单中的文本地区用来输出SQL命令。我们将sqlStatement变量的值作为文本地区的默许内容,文本地区的巨细是宽60字符、高8行。当JSP页面第一次运转时,这个文本地区的内容为空。假如用户点击文本地区上面的“实行”按钮,JSP页面把表单内容提交给SQLGatewayServlet(稍后再具体先容)。

  JSP页面底部的表格显现出message字符串的内容。如前所述,message的内容是运转SQL命令的了局。
  1. <b>SQL命令实行了局:</b><br><tablecellpadding="5"border="1"><%=message%></table>
复制代码

  3、编写Servlet

  SQLGatewayServlet起首导进java.sql包以便利用JDBC类。别的,它还要声明一个Connection对象,以便Servlet以内的一切办法都可使用数据库毗连。
  1. packagetest;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;importjava.sql.*;publicclassSQLGatewayServletextendsHttpServlet{privateConnectionconnection;
复制代码

  当Servlet引擎入手下手运转这个Servlet,Servlet的init办法就翻开一个数据库毗连:
  1. publicvoidinit()throwsServletException{try{Class.forName("org.gjt.mm.mysql.Driver");StringdbURL="jdbc:mysql://localhost/murach";Stringusername="root";Stringpassword="";connection=DriverManager.getConnection(dbURL,username,password);}catch(ClassNotFoundExceptione){System.out.println("找不到数据库驱动程序.");}catch(SQLExceptione){System.out.println("不克不及翻开数据库毗连:"+e.getMessage());}}
复制代码

  在这个例子中,Servlet使用一个MysQL数据库的驱动程序翻开murach数据库的毗连,数据库和Servlet运转在统一个服务器上。别的,Servlet利用MySQL的默许用户名字root,暗码为空。不外,你能够修正这里的代码,只需有得当的驱动程序,就能够让Servlet毗连就任何服务器上的任何数据库(有关MySQL数据库的更多信息,请拜见www.mysql.com)。

  Servlet引擎封闭Servlet之前,挪用destroy办法封闭数据库毗连,开释毗连资本:
  1. publicvoiddestroy(){try{connection.close();}catch(SQLExceptione){System.out.println("不克不及封闭数据库毗连:"+e.getMessage());}}
复制代码

  后面先容的JSP页面要挪用Servlet的doPost办法,doPost办法挪用doGet办法:
  1. publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{doGet(request,response);}
复制代码

  在doGet办法当中,第一个语句起首猎取用户在JSP页面中输出的SQL命令,第二个语句声明message变量:
  1. publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{StringsqlStatement=request.getParameter("sqlStatement");Stringmessage="";
复制代码

  然后,在try块以内,第一个语句使用Connection对象创立Statement对象,接上去的两个语句使用String对象的trim办法和substring办法前往用户输出的SQL命令的前六个字符。
  1. try{Statementstatement=connection.createStatement();sqlStatement=sqlStatement.trim();StringsqlType=sqlStatement.substring(0,6);
复制代码

  假如SQL命令的前六个字符是“select”,则使用Statement的executeQuery办法实行SQL语句,取得一个ResultSet对象,把这个对象传送给SQLUtil类(稍后具体申明)的getHtmlRows办法,getHtmlRows办法将把纪录会合的纪录格局化成HTML表格并前往。
  1. if(sqlType.equalsIgnoreCase("select")){ResultSetresultSet=statement.executeQuery(sqlStatement);//机关一个String,个中包括HTML表格情势的了局集数据message=SQLUtil.getHtmlRows(resultSet);}
复制代码

  假如SQL语句的前六个字符不是“select”,则我们挪用Statement对象的executeUpdate办法,executeUpdate办法前往以后操纵影响的行数――假如这个数字是0,则该SQL命令是一个DDL命令,比方DROPTABLE或CREATETABLE等;不然,则标明SQL命令多是DML命令,如INSERT、UPDATE或DELETE命令。不管是哪种SQL命令,我们都把message变量设置成响应的动静。
  1. else{inti=statement.executeUpdate(sqlStatement);if(i==0)//这是一个DDL命令message="<tr><td>"+"命令实行乐成."+"</td></tr>";else//这是一个INSERT、UPDATE或DELETE命令message="<tr><td>"+"SQL命令实行乐成。<br>"+"已变动"+i+"行。"+"</td></tr>";}statement.close();}
复制代码

  假如try块内里的任何一个语句抛出一个SQLException,catch块就设置message变量,使其包括有关该SQLException的信息。比方,假如在表单中输出的SQL命令语法毛病,上面设置的message变量值将匡助你排遣毛病。
  1. catch(SQLExceptione){message="<tr><td>实行SQL命令时碰到毛病:<br>"+e.getMessage()+"</tr></td>";}
复制代码

  在catch块以后,接上去的三个语句取得session对象,把sqlStatement和message变量设置为session的属性:
  1. HttpSessionsession=request.getSession();session.setAttribute("message",message);session.setAttribute("sqlStatement",sqlStatement);
复制代码

  接上去,最初两个语句创立一个RequestDispatcher,并转发request和response对象给前文先容的JSP页面:
  1. RequestDispatcherdispatcher=getServletContext().getRequestDispatcher("/sql/sql_gateway.jsp");dispatcher.forward(request,response);
复制代码

  4、编写工具类

  上面来看看工具类SQLUtil的代码:
  1. packagetest;importjava.sql.*;publicclassSQLUtil{
复制代码

  SQLUtil类包括一个getHtmlRows静态办法,后面的Servlet恰是经由过程挪用该办法将了局集格局化成HTML表格。getHtmlRows的输出参数是一个ResultSet对象,其前往值是一个String对象,这个String对象的内容是纪录集的一切列表题和行的HTML代码。为了机关出如许一个String对象,getHtmlRows声了然一个名为htmlRows的StringBuffer对象,然后在办法实行过程当中向这个StringBuffer对象追加数据。在getHtmlRows办法的开端,我们用toString办法将StringBuffer的内容转换成String,最初将这个String前往给Servlet:
  1. publicstaticsynchronizedStringgetHtmlRows(ResultSetresults)throwsSQLException{StringBufferhtmlRows=newStringBuffer();ResultSetMetaDatametaData=results.getMetaData();intcolumnCount=metaData.getColumnCount();//将纪录会合列的称号作为HTML表格列的题目htmlRows.append("<tr>");for(inti=1;i<=columnCount;i++)htmlRows.append("<td><b>"+metaData.getColumnName(i)+"</td>");htmlRows.append("</tr>");//关于了局会合的每行...while(results.next()){htmlRows.append("<tr>");//将该行中的每个列转换成一个表格单位for(inti=1;i<=columnCount;i++)htmlRows.append("<td>"+results.getString(i)+"</td>");}htmlRows.append("</tr>");returnhtmlRows.toString();}
复制代码

  为了取得纪录集对象的列题目,getHtmlRows办法使用ResultSet的getMetaData办法来创立一个ResultSetMetaData对象,ResultSetMetaData对象包括了有关纪录集的形貌信息,比方列的数目、列的称号能够分离挪用ResultSetMetaData的getColumnCount和getColumnName办法取得。

  为了提取纪录集的数据,getHtmlRows办法使用一个嵌套的轮回,即while轮回内里嵌套的for轮回,来提取每个行内里每个列的值。在轮回以内,我们用纪录集的getString办法来猎取各个字段的值,不论字段值本来的范例是甚么,getString办法城市将它转换成String。

  请注重这个办法的声明中带有synchronized关头词,这是为了不两个或两个以上的Servlet线程同时实行该办法。

  下载本文的代码:SqlGateway_code.zip。




C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊
爱飞 该用户已被删除
沙发
发表于 2015-1-21 12:29:32 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
山那边是海 该用户已被删除
板凳
发表于 2015-2-1 10:59:24 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
谁可相欹 该用户已被删除
地板
发表于 2015-2-3 12:33:15 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
精灵巫婆 该用户已被删除
5#
发表于 2015-2-3 18:08:46 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
再见西城 该用户已被删除
6#
发表于 2015-2-4 22:25:33 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
蒙在股里 该用户已被删除
7#
 楼主| 发表于 2015-2-6 16:10:19 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
愤怒的大鸟 该用户已被删除
8#
发表于 2015-2-10 21:31:02 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
老尸 该用户已被删除
9#
发表于 2015-2-27 00:34:20 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
若天明 该用户已被删除
10#
发表于 2015-3-8 18:40:55 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
冷月葬花魂 该用户已被删除
11#
发表于 2015-3-16 10:48:18 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
飘飘悠悠 该用户已被删除
12#
发表于 2015-3-18 09:56:51 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
因胸联盟 该用户已被删除
13#
发表于 2015-3-25 14:40:32 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
简单生活 该用户已被删除
14#
发表于 2015-3-27 00:10:41 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
飘灵儿 该用户已被删除
15#
发表于 2015-4-10 06:43:10 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
小妖女 该用户已被删除
16#
发表于 2015-4-21 05:20:38 | 只看该作者
是一种突破用户端机器环境和CPU
小女巫 该用户已被删除
17#
发表于 2015-4-27 04:23:19 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
admin 该用户已被删除
18#
发表于 2015-5-2 14:59:36 | 只看该作者
是一种为 Internet发展的计算机语言
柔情似水 该用户已被删除
19#
发表于 2015-7-15 03:19:12 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-26 16:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表