JSP中SQL数据库编程技术
JDBC主要接口:
java.sql.DriverManager类用于处理驱动程序的调入并且对新的数据库连接提供支持。
java.sql.Connection,指应用程序与特定数据库的连接。
java.sql.Statement,用于一般sql语句的执行(可以是查询、更新甚至可以创建数据库的执行过程)
java.sql.ResultSet,查询所返回的结果保存在此对象中,用它可以浏览和存取数据库内的记录。
1,通过jdbc-odbc桥使用odbc数据库(并不需要jdbcDrivers)
先在odbcDSN(DataSourceName)设置处设置pubssysDSN,sa为username,密码为空
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载驱动程序
con=DriverManager.getConnection("jdbc:odbc:pubs","sa","");//jdbc:odbc:pubs
con.close();
//应当catchClassNotFoundException和SQLException
Connection的getWarning方法返回一个SQLWarning对象,在连接之前应当先检查。
使用jdbc-odbc的最大好处是:免费的。但是性能受odbc的限制,而且一般odbc驱动比较昂贵。
2,使用专门的jdbc驱动程序。//此处是mmjdbcDriver
先将jar文件放在ClassPath里面。
Class.forName("org.gjt.mm.mysql.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname","root","");
con.close();
可见使用何种方式连接何种数据库与数据库的操作和连接数据库是无关的。
三,查询数据库
Statementstmt=con.createStatement();
stmt.setMaxRows()可以控制输出记录最大数量;
ResultSetrs=stmt.executeQuery("select.....");
ResultSet指向当前记录:
intuserId=rs.getInt("userid");
StringuserName=rs.getString("username");
...或者用序号(从1开始的)
intuserId=rs.getInt(1);
StirnguserName=rs.getString(2);
ClassNotFoundException是由于Class.forName()无法载入jdbc驱动程序触发的
SQLException是jdbc在执行过程中发生问题时产生。有一个额外的方法getNextException()
catch(SQLExceptione){
out.println(e.getMessage());
while(e=e.getNextException()){
out.println(e.getMessage());
}
}
一般来说并不建议在jsp中编写数据库的访问程序,可以将数据库的访问封装在一个javabean中。
四,ResultSet深入
1,ResultSetMetaData
ResultSetrs=stmt.executeQuery("select....");
ResultSetMetaDatarsmd=rs.getMetaData();//获取ResultSetMateData对象
intnumberOfColumns=rsmd.getColumnCount();//返回列数
booleanb=rsmd.isSearchable(inti);//返回第i列是否可以用于where子句
Stringc=rsmd.getColumnLabel(inti);//获取第i列的列标
Objcetobj=rs.getObject();
if(obj!=null)out.println(obj.toString());
elseprintln("");
2,SQL类型与ResultSet的getObject返回类型及对应的XXXgetXXX()方法
SQL类型JSP类型对应的getXXX()方法
————————————————————————————————————————————
CHARStringStringgetString()
VARCHARStringStringgetString()
LONGVARCHARStringInputStreamgetAsciiStream()/getUnicodeStream()
NUMERICjava.math.BigDecimaljava.math.BigDecimalgetBigDecimal()
DECIMAL同上
BITBooleanbooleangetBoolean()
TINYINTIntegerbytegetByte()
SMALLINTIntegershortgetShort()
INTEGERIntegerintgetInt()
BIGINTLonglonggetLong()
REALFloatfloatgetFloat()
FLOATDoubledoublegetDouble()
DOUBLEDoubledoublegetDouble()
BINARYbyte[]byte[]getBytes()
VARBINARYbyte[]byte[]getBytes()
LONGVARBINARYbyte[]InputStreamgetBinaryStream()
DATEjava.sql.Datejava.sql.DategetDate()
TIMEjava.sql.Timejava.sql.TimegetTime()
TIMESTAMPjava.sql.Timestampjava.sql.TimestampgetTimestamp()
3,null
inti=rs.getInt("age");
if(!rs.wasNull())....//RecordSet::wasNull()用来检查null
4,存取大字符串和二进制文本
对于数据库中longvarchar和langvarbinary进行流操作
ResultSetrs=stmt.executeQueryString("select...");
BufferedReaderbr=newBufferedReader(newInputStream(rs.getAsciiStream("vol1")));//长文本串
BufferedReaderbr=newBufferedReader(newInputStream(rs.getUnicodeStream("vol1")));
BufferedReaderbr=newBufferedReader(newInputStream(rs.getBinaryStream("vol2")));//长二进制文本
//取数据必须在rs.getAsciiStream(),rs.getUnicodeStream(),rs.getBinaryStream()等之后马上进行
五,浏览ResultSet
1,JDBC2.0提供了更多浏览ResultSet的方法
首先,确定你的jdbc驱动程序支持jdbc2.0
其次,由Connection生成Statement时要指定参数
Statementstmt=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();
七,使用预编译PreparedStatement
PreparedStatement对象和Statement对象类似,都可以用来执行SQL语句。不同在于,数据库会对PreparedStatement的SQL语句进行预编译,而且仍旧能输入参数并重复执行编译好的查询速度比未编译的要快。
PreparedStatementstmt=con.preparedStatement("InsertIntousers(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.
CREATEPROCEDUREap_adduser
(
@OutUserIDintoutput,//此为输出参数,output标记
@UserNamevarchar(25),//参数表示方法:"@XXX"为变量名,"变量名类型[output]"
@UserTypetinyint,
@UserBriefvarchar(255),
)
AS
Declare@UserIDint//定义局部变量
insertintoUserMain(UserName,UserType)
values(@UserName,@UserType)
select@UserID=@@IDENTITY//赋值用select,此处自动获得ID
insertintoUserRef(UserID,UserBrief)
select@OutUserID=@UserID
GO/*结束,基本结构:
CREATEPROCEDUREprocedureName(
parameters
)
AS
actions
GO
*/
JSP页面中这样使用:
CallableStatementstmt=con.prepareCall("{callap_adduser(?,?,?,?)}");
stmt.registerOutParameter(1,Types.INTEGER,1);//注册输出变量
stmt.setString(2,"edmund");
stmt.setInt(3,1);
stmt.setString(4,"description");
stmt.execute();
intuserid=stmt.getInt(1);
stmt.close()
八,使用事务
1,事务中的操作是一个整体,要么都执行成功要么都不成功:事务开始后,如果所有的改变都正确,则使用commit方法将这些动作全部存入数据库,否则就使用rollback取消所有的改变动作,而这时数据库中的数据和执行事务前的是相同的。
2,使用事务时应当先用con.setAutoCommit(false),最后使用commit或者rollback
3,rollback一般在catch段执行
九,数据库连接池
1,如果有一个数据库连接请求并且连接中没有连接,则生成一个新的连接。这个连接使用完之后并不关闭它,而是将它放入连接池。在这个过程中,还要判断连接池中的连接是否超期。如果超期则将它关闭。
2,有很多已有的ConnectionPool包可以使用。
3,一般将ConnectionPool作为一个application作用域的变量使用
<jsp:useBeanid="pool"scope="application"class="javastart.tools.ConnectionPool"/>
<%@pageimport="java.sql.*"%>
<%@pageimport="javastart.tools.*"%>
<!--javastart.tools是你的ConnectionPool所在的地方-->
DBConnectioncon=null;
try{
con=pool.getConnection("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:access","","");
Statementstmt=con.createStatement();
stmt.setMaxRows(10);
Stringquery=request.getParameter("quey");
ResultSetrs=stml.executeQuery(query);
ResultSetMetaDatarsmd=rs.getMetaData();
}
.....
finally{
pool.releaseConnection(con);
}
也可以使用一个Servlet初始化连接池
分享到:
相关推荐
在本项目中,“jspsql数据库网上购物”是一个基于JavaScript(JS)、JSP(JavaServer Pages)和SQL技术实现的在线购物平台。这个项目可能是为了教学或者自我提升目的,通过与同学们共同协作完成,旨在帮助开发者了解...
在这个主题中,“js与jsp操作sql数据库”指的是使用JavaScript构建动态SQL语句,然后通过JSP在服务器端执行这些SQL语句,以与SQL Server数据库进行交互。下面我们将详细探讨这一过程。 首先,JavaScript是一种运行...
学习者可以通过阅读和运行这些代码,加深对JSP和数据库编程的理解,掌握如何在JSP页面中与数据库进行交互,创建动态数据驱动的网页。 总的来说,JSP数据库编程入门的学习需要理解JSP的基本语法和原理,熟悉JDBC操作...
本文将深入探讨一个基于JSP(Java Server Pages)技术和SQL数据库的超市管理系统,它是一个适用于毕业设计的优秀案例,旨在帮助初学者理解Web应用开发和数据库管理的实际应用场景。 一、JSP技术基础 JSP是Java平台...
而数据库编程是JSP应用中的核心部分,用于存储、检索和管理数据。 本书主要涵盖了以下几个关键知识点: 1. **JSP基础**:讲解JSP的基本语法、生命周期和内置对象,如request、response、session和application,...
"爱心宠物诊所"系统是一个基于JSP(JavaServer Pages)技术与SQL数据库相结合的应用实例,主要目的是为了管理和优化宠物诊所的日常运营。本系统的设计与实现涵盖了从需求分析、系统架构设计、数据库设计到前端界面...
JSP(JavaServer Pages)是一种基于Java技术的动态网页开发语言,而SQL Server是Microsoft公司出品的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。本文将详细阐述如何使用JSP连接SQL Server数据库,...
总之,"jsp数据库编程指南"将引导你深入理解JSP与数据库的交互,通过实际项目案例,你可以掌握如何在JSP中实现数据库操作,提升你的Web开发技能。无论是初学者还是有经验的开发者,都能从中受益匪浅。
标题和描述概述的知识点主要集中在基于JSP的SQL Server数据库访问技术,这涉及到JSP(JavaServer Pages)、JDBC(Java Database Connectivity)-ODBC(Open Database Connectivity)桥接技术以及SQL Server数据库的...
本资源主要介绍了使用 Java 语言和 JSP 技术来实现 Web 编程中的数据库操作。主要涵盖了以下几个方面的知识点: 1. 使用 form 标签在 HTML 中实现用户信息的输入,包括用户 ID、姓名、密码和住址,并将其提交到 ...
在JSP(JavaServer Pages)中访问数据库是Web开发中的常见任务,这通常涉及到与后端数据存储交互,如MySQL、Oracle或SQL Server等。为了实现这一目标,开发者需要掌握几种关键技术,包括JDBC(Java Database ...
【JSP个人博客系统与SQL数据库的结合】 在IT领域,个人博客系统是常见的Web应用程序,它允许用户创建、发布和管理自己的文章。本项目是一个基于JSP(JavaServer Pages)技术开发的个人博客系统,它与SQL...
《JSP数据库编程指南》是一本专注于讲解如何在JavaServer Pages (JSP) 中进行数据库交互的实用资源。JSP是一种动态网页开发技术,它允许开发者在HTML或XML文档中嵌入Java代码,从而实现服务器端的数据处理和业务逻辑...
**JSP数据库编程指南概述** JavaServer Pages (JSP) 是一种动态网页开发技术,它允许开发者在HTML或XML文档中嵌入Java代码,用于创建交互式的Web应用程序。JSP与数据库结合,可以构建功能强大的数据驱动的Web应用。...
综上所述,基于JSP和SQL数据库的网络书店销售管理系统,通过灵活的JSP编程和强大的SQL数据库支持,实现了用户友好、功能完善的图书销售管理。这一系统的开发与实现,不仅展示了JSP在Web应用中的强大能力,也体现了...
JSP课程设计管理系统 是一套完善的WEB网页系统,对理解JSP java编程开发语言有帮助系统采用B/S模式网页浏览器,系统具有完整的源代码和数据库,系统主要采用B/S模式开发应用技术:java|jsp+SQLSERVER 开发工具:...
在JavaServer Pages (JSP) 中连接到SQL Server 2005数据库是Web开发中的一个常见任务,这个过程涉及到几个关键步骤和技术。首先,我们需要理解JSP的本质,它是一种基于Java的服务器端脚本语言,用于生成动态网页。而...