您好,欢迎访问三七文档
1第12章JSP操作数据库222:35JDBCDriverJDBC-ODBCBridge,plusODBCdriverJDK提供JDBC-ODBC连接桥没有JDBC驱动程序时使用Native-API,partlyJavadriver安装特定数据库平台的代码JDBC-net,pureJavadriver中间件Native-protocol,pureJavadriverJDBC命令转化为数据库的本地协议322:35JDBCAPI引入java.sql.*包驱动程序管理器(DriverManager)驱动(Driver)连接(Connection)SQL语句(Statement)结果集(ResultSet)422:35驱动程序管理器数据库URL对象格式jdbc:subProtocol:subName://hostname:port;DatabaseName=XXX;分析jdbc:协议,唯一的subProtocol:子协议subName:子名。与专有驱动有关hostname:主机名port:连接端口DatabaseName:连接的数据库名522:35数据库名驱动程序URLMSSQLServer2000com.Microsoft.sqlserver.SQLServerDriverjdbc:Microsoft:sqlserver://[ip]:[port];user=[user];password=[password]Oracleoci8Oracle.jdbc.driver.OracleDriverjdbc:oracle:oci8:@[sid]OraclethinDriveroracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@[ip]:[port]:[sid]JDBC-ODBCSun.jdbc.odbc.JdbcOdbcDriverjdbc:odbc:[odbcsource]622:35获得连接DriverManager.getConnection(Stringurl);DriverManager.getConnection(Stringurl,propertiesinfo);DriverManager.getConnection(Stringurl,Stringusername,Stringpassword)722:35驱动(Driver)驱动程序由开发商提供先装载数据库驱动程序,然后连接数据库命令Class.forName(driverName);举例importjava.sql.*;Class.forName(“com.Microsoft.jdbc.sqlserver.SqlServerDriver”);822:35连接(Connection)主要方法StatementcreateStatement()创建一个Statement对象voidcommit()提交对数据库的改动并释放当前连接的锁voidrollback():回滚当前事务中的所有改动并释放锁voidsetReadOnly():设置连接的只读模式voidclose():释放连接对象的数据库和JDBC资源922:35SQL语句(Statement)三种对象Statement:执行不带参数的简单SQL语句PreparedStatement:执行带IN参数和不带IN参数的预编译SQL语句CallableStatement:用于执行对数据库存储过程的调用1022:35Statement对象创建方式Statementstmt=con.createStatement();成员方法booleanexecute(Stringsql):执行SQL语句ResultSetexecuteQuery(Stringsql):执行SELECT语句intexecuteUpdate(Stringsql):执行INSERT.UPDATE,DELETE,DDL语句ConnectiongetConnection():获取对数据库的连接intgetMaxRows():返回结果集的最大行数ResultSetgetResultSet():获取结果集voidclose():关闭指定的数据库连接1122:35PreparedStatement操作数据库带输入参数的sql语句Statement只能执行不带任何参数的Sql语句方法:课本246页,表12-31222:35操作存储过程CallableStatement是PreparedStement的子类CallableStatement支持IN型和OUT型参数PreparedStatement只支持IN型参数。课本247页,表12-4createorreplaceproceduregetArea(rinnumber,areaoutnumber)asbeginarea:=3.14159*r*r;end;1322:35CallableStatementst=conn.prepareCall({callgetArea(?,?)});st.registerOutParameter(2,java.sql.Types.NUMERIC);st.setDouble(1,12);booleancount=st.execute();doubleresult=st.getDouble(2);1422:35JDBC应用加载JDBC驱动程序建立与数据库的连接对象建立一个语句对象执行SQL语句处理结果集关闭所有JDBC对象数据库链接大全1522:35%@pagecontentType=text/html;charset=GBK%%@pageimport=java.sql.*%htmlheadtitle连接access数据库/title/headbodybgcolor=cyan使用jdbc-odbc桥连接Access数据库演示%Connectioncon;Statementsql;ResultSetrs;try{Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);con=DriverManager.getConnection(jdbc:odbc:news);sql=con.createStatement();rs=sql.executeQuery(select*fromnews);%1622:35tableborder=2trthwidth=100标题thwidth=200内容thwidth=100时间thwidth=200关键词/th/tr%while(rs.next()){out.print(tr);out.print(td+rs.getString(2)+/td);out.print(td+rs.getString(3)+/td);out.print(td+rs.getDate(4)+/td);out.print(td+rs.getString(5)+/td);out.print(/tr);}%/table1722:35%rs.close();sql.close();con.close();}catch(ClassNotFoundExceptione){out.print(e);}catch(SQLExceptione){out.println(e);}%/body/html1822:351922:356.4查询记录JDBC提供的API可以将标准的SQL语句发送给数据库,实现和数据库的交互。对一个数据库中表进行查询的具体步骤:向数据库发送SQL语句;Try{Statementsql=con.createStatement();}Catch(SQLExceptione){}处理查询结果ResultSetrs=sql.executeQuery(“Select*fromstudent”);☺ResultSet对象一次只能看到一个数据行,使用next()方法走到下一数据行,获得一行数据后,Result对象可以使用getXxx方法获得字段值,将位置索引或列名传递给getXxx方法的参数即可。☺无论字段是何种属性,总可以使用getString(intcolumnIndex)或getString(StringcolumnName)方法返回字段值的串表示。2022:35ResultSet的方法返回值类型方法名称booleangetBoolean()bytegetByte()byte[]getBytes()Java.sql.DategetDate()doublegetDouble()floatgetFloat()intgetInt()longgetLong()ObjectgetObject()shortgetShort()java.lang.StringgetString()java.sql.TimegetTime()2122:35说明无论字段是何种属性,总可以使用getString(intclonumIndex)或getString(Stringcolnumname)方法返回字段值的串表示当使用getXxx()方法查看一行记录时,不可以颠倒字段的顺序,例如:rs.getString(4);rs.getDate(3);2222:356.4.1顺序查询如何知道表中的字段?建立连接对象con之后,该连接对象调用getMetaData()可以返回DatabaseMetaData对象DatabaseMetaDatametadata=con.getMetaData();Metadata对象调用getColumns可以将表的字段信息以行列的形式存储在一个ResultSet对象中ResultSettablemessage=metadata.getColumns(null,null,”表名”,null);2322:35%Connectioncon;Statementsql;ResultSetrs;try{Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);con=DriverManager.getConnection(jdbc:odbc:news);DatabaseMetaDatametadata=con.getMetaData();ResultSetrs1=metadata.getColumns(null,null,news,null);intn=0;2422:35out.print(tableborder=1);out.print(tr);while(rs1.next()){n++;StringcolumnName=rs1.getString(4);out.println(td+columnName+/td);}out.print(/tr);2522:35sql=con.createStatement();rs=sql.executeQuery(select*fromnews);while(rs.next()){out.print(tr);for(intk=1;k=n;k++){out.print(td+rs.getString(k)+/td);}out.print(/tr);}out.print(/table);con.close();}2622:352722:35PreparedStatement生成连接对象con后就可以调用preparedStatement(Stringsql)方法对参数sql指定的SQL语句进行预编译处理,提高访问数据库的速度。使用通配符“?”来代替字段的值sql=con.preparedStatement(“select*fromnewswheretitle
本文标题:JSP操作数据库
链接地址:https://www.777doc.com/doc-2882216 .html