JSP中SQL数据库编程技术

转载 2008年05月01日 06:20:00
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

  JSPSQL数据库编程技术一,SQL复习1,SQL语句分为两类:DDL(Data Definition Language)和DML(Dat Manipulation Languge,数据操作语言)。前者主要是定义数据逻辑结构,包括定义表、视图和索引;DML主要是对数据库进行查询和更新操作。2,Create Table(DDL):Create Table tabName(colName1colType1[else],colName2colType2[else],...,colNamencolTypen[else]);例如:Cteate Table pJoiner(pno char(6) not null,eno char(6) nut null);char int varchar等等都是用来定义列数据类型的保留字,其中varchar表示可变字符类型。3,Select ,,...,From ,,...,[Where<条件>]条件中的子查询:Where Not Exists(Select * From tab2 Where col1=col2)//当查询结果为空时,条件为真。4,INSERT INTO VALUES(, ...)5,DELETE FROM [WHERE<条件>]6,UPDATE SET =...=[WHERE<条件>]例如:Update exployeeSet age=27Where name='赵一'二,JDBC 主要接口:java.SQL.DriverManager类用于处理驱动程序的调入并且对新的数据库连接提供支持。java.SQL.Connection,指应用程序与特定数据库的连接。java.SQL.Statement,用于一般SQL语句的执行(可以是查询、更新甚至可以创建数据库的执行过程)java.SQL.ResultSet,查询所返回的结果保存在此对象中,用它可以浏览和存取数据库内的记录。1,通过jdbc-odbc桥使用odbc数据库(并不需要jdbc Drivers)先在odbc DSN(Data Source Name)设置处设置pubs sysDSN,sa为username,密码为空Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载驱动程序con=DriverManager.getConnection("jdbc:odbc:pubs","sa","");//jdbc:odbc:pubscon.close();//应当catch ClassNotFoundException和SQLExceptionConnection的getWarning方法返回一个SQLWarning对象,在连接之前应当先检查。 使用jdbc-odbc的最大好处是:免费的。但是性能受odbc的限制,而且一般odbc驱动比较昂贵。2,使用专门的jdbc驱动程序。//此处是mm jdbc Driver先将jar文件放在ClassPath里面。Class.forName("org.gjt.mm.mySQL.Driver");con=DriverManager.getConnection("jdbc:mySQL://localhost:3306/dbname","root","");con.close();可见使用何种方式连接何种数据库与数据库的操作和连接数据库是无关的。三,查询数据库Statement stmt=con.createStatement();stmt.setMaxRows()可以控制输出记录最大数量;ResultSet rs=stmt.executeQuery("select .....");ResultSet指向当前记录:int userId=rs.getInt("userid");String userName=rs.getString("username");...或者用序号(从1开始的)int userId=rs.getInt(1);Stirng userName=rs.getString(2);ClassNotFoundException是由于Class.forName()无法载入jdbc驱动程序触发的SQLException是jdbc在执行过程中发生问题时产生。有一个额外的方法getNextException()catch(SQLException e){out.println(e.getMessage());while(e=e.getNextException()){out.println(e.getMessage());}}一般来说并不建议在JSP中编写数据库的访问程序,可以将数据库的访问封装在一个javabean中。四,ResultSet深入1,ResultSetMetaDataResultSet rs=stmt.executeQuery("select....");ResultSetMetaData rsmd=rs.getMetaData();//获取ResultSetMateData对象int numberOfColumns=rsmd.getColumnCount();//返回列数boolean b=rsmd.isSearchable(int i);//返回第i列是否可以用于where子句String c=rsmd.getColumnLabel(int i);//获取第i列的列标Objcet obj=rs.getObject();if(obj!=null)out.println(obj.toString());else println("");2,SQL类型与ResultSet的getObject返回类型及对应的XXX getXXX()方法SQL类型JSP类型对应的getXXX()方法————————————————————————————————————————————CHAR String String getString()VARCHAR String String getString()LONGVARCHAR StringInputStream getAsciiStream()/getUnicodeStream()NUMERIC java.math.BigDecimal java.math.BigDecimal getBigDecimal()DECIMAL 同上BIT Boolean boolean getBoolean()TINYINT Integer byte getByte()SMALLINT Integer short getShort()INTEGERIntegerint getInt()BIGINTLong long getLong()REAL Float float getFloat()FLOAT Double double getDouble()DOUBLE Double double getDouble()BINARY byte[] byte[] getBytes()VARBINARY byte[] byte[] getBytes()LONGVARBINARY byte[]InputStream getBinaryStream()DATEjava.SQL.Date java.SQL.Date getDate()TIMEjava.SQL.Time java.SQL.Time getTime()TIMESTAMP java.SQL.Timestamp java.SQL.Timestamp getTimestamp()3,null int i=rs.getInt("age");if(!rs.wasNull())....//RecordSet::wasNull()用来检查null4,存取大字符串和二进制文本对于数据库中longvarchar和langvarbinary进行流操作ResultSet rs=stmt.executeQueryString("select ...");BufferedReader br=new BufferedReader(new InputStream(rs.getAsciiStream("vol1")));//长文本串BufferedReader br=new BufferedReader(new InputStream(rs.getUnicodeStream("vol1")));BufferedReader br=new BufferedReader(new InputStream(rs.getBinaryStream("vol2")));//长二进制文本//取数据必须在rs.getAsciiStream(), rs.getUnicodeStream(), rs.getBinaryStream()等之后马上进行五,浏览ResultSet1,JDBC2.0提供了更多浏览ResultSet的方法首先,确定你的jdbc驱动程序支持jdbc2.0其次,由Connection生成Statement时要指定参数Statement stmt=con.getStatement("游标类型", "记录更新权限");游标类型:ResultSet.TYPE_FORWORD_ONLY:只可以向前移动ResultSet.TYPE_SCROLL_INSENSITIVE:可卷动。但是不受其他用户对数据库更改的影响。ResultSet.TYPE_SCROLL_SENSITIVE:可卷动。当其他用户更改数据库时这个记录也会改变。记录更新权限:ResultSet.CONCUR_READ_ONLY,只读ResultSet.CONCUR_UPDATABLE,可更新getStatement()缺省参数:getStatement(ResultSet.TYPE_FORWORD_ONLY, ResultSet.CONCUR_READ_ONLY)2,如果ResultSet是可卷动的,以下函数可以使用:rs.absolute()//绝对位置,负数表示从后面数rs.first()第一条rs.last()最后一条rs.previoust()前一条rs.next()后一条rs.beforeFirst()第一条之前rs.afterLast()最后之后rs.isFirst(),rs.isLast(),rs.isBeforeFirst(),rs.isAfterLast注意,刚打开的时候是处于第一条记录之前的六,更新数据库1,stmt.executeUpdate("strSQL"),strSQL是一条SQL更新语句。update,insert,delete返回影响到的条数2,stmt.execute()方法在不知道SQL语句是查询还是更新的时候用。如果产生一条以上的对象时,返回true,此时可用stmt.getResultSet()和stmt.getUpdateCount()来获取execute结果,如果不返回ResultSet对象则返回false.3,除了Statement的executeUpdate之外还可以用ResultSet:rs.updateInt(1,10);rs.updateString(2,"sfafd");rs.updateRow();七,使用预编译PreparedStatementPreparedStatement对象和Statement对象类似,都可以用来执行SQL语句。不同在于,数据库会对PreparedStatement的SQL语句进行预编译,而且仍旧能输入参数并重复执行编译好的查询速度比未编译的要快。PreparedStatement stmt=con.preparedStatement("Insert Into users(userid, username) values(?,?)");stmt.clearParameters();stmt.setInt(1,2);stmt.setString(2,"Big");stmt.executeUpdate();八,执行存储过程1,JDBC调用存储过程,并使用存储过程的返回值。这样可以将处理工作分为服务端和客户端两部分,并大大加快系统的设计和开发的时间。比如可以重复使用服务器上的组件。使用存储过程之后大量诸计算工作可以交给数据库服务器来处理,这将降低Web服务器的负载,从而提高整个系统的性能。2,有两个表UserMain{UserID,UserName,UserType},UserRef{BrefID, UserID, UserBrief}下面的存储过程可以接受jdbc传来的参数,新增内容到UserMain和UserRef,并输出一个OutUserID.CREATE PROCEDURE ap_adduser(@OutUserID int output,//此为输出参数,output标记@UserName varchar(25),//参数表示方法:"@XXX"为变量名,"变量名 类型 [output]"@UserType tinyint,@UserBrief varchar(255),)ASDeclare @UserID int//定义局部变量insert into UserMain(UserName, UserType)values(@UserName,@UserType)select @UserID=@@IDENTITY//赋值用select,此处自动获得IDinsert into UserRef(UserID, UserBrief)select @OutUserID=@UserIDGO/*结束,基本结构:CREATE PROCEDURE procedureName(parameters)ASactionsGO*/JSP页面中这样使用:CallableStatement stmt=con.prepareCall("{call ap_adduser(?,?,?,?)}");stmt.registerOutParameter(1,Types.INTEGER,1);//注册输出变量stmt.setString(2,"edmund");stmt.setInt(3,1);stmt.setString(4,"description");stmt.execute();int userid=stmt.getInt(1);stmt.close()八,使用事务1,事务中的操作是一个整体,要么都执行成功要么都不成功:事务开始后,如果所有的改变都正确,则使用commit方法将这些动作全部存入数据库,否则就使用rollback取消所有的改变动作,而这时数据库中的数据和执行事务前的是相同的。2,使用事务时应当先用 con.setAutoCommit(false),最后使用commit或者rollback3,rollback一般在catch段执行九,数据库连接池1,如果有一个数据库连接请求并且连接中没有连接,则生成一个新的连接。这个连接使用完之后并不关闭它,而是将它放入连接池。在这个过程中,还要判断连接池中的连接是否超期。如果超期则将它关闭。2,有很多已有的Connection Pool包可以使用。3,一般将Connection Pool作为一个application作用域的变量使用<JSP:useBean id="pool" scope="application" class="javastart.tools.ConnectionPool" /><%@page import="java.SQL.*"%><%@page import="javastart.tools.*"%>DBConnection con=null;try{con=pool.getConnection("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:access","","");Statement stmt=con.createStatement();stmt.setMaxRows(10);String query=request.getParameter("quey");ResultSet rs=stml.executeQuery(query);ResultSetMetaData rsmd=rs.getMetaData();}.....finally{pool.releaseConnection(con);}也可以使用一个Servlet初始化连接池

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

基于VB和SQL的数据库编程技术PPT

  • 2011年02月21日 10:11
  • 2.67MB
  • 下载

如何实现jsp数据插入sql数据库

//连接数据库 Connection ct = null; PreparedStatement ps=null; int rs=-1; //插入成功标志位 ,如果插入成功 为 1 如果不成功为-...
  • baidu_36977450
  • baidu_36977450
  • 2016-12-09 00:31:45
  • 1392

Visual C++ +SQL 编程例子(例子,适合初学者,采自数据库开发与实例)

  • 2008年09月24日 21:08
  • 79KB
  • 下载

JSP页面访问SQLServer数据库

本文章对应于《轻量级JavaEE企业应用实战(第四版)》——Struts2+Spring4+Hibernate整合开发 李刚编著本书内数据库是基于MySQL的,此例子是对应于本书69页connDb....
  • ShallDid
  • ShallDid
  • 2016-09-07 19:49:35
  • 1696

精通JSP编程技术电子书

  • 2010年05月18日 15:59
  • 11.54MB
  • 下载

JavaEE编程技术(JSP/Servlet)

1、DOS,命令窗口下编译运行java文件 (1)编译.java文件:若没有配置环境变量,可以直接到开始搜索cmd打开命令窗口,进入java文件所在的磁盘文件地址,(如:进入Server.java所在...
  • Xiongchao99
  • Xiongchao99
  • 2016-04-24 20:13:32
  • 751

用jsp实现SQLServe数据库的备份和恢复

备份:发送sql给mssqlserver:     backup   database     to   disk=备份文件名   with   init     注意:   1.备份文件名必须为绝...
  • qsd007
  • qsd007
  • 2007-03-23 16:10:00
  • 1023

一个简单在jsp页面中连接sqlserver数据库的小实例

 一个简单在jsp页面中连接sqlserver数据库的小实例。connect the db//不要忘了引入sql 包String url="jdbc:odbc:message_DSN"; // mes...
  • mail_ricklee
  • mail_ricklee
  • 2005-03-02 10:50:00
  • 6322

Jsp学习之二:用JDBC连接SQLServer,连接代码直接写在JSP中

    这种把数据库逻辑全部放在jsp里不是好的做法,作为学习可以这样做,到一定程度的时候,可以考虑用MVC的模式开发。在练习下面代码的时候,一定将jdbc的驱动程序放到服务器的类路径里    Tes...
  • memego
  • memego
  • 2005-02-19 11:15:00
  • 1432

SQL Server 2000与ASP Web 数据库编程技术

  • 2009年03月27日 22:28
  • 20.24MB
  • 下载
收藏助手
不良信息举报
您举报文章:JSP中SQL数据库编程技术
举报原因:
原因补充:

(最多只允许输入30个字)