chap6-在JSP中使用数据库-student_第1页
chap6-在JSP中使用数据库-student_第2页
chap6-在JSP中使用数据库-student_第3页
chap6-在JSP中使用数据库-student_第4页
chap6-在JSP中使用数据库-student_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章

在JSP中使用数据库61、深入理解JDBC的工作原理2、掌握使用java数据库驱动连接数据库的基本步骤3、掌握JDBC数据库的查询、更新操作4、会在JSP页面中灵活使用数据库5、了解JDBC-ODBC桥接器数据库连接方式课程目标

☆1、JDBC介绍概念工作原理2、连接数据库的常用方式使用Java数据库驱动JDBC-ODBC桥接器3、JDBC查询操作4、JDBC更新、添加与删除操作内容提要6.1JDBC介绍1、什么是JDBC

JDBC(JavaDataBaseConnectivity),SUN公司为Java程序提供的访问各种数据库的API,它由一些Java类和接口组成。2、JSP与JDBCJSP页面<%…%>Java程序片,使用java语法连接数据库数据库返回结果建立连接、发送SQL语句3.JDBC的基本原理早期数据库开发模式6.1JDBC介绍编程语言OracleSybaseSQLServerMySQLAPIforOracleAPIforSybaseAPIforSQLServerAPIforMySQL使用使用使用使用操作操作操作操作各种数据库1、程序员操作不便2、产品维护成本增加3.JDBC的基本原理JDBC开发数据库模式6.1JDBC介绍各种数据库OracleSybaseSQLServerMySQLAPIforOracleAPIforSybaseAPIforSQLServerAPIforMySQLJDBC接口由各个数据库厂商实现

接口1……接口2接口3接口4编程语言统一接口1、纯Java数据库驱动程序使用java语言编写的数据库驱动程序(数据库厂商完成)。JDBC提供的API将Java数据库驱动转换为数据库系统所使用的专门协议来实现与数据库交互2、JDBC-ODBC桥接器应用程序建立“JDBC-ODBC”之间的连接,即“桥接器”,和数据库的连接由ODBC(OpenDatabaseConnectivity)去完成。6.2JDBC连接数据库的常用方式

JDBC调用Java数据库驱动程序充分利用ODBC的优势JDBC-ODBC1、纯Java数据库驱动程序6.2JDBC连接数据库的常用方式应用程序JDBCOracle驱动SQLServer驱动MySQL驱动其他驱动Oracle数据库SQLServerMySQL数据库其他数据库使用加载连接连接连接连接使用JDBC的应用程序所驻留的计算机2、JDBC-ODBC桥接器:应用程序建立JDBC和ODBC之间的连接,即所谓的建立JDBC-ODBC桥接器,而和数据库的连接由ODBC完成6.2JDBC连接数据库的常用方式编程语言OracleSybaseSQLServerMySQLAPIforOracleAPIforSybaseAPIforSQLServerAPIforMySQLJDBCODBC返回1、纯Java数据库驱动程序JDBC1)位置:位于JDK的安装目录下2)内容接口:Driver、Connection、Statement

ResultSet类:DriverManager6.2JDBC连接数据库的常用方式C:\ProgramFiles\Java\jdk1.6.0_02\jre\lib\rt.jar导入java.sql.*1、纯Java数据库驱动程序JDBC6.2JDBC连接数据库的常用方式名称解释Driver驱动程序接口,被数据库厂商实现,加载后才能连接数据库DrvierManager(类)处理驱动的调入,并且产生新的数据库连接Connection代表对特定数据库的连接Statement用于发送SQL语句,接收SQL的执行结果ResultSet执行查询语句得到的结果集使用顺序自上而下1、纯Java数据库驱动程序数据库驱动(SQLServer2005)1)位置需要开发者下载,并配置项目根目录\WebRoot\WEB-INF\lib2)内容(对JDBC底层接口的实现类)6.2JDBC连接数据库的常用方式1、JDBC准备工作1)下载JDBC数据库驱动(驱动由相应的数据库厂商来提供)

例如:SQLServer2005——sqljdbc.jar

com.microsoft.sqlserver.jdbc.SQLServerDriver2)配置JDBC数据库驱动将sqljdbc.jar文件拷贝到MyEclipse中的web项目的目录\WebRoot\WEB-INF\lib下6.3使用JDBC连接数据库2、JDBC编程步骤步骤1:在程序中加载驱动驱动程序类:com.microsoft.sqlserver.jdbc.SQLServerDriver加载方法:Class.forName(驱动程序类)6.3使用JDBC连接数据库try{

}catch(ClassNotFoundExceptione){System.out.println("数据库驱动加载错误");}Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");注意:Class是包java.lang中的一个类,该类调用静态方法forName可以加载驱动,该方法抛ClassNotFoundException异常,因此需要捕获异常2、JDBC编程步骤步骤2:创建连接对象(连接数据库)使用DriverManager类的方法getConnection创建连接对象格式:Connectionconn=DriverManager.getConnection(String

uri,Stringuser,Stringpassword)参数说明:uri:要连接的数据库的路径,根据数据库不同变化user:登录数据库的用户名password:登录数据库的密码注意:该方法会抛出SQLException(SQL异常)6.3使用JDBC连接数据库步骤2:创建数据库连接对象6.3使用JDBC连接数据库Stringuri="jdbc:sqlserver://:1433;DatabaseName=school";Stringuser="sa";Stringpassword="sa";try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");Connectionconn=DriverManager.getConnection(uri,user,password);}catch(ClassNotFoundExceptione){System.out.println("数据库驱动加载错误");}catch(SQLExceptione){System.out.println("获取连接错误");}if(conn!=null)System.out.println("数据库连接成功");数据库名服务器ip如果得到空对象说明连接失败2、JDBC编程步骤步骤3:发送SQL语句到数据库1)创建Statement

作用:Statement对象用于将SQL语句发送到数据库中格式:Statementstmt=conn.createSatement()2)执行SQL语句(调用Statement的方法)查询方法:publicResultSetexecuteQuery(Stringsql)throwsSQLException更新方法:publicintexecuteUpdate(Stringsql)throwsSQLException6.3使用JDBC连接数据库添加、修改、删除2、JDBC编程步骤步骤3:发送SQL语句到数据库(例:查询)6.3使用JDBC连接数据库try{……Stringsql="select*fromstudent";Statetmentstmt=conn.createStatement();ResultSetrs=stmt.executeQuery(sql);……}catch(……){……}SQL语句语句对象执行SQL说明:此步骤得到的结果存储在rs结果集合中,下一步要遍历结果集取出数据来应用2、JDBC编程步骤步骤4:遍历展示结果集1)遍历行:ResultSet对象的next()方法Booleanrs.next():从当前位置移动游标向前移动一行,如果当前行有效,返回true,否则返回false2)遍历列:通过ResultSet对象的getXXX()方法遍历行中的列p1356.3使用JDBC连接数据库游标游标游标游标返回类型方法名称(根据字段名称)返回类型方法名称(根据字段的索引)intgetInt(StringFieldName)intgetInt(intcolunIndex)floatgetFloat(StringFieldName)floatgetFloat(intcolunIndex)dategetDate(StringFieldName)dategetDate(intcolunIndex)stringgetString(StringFieldName)stringgetString(intcolunIndex)注意:colunIndex从1开始计数Stringsql="select*fromstudent";Statetmentstmt=conn.createStatement();ResultSetrs=stmt.executeQuery(sql);while(rs.next()){ out.println(rs.getString("id"));out.println(rs.getString("name"));out.println(rs.getString("age"));out.println(rs.getString("jspScore"));out.println("<br/>");}注意:此时游标停留在当前结果集的第一行的前面注意:此时游标停留在第一行输出结果:在jsp页面中逐行打印出结果集中的记录2、JDBC编程步骤步骤5:关闭数据库连接1)rs.close()关闭结果集2)stmt.close()关闭statement对象3)conn.close()关闭Connection对象6.3使用JDBC连接数据库注意:关闭数据库连接的顺序2、JDBC编程步骤(总结)6.3使用JDBC连接数据库加载驱动连接数据库发送SQL语句处理返回结果关闭资源Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");Stringuri="jdbc:sqlserver://:1433;DatabaseName=school";Connectionconn=DriverManager.getConnection(uri,user,password);Statementstmt=conn.createSatement();ResultSetrs=stmt.executeQuery(sql);rs.close();stmt.close();conn.close();while(rs.next()){ out.print(rs.getString("id")); ……}总结2:JDBCAPI中重要的接口和类这几个常用的类和接口都位于包java.sql中,接口的实现类为于com.microsoft.sqlserver.jdbc中6.3使用JDBC连接数据库名称解释Driver驱动程序接口被数据库厂商实现,加载后才能连接数据库DrvierManager(类)处理驱动的调入并且对产生新的数据库连接Connection代表对特定数据库的连接Statement用于发送Sql语句,并接收Sql的执行结果ResultSet执行查询语句得到的结果集6.3使用JDBC连接数据库扩展:将数据库操作封装为一个java类,提高可重用性第一步:新建类DBManager.java第二步:导包操作第三步:编写类代码public

classDBManager{1、定义变量2、获取连接方法getConnection3、执行查询方法executeQuery4、释放资源的方法releaseSource}6.3使用JDBC连接数据库1、定义变量privateConnectionconn=null;privateStatementstmt=null;privateResultSetrs=null;privateStringuri="jdbc:sqlserver://:1433;DatabaseName=school";privateStringuser="sa";privateStringpassword="123456";6.3使用JDBC连接数据库2、编写获取数据库连接对象的方法publicConnectiongetConnection(){try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");conn=DriverManager.getConnection(uri,user,password);if(conn!=null){System.out.println("数据库链接获取成功");}}catch(ClassNotFoundExceptione){System.out.println("驱动程序加载异常");}catch(SQLExceptione){System.out.println("获取连接异常");e.printStackTrace();//打印堆栈跟踪}return

conn;}6.3使用JDBC连接数据库3、编写获取查询结果集的方法publicResultSetexecuteQuery(Stringsql){try{stmt=conn.createStatement();rs=stmt.executeQuery(sql);}catch(SQLExceptione){System.out.println("SQL执行错误");e.printStackTrace();//打印堆栈跟踪}return

rs;}6.3使用JDBC连接数据库4、编写释放数据库资源的方法public

voidreleaseSource(){try{if(rs!=null)rs.close();if(stmt!=null)stmt.close();if(conn!=null)conn.close();}catch(SQLExceptione){e.printStackTrace();}}6.3使用JDBC连接数据库5、构造函数直接获取数据库连接/**

*

声明该类的对象时,就建立数据库连接

*/publicDBManager(){this.conn=this.getConnection();}顺序查询简单查询select*fromstudent条件查询select*fromstudentwhereage=23select*fromstudentwhereagebetween23and40排序查询select*fromstudentorderbyjspscore

select*fromstudentorderby

jspscore

ascselect*fromstudentorderby

jspscore

desc

6.4JDBC数据库查询age>=23andage<=40按照jspscore排序默认升序按照jspscore排序升序按照jspscore排序降序模糊查询select*fromstudentwherenamelike

‘张%’张、张三、张晓晓……第一个字符是“张”select*fromstudentwherenamelike

‘张_’张三、张晓……包含两个字符,且第一个字符是“张”select*fromstudentwherenamelike

‘%小%’张小青、王小红、李小丽……包含字符“小”练习写出SQL语句查询t1表中content字段包含“java”,并且倒数第2个字符为‘E’的记录select*fromt1wherecontentlike

‘%java%E_’6.4JDBC数据库查询学生练习时间。。。。6.4JDBC数据库查询DBManager:executeQueryquery1.jsp(简单查询)条件查询模糊查询排序查询6.4JDBC数据库查询综合练习1----条件查询(结合表单来实现查询)

<body>

<h1>请输入学生的成绩</h1>

<formaction="<%=path%>/query/query.jsp"

method="get">

学生成绩在<inputtype="text"name="scoreBegin"/>

到<inputtype="text"name="scoreEnd"/>之间的学生记录是

<inputtype="submit"name="submit"value="查询"/>

</form>

</body>student.jspquery.jspStatement对象更新方法publicint

executeUpdate(String

sqlStatement);返回受影响的行数,若返回0,则说明更新操作失败SQL语句添加记录insert1)insertintotestvalues(‘zhangsan’,23)2)insertintotest(name)values(‘lisi’)修改记录update1)updatetestsetage=40wherename='zhangsan‘删除记录delete2)deletefromtestwherename='zhangsan'6.5更新、添加与删除

DBManager添加更新方法public

intexecuteUpdate(Stringsql){inttemp=0;try{stmt=conn.createStatement();temp=stmt.executeUpdate(sql);}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();System.out.println("sql语句执行错误!");}returntemp;}SQL语句注意:字符串拼接技巧6.5更新、添加与删除以插入记录的SQL为例,插入记录操作时,变量var中存储着字段的值,首先:写好insertintostudentvalues()

然后(1)见到字符串类型的字段,sql中就拼’”+var+”’,(2)见到数据类型的字段,sql中就拼”+var+”最后形成:insertintostudentvalues('"+id+"','"+name+"',"+age+","+jspscore+");案例:insert1.jspinsert1Handle.jsp6.5更新、添加与删除综合练习2----添加记录6.5更新、添加与删除综合练习3----更新记录(删除和修改)数据库综合练习query.jsp结果展示页面updateForm.jsp表单1、接参数id2、查询数据库3、显示到表单中(或者是接收到所有字段信息)updateHandle.jsp添加处理页面1、接参数2、更新到数据库3、跳转deleteHandle.jsp删除处理页面1、接参数id2、删除数据库3、跳转addForm.jsp表单addHandle.jsp添加处理页面1、接参数2、添加到数据库3、跳转addHandle.jsp添加处理页面1、接参数2、添加到数据库3、跳转批量删除query.jsp结果展示页面deleteAll.jsp批量删除处理页面1、接id参数(接收到数组)2、使用for循环拼接delete语句3、执行批量删除语句4、跳转到query页面数据库综合练习添加功能删除功能修改功能展示页面

<body>

<formaction="<%=path%>/add/addHandle.jsp"

method="get">

学号:<inputtype="text"name="number"/><br/>

姓名:<inputtype="text"name="name"/><br/>

年龄:<inputtype="text"name="age"/><br/>

成绩:<inputtype="text"name="score"/><br/>

<inputtype="submit"name="submit"value="添加"/>

</form>

</body>

<%

//1接收参数

Stringname=request.getParameter("name");name=newString(name.getBytes("iso-8859-1"),"gb2312");Stringnumber=request.getParameter("number");Stringage=request.getParameter("age");StringjspScore=request.getParameter("score");Stringsql="insertintostudentvalues('"+number+"','"+name+"',"+age+","+jspScore+")";

//2添加到数据库

DBManagerdb=newDBManager();

intcount=db.executeUpdate(sql);

//3释放数据库资源

db.releaseSource();

//4跳转到查询页面

response.sendRedirect("query.jsp");

%>addForm.jspaddHandle.jsp

<body>

<%DBManagerdb=newDBManager();ResultSetrs=db.executeQuery("select*fromstudent");

%>

<h1>以下是查询结果</h1>

<formaction="<%=path%>/delete/deleteAll.jsp">

<tablewidth="600"border="1">

<tr><th>选择</th><th>id</th><th>名字</th><th>年龄</th><th>分数</th><thcolspan="2">操作</th></tr>

<%

while(rs.next()){

%>

<tralign="center">

<td><inputtype="checkbox"name="deleteAll"value="<%=rs.getString("id")%>"/></td>

<td><%=rs.getString("id")%></td>

<td><%=rs.getString("name")%></td>

<td><%=rs.getInt("age")%></td>

<td><%=rs.getFloat("jspScore")%></td>

<td><ahref="<%=path%>/update/updateForm.jsp?id=<%=rs.getString("id")%>&name=<%=rs.getString(2)%>&age=<%=rs.getString(3)%>&jspScore=<%=rs.getString(4)%>">修改</a></td>

<td><ahref="<%=path%>/delete/delete.jsp?id=<%=rs.getString("id")%>">删除</a></td>

</tr>

<%}db.releaseSource();

%>

</table>

<inputtype="submit"name=""value="批量删除"/>

</form>

</body>query.jsp接收参数,并显示在表单中提交表单时,交给updateHandle.jsp处理显示当前记录id值,不允许修改显示当前记录姓名显示当前记录年龄显示当前记录成绩updateForm.jspupdateHandle.jsp关于批量删除思路接收到的是String类型的数组,数组中存放了记录的id值1)deletefromstudentwhereidin(id1,id2,id3……)2)在循环中执行delete语句deleteHandle.jsp通过超链接传递参数的写法

<ahref="<%=path%>/updateanddelete/updateForm.jsp?id=<%=rs.getString(1)%>&name=<%=rs.getString(2)%>&age=<%=rs.getString(3)%>&jspscore=<%=rs.getString(4)%>">修改</a><ahref="<%=path%>/updateanddelete/deleteHandle.jsp?id=<%=rs.getString(1)%>">删除</a>1、随机查询(参考教材中P139-143)1)顺序查询:结果集游标只能顺序向前移动。使用ResultSet结果集只能够执行顺序查询rs.next()方法6.6JDBC随机查询——滚动结果集游标游标游标游标ResultSet结果集合只支持游标顺序的依次下移,不能够后退,也不能够随机的定位。(只进的ResultSet)1)stmt=conn.createStatement();2)rs=stmt.executeQuery(sql);游标1、随机查询(参考教材中P139-143)2)随机查询:结果集游标可以随意的滚动和定位例:假设数据库中记录是按照“学号”字段排序的,在页面中按照下图所示顺序输出记录6.6JDBC随机查询——滚动结果集第4条第3条第1条第1条进行随机查询需要支持滚动的结果集3)获取可滚动结果集的方法Statementstmt=conn.createStatement(inttype,intConcurrency)rs=stmt.executeQuery(sql);(1)Type取值决定滚动方式①

ResultSet.TYPE_FORWARD_ONLY:游标只能向前滚动②

ResultSet.TYPE_SCROLL_INSENSITIVE:游标可以前后滚动,不敏感③

ResultSet.TYPE_SCROLL_SENSITIVE:游标可以前后滚动,敏感(2)Concurrency决定是否可以用结果集更新数据库①

ResultSet.CONCUR_READ_ONLY:不能用结果集更新数据②

ResultSet.CONCUR_UPDATABLE:可以用结果集更新数据6.6JDBC随机查询——滚动结果集1、随机查询(1)Type取值决定滚动方式static

int

TYPE_SCROLL_INSENSITIVE

The

constant

indicating

the

type

for

a

ResultSet

object

that

is

scrollable

but

generally

not

sensitive

to

changes

made

by

others.

static

int

TYPE_SCROLL_SENSITIVE

The

constant

indicating

the

type

for

a

ResultSet

object

that

is

scrollable

and

generally

sensitive

to

changes

made

by

others.

6.6JDBC随机查询——滚动结果集对数据库中update操作是否敏感,即有另外的事务更新了数据库中的记录,则已经取出的ResultSet中相应记录也会变化。6.6JDBC随机查询——滚动结果集1、随机查询(1)Type取值决定滚动方式A线程:1)查询2)在页面上展示B线程:1)更新2)在页面上展示内存:ResultSet(在线)更新了数据表的某条记录如果ResultSet是敏感的(TYPE_SCROLL_SENSITIVE),则ResultSet会自动更新数据,否则,A看到的将不是最新的数据库中的数据1、随机查询(2)Concurrency决定是否可以用结果集更新数据库①

ResultSet.CONCUR_READ_ONLY:不能用结果集更新数据②

ResultSet.CONCUR_UPDATABLE:可以用结果集更新数据例:创建一个支持滚动的敏感结果集,可以使用结果集更新数据库6.6JDBC随机查询——滚动结果集stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);1、随机查询(2)Concurrency决定是否可以用结果集更新数据库②

ResultSet.CONCUR_UPDATABLE:可以用结果集更新数据

方法1:voidupdateString(StringcolumnLabel,Stringx)throwsSQLException;

例:rs.updateString("id","0011");

方法2:voidupdateString(intcolumnIndex,Stringx)throwsSQLException;

例:rs.updateString(2,"小王");方法3:voidupdateRow()throwsSQLException;——提交更新6.6JDBC随机查询——滚动结果集

//更新结果集合示例

rs.first();//将游标移动到第一行rs.updateString(“id”,“0011”);//设置更新的id字段值rs.updateString(2,“小王”);//设置更新的name字段值rs.updateRow();//提交更新数据库表字段索引,从1开始1232、rs对象的常用方法1)rs.next()游标前进2)rs.previous()游标向前移动一次,若游标指向第一行时,调用该方法返回false,指向其他行时,调用返回true3)rs.first()、rs.last()游标定位到第一条和最后一条记录4)rs.absolute(introw)游标指定移动到某行5)rs.isBeforeFirst()、rs.isAfterLast()、rs.isFirst()、

rs.isLast()6)rs.getRow()返回当前游标指向的行号,行号从1开始示例:chap06/scroolRS/scroolRS.jsp6.6JDBC随机查询——滚动结果集/**支持可滚动结果集的查询方法(添加到DBManager中)

*

@param

sql

*

@return

*/publicResultSetscollExecuteQuery(Stringsql){try{stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}return

rs;}学生练习时间。。。。6.6JDBC随机查询——滚动结果集滚动结果集练习chap06/scroolRS/scroolRS.jsp滚动结果集的应用——思考题:如何获取数据库中某个表(student)中的记录数?1)遍历rs结果集,使用局部变量count++2)使用selectcount(*)ascountfromuser1查询出计算字段,并命名为count,再利用rs.getString(1),将其获取出来3)使用可滚动的结果集,rs.last();rs.getRow();6.6JDBC随机查询——滚动结果集6.6JDBC随机查询——滚动结果集//方法一和方法三try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");Connectionconn=DriverManager.getConnection(uri,"sa","6507725");Statementstmt=conn.createStatement();Stringsql="select*fromstudent";ResultSetrs=stmt.executeQuery(sql);introwCount=0;while(rs.next()){rowCount++;}System.out.println("userInfo表总共行数为:"+rowCount);}catch(ClassNotFoundExceptione){}catch(SQLExceptione){}注意:这种实现方法有个弊端,如果此时想对rs的结果集进行操作,是没有办法的。因为游标已经停留在最后一行之后,最好使用支持滚动的结果集,重新将游标放到第一行。rs.first();rs.getRow();Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);思考题6.6JDBC随机查询——滚动结果集//方法二Stringuri="jdbc:sqlserver://:1433;DatabaseName=school";try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");Connectionconn=DriverManager.getConnection(uri,"sa","6507725");Statementstmt=conn.createStatement();

Stringsql="selectcount(*)ascountfromstudent";ResultSetrs=stmt.executeQuery(sql);while(rs.next()){System.out.println("userInfo表总共行数为:"+rs.getString(1));}}catch(ClassNotFoundExceptione){}catch(SQLExceptione){

}应用程序建立JDBC和ODBC之间的连接,即所谓的建立JDBC-ODBC桥接器,而和数据库的连接由ODBC完成6.7JDBC-ODBC桥接器连接数据库编程语言OracleSybaseSQLServerMySQLAPIforOracleAPIforSybaseAPIforSQLServerAPIforMySQLJDBCODBC返回使用JDBC-ODBC桥接器访问数据库的步骤1)创建ODBC数据源步骤:控制面板——管理工具——ODBC数据源——用户DSN——添加——选择数据库驱动程序——完成——数据源名——选择数据库——测试数据源2)加载桥接器驱动程序Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");rt.jar------sun.jdbc.odbc包下JdbcOdbcDriver类(jdk自带的)3)和ODBC数据源建立连接Connectioncon=DriverManager.getConnection(“jdbc:odbc:数据源名字”,“uername”,“password”);6.7JDBC-ODBC桥接器连接数据库例.ODBC连接EXCEL

和sqlserverTestODBCExcel.javaTest.jsppackagedj.nepu;importjava.sql.*;public

classTest{public

static

voidmain(String[]args){//TODOAuto-generatedmethodstubConnectionconn=null;Statementstmt=null;ResultSetrs=null;Stringsql="select*fromstudent";try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");conn=DriverManager.getConnection("jdbc:odbc:s","","");stmt=conn.createStatement();rs=stmt.executeQuery(sql);}

catch(ClassNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{while(rs.next()){System.out.print(rs.getString(1)+"");System.out.print(rs.getString(2)+"");System.out.print(rs.getString(3)+"");System.out.print("\n");}}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}在主函数中测试jdbc-odbc连接到sqlserver数据源名称6.7JDBC-ODBC桥接器连接数据库可以在DBManager中添加一个获取连接的方法再添加一个构造函数privateConnectiongetConnection2(){try{//加载数据连接驱动Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//获取数据库连接conn=DriverManager.getConnection("jdbc:odbc:aa","","");if(conn!=null)System.out.println("数据库连接成功");}catch(ClassNotFoundExceptione){System.out.println("数据库驱动加载错误");e.printStackTrace();}catch(SQLExceptione){System.out.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论