JDBC讲课流程.docx

上传人:b****7 文档编号:15491075 上传时间:2023-07-05 格式:DOCX 页数:66 大小:79.93KB
下载 相关 举报
JDBC讲课流程.docx_第1页
第1页 / 共66页
JDBC讲课流程.docx_第2页
第2页 / 共66页
JDBC讲课流程.docx_第3页
第3页 / 共66页
JDBC讲课流程.docx_第4页
第4页 / 共66页
JDBC讲课流程.docx_第5页
第5页 / 共66页
JDBC讲课流程.docx_第6页
第6页 / 共66页
JDBC讲课流程.docx_第7页
第7页 / 共66页
JDBC讲课流程.docx_第8页
第8页 / 共66页
JDBC讲课流程.docx_第9页
第9页 / 共66页
JDBC讲课流程.docx_第10页
第10页 / 共66页
JDBC讲课流程.docx_第11页
第11页 / 共66页
JDBC讲课流程.docx_第12页
第12页 / 共66页
JDBC讲课流程.docx_第13页
第13页 / 共66页
JDBC讲课流程.docx_第14页
第14页 / 共66页
JDBC讲课流程.docx_第15页
第15页 / 共66页
JDBC讲课流程.docx_第16页
第16页 / 共66页
JDBC讲课流程.docx_第17页
第17页 / 共66页
JDBC讲课流程.docx_第18页
第18页 / 共66页
JDBC讲课流程.docx_第19页
第19页 / 共66页
JDBC讲课流程.docx_第20页
第20页 / 共66页
亲,该文档总共66页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

JDBC讲课流程.docx

《JDBC讲课流程.docx》由会员分享,可在线阅读,更多相关《JDBC讲课流程.docx(66页珍藏版)》请在冰点文库上搜索。

JDBC讲课流程.docx

JDBC讲课流程

JDBC讲课流程

第一课ﻬJDBC概述和基本数据库操作

JDBC(javadatabase connectivity)用于在java程序中实现数据库操作的数据库编程接口,支持基本的SQL语句,为应用程序和数据库之间提供了桥梁

java程序和数据库之间的关系如下图:

JDBC的版本:

JDK1.4,1.5对应JDBC3.0

JDK1.6对应JDBC4.0

介绍java中和操作数据库相关的API,解释这些API都是未实现的,真正实现操作的是数据库厂家提供的类库,例如oracle提供的classes12.jar,sqlserver提供的mssqlserver.jar等。

将oracle安装文件下的classes12.jar文件构建到myeclipse开发工具下。

开始数据库编程:

(别忘先导入包)

第一步加载数据库驱动程序

Class.forName("oracle.jdbc.driver.OracleDriver");这是利用反射注册一个数据库驱动

或者用驱动管理器也可以注册数据库驱动

DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

第二步创建数据库连接对象

Stringurl="jdbc:

oracle:

thin:

@127.0.0.1:

1521:

dhc";

Stringuser="scott";

Stringpwd= "tiger";

Connectionconn=DriverManager.getConnection(url,user,pwd);

其中dhc表示的是数据库名或域名而并非是服务名

DriverManager类存有已注册的 Driver类的清单。

当调用方法getConnection时,它将检查清单中的每个驱动程序,直到找到可与URL中指定的数据库进行连接的驱动程序为止。

如果改成用OCI形式连接,url字符串改为类似以下语句:

Stringurl="jdbc:

oracle:

oci8:

scott/tiger@dhc";

或者

Stringurl ="jdbc:

oracle:

oci:

scott/tiger@dhc";

第三步创建SQL语句载体对象

Statementstmt =conn.createStatement();

第四步执行SQL语句返回结果集对象

ResultSetrs= stmt.executeQuery("select*fromemployees");

第五步遍历结果集返回数据

while(rs.next()){

System.out.println("编号:

" + rs.getInt

(1)+ "\t姓名:

"+ rs.getString(3));

}

在这一步讲解结果集指针的概念,默认状态下游标只能向下移动

需要注意getXXX方法的数据类型要和表中字段的数据类型兼容。

讲解getXXX()括号中的参数既可以是列索引,也可以是列名,如果使用列名并且结果集中有多个列的名字是相同的,那么返回第一列的的列值,一般用列索引效率会高一些

介绍rs.wasNull方法,当前最后一次getXXX()返回的列值是否为null,需要注意的是如果get方法以数字的形式获取列值且返回的列值为null,得到的结果会自动的转换为0或0.0

别忘记在下面介绍java的数据类型和SQL的数据类型之间的映射关系

第六步关闭对象释放资源

采取逆向关闭对象的顺序

rs.close();

stmt.close();

conn.close();

在关闭stmt对象或利用stmt对象重新执行其他SQL语句时时会自动关闭rs对象。

解讲数据类型之间的映射关系

SQL类型

JAVA类型

CHAR

String

REAL

Float

DATALINK

java.net.URL

REF

Ref

STRUCT

Struct

DISTINCT

Mappingofunderlyingtype

ARRAY

Array

BLOB

Blob

CLOB

Clob

TIMESTAMP

java.sql.Timestamp

TIME

java.sql.Time

DATE

java.sql.Date

LONGVARBINARY

byte[]

VARBINARY

byte[]

BINARY

byte[]

DOUBLE

double

FLOAT

double

VARCHAR

String

LONGVARCHAR

String

以上操作的完整代码:

importjava.sql.*;

publicclass JDBC1{

publicstaticvoidmain(String[]args)throwsSQLException{

//注册数据库驱动程序

ﻩDriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

//创建数据库连接对象

String url= "jdbc:

oracle:

thin:

@127.0.0.1:

1521:

dhc";

ﻩStringuser = "scott";

ﻩStringpwd="tiger";

Connectionconn =DriverManager.getConnection(url, user,pwd);

//创建SQL语句载体对象

Statementstmt=conn.createStatement();

ﻩﻩ//返回结果集对象

ﻩResultSetrs=stmt.executeQuery("select*fromemployees");

ﻩ//遍历结果集返回数据

ﻩwhile(rs.next()){

ﻩﻩSystem.out.println("编号:

"+ rs.getInt

(1)+ "\t姓名:

"+rs.getString(3));

}

ﻩﻩ//关闭对象

ﻩrs.close();

ﻩstmt.close();

ﻩconn.close();

}

}

经过优化的代码:

importjava.sql.*;

publicclassJDBC1{

ﻩpublicstaticvoidmain(String[] args){

Connectionconn= null;

ﻩStatementstmt= null;

ﻩﻩResultSetrs=null;

ﻩﻩtry{

ﻩﻩﻩ// 注册数据库驱动程序

ﻩDriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

//创建数据库连接对象

ﻩﻩString url ="jdbc:

oracle:

thin:

@127.0.0.1:

1521:

dhc";

ﻩStringuser ="scott";

ﻩString pwd ="tiger";

ﻩﻩconn= DriverManager.getConnection(url, user,pwd);

ﻩﻩﻩ//创建SQL语句载体对象

ﻩﻩstmt=conn.createStatement();

ﻩﻩ//返回结果集对象

ﻩﻩrs = stmt.executeQuery("select * fromemployees");

ﻩﻩ//遍历结果集返回数据

ﻩﻩwhile (rs.next()) {

ﻩﻩSystem.out.println("编号:

"+rs.getInt(1)+"\t姓名:

ﻩﻩ+rs.getString(3));

ﻩ} catch(SQLExceptione){

e.printStackTrace();

} finally{

ﻩﻩﻩtry{

ﻩ//关闭对象

ﻩﻩif (rs!

=null)

ﻩﻩrs.close();

ﻩﻩﻩif(stmt!

=null)

ﻩﻩﻩﻩstmt.close();

ﻩif(conn!

=null)

ﻩﻩﻩﻩconn.close();

ﻩ}catch(SQLExceptione){

ﻩe.printStackTrace();

ﻩﻩ}

ﻩﻩ}

ﻩ}

}

练习:

查询departments表中的50~190号部门信息(部门编号,部门名称,部门管理者姓名,部门所在城市)

importjava.sql.*;

publicclassTest6{

publicstaticvoidmain(String[]args){

ﻩConnection conn=null;

ﻩﻩStatementstmt=null;

ﻩResultSet rs= null;

ﻩﻩtry{

DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

ﻩStringurl="jdbc:

oracle:

thin:

@localhost:

1521:

dhc";

ﻩStringuser="scott";

ﻩﻩﻩStringpwd= "tiger";

ﻩﻩconn =DriverManager.getConnection(url,user, pwd);

ﻩﻩstmt=conn.createStatement();

ﻩrs=stmt

ﻩﻩ.executeQuery("selectd.department_id,department_name,last_name,cityfromdepartmentsd,employeese,locations l whered.manager_id=e.employee_id(+)andd.location_id=l.location_idand d.department_id between50and190order byd.department_id");

ﻩwhile(rs.next()) {

ﻩSystem.out.println(rs.getInt

(1) +""+rs.getString

(2) +""

ﻩﻩﻩﻩﻩ+rs.getString(3)+ "ﻩ" + rs.getString(4));

ﻩ}

ﻩ}catch(SQLException e) {

ﻩe.printStackTrace();

ﻩ}finally{

ﻩﻩtry{

ﻩﻩﻩif(rs!

=null)

ﻩﻩﻩﻩrs.close();

ﻩﻩif(stmt!

= null)

ﻩﻩﻩﻩstmt.close();

ﻩﻩif (conn!

=null)

ﻩﻩconn.close();

}catch(Exception e) {

ﻩﻩﻩe.printStackTrace();

ﻩﻩﻩ}

ﻩ}

ﻩ}

}

综合练习:

查询job_history表中所有数据,将数据写入到文本文件中,一条记录一行,列值之间用|隔开

importjava.sql.*;

importjava.io.*;

publicclassTest7{

ﻩpublicstaticvoidmain(String[] args) {

ﻩConnection conn=null;

Statementstmt=null;

ﻩﻩResultSetrs= null;

ﻩ fw=null;

ﻩﻩBufferedWriter bw=null;

try{

ﻩDriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

ﻩﻩString url="jdbc:

oracle:

thin:

@localhost:

1521:

dhc";

ﻩStringuser ="scott";

ﻩﻩStringpwd="tiger";

ﻩconn=DriverManager.getConnection(url,user, pwd);

ﻩﻩﻩstmt =conn.createStatement();

ﻩrs=stmt.executeQuery("select*from job_history");

ﻩﻩfw=new("e:

\\job_history.txt");

ﻩﻩbw = new BufferedWriter(fw);

ﻩﻩwhile(rs.next()){

ﻩﻩbw.write(rs.getInt

(1)+"|"+ rs.getString

(2) +"|"

ﻩﻩﻩ+rs.getString(3)+"|"+ rs.getString(4)+"|"

ﻩﻩﻩ+ rs.getInt(5));

ﻩﻩﻩbw.newLine();

ﻩ}catch(SQLExceptione){

ﻩe.printStackTrace();

ﻩﻩ}catch(IOExceptione){

ﻩe.printStackTrace();

} finally{

ﻩﻩtry{

ﻩﻩﻩif(bw !

=null)

ﻩﻩﻩbw.close();

ﻩif(rs!

= null)

ﻩﻩrs.close();

ﻩﻩif (stmt !

=null)

ﻩﻩﻩﻩstmt.close();

ﻩﻩif(conn!

=null)

ﻩﻩﻩconn.close();ﻩﻩ

ﻩﻩ}catch (Exceptione){

ﻩﻩﻩe.printStackTrace();

ﻩﻩ}

ﻩ}

}

}

第二课ﻬ数据增删改和可滚动结果集

讲述Statement对象执行SQL语句的三种方法:

executeQuery()执行查询单个结果集的语句,该语句返回单个ResultSet对象

executeUpdate()执行给定 SQL语句,该语句可能为INSERT、UPDATE 或DELETE 语句,或者不返回任何内容的SQL 语句(如 SQLDDL语句),该语句返回影响的行数,如果是DDL语句则返回0

execute()执行给定的 SQL语句,这个SQL语句可能实现并不知道是查询还是增删改,返回值是布尔值,如果是查询语句返回结果则为true,可以用getResultSet得到ResultSet结果

创建一个学生表做数据增删改试验:

createtableStudent

sid number,ﻫsnamevarchar2(50),ﻫaddDatedateﻫ);

演示增加学生数据

importjava.sql.*;

publicclass Test8{

ﻩpublicstaticvoid main(String[]args) {

ﻩConnection conn= null;

ﻩStatement stmt=null;

try{

ﻩﻩDriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

ﻩﻩﻩString url="jdbc:

oracle:

thin:

@localhost:

1521:

dhc";

Stringuser="scott";

ﻩStringpwd="tiger";

ﻩconn =DriverManager.getConnection(url,user,pwd);

ﻩstmt=conn.createStatement();

ﻩﻩinti=stmt

ﻩﻩﻩﻩ.executeUpdate("insertinto Studentvalues (101,'tom',to_date('2008-3-1','yyyy-mm-dd'))");

ﻩﻩSystem.out.println("操作了"+i+"行");

ﻩ}catch(SQLExceptione){

ﻩﻩe.printStackTrace();

}finally{

try{

ﻩﻩif(stmt!

= null)

ﻩﻩﻩstmt.close();

ﻩﻩif(conn!

= null)

ﻩconn.close();

ﻩ}catch (Exceptione){

ﻩﻩe.printStackTrace();

ﻩﻩ}

ﻩﻩ}

ﻩ}

}

演示修改学生数据:

……

int i =stmt

ﻩﻩﻩ.executeUpdate("updateStudentsetsname='jack',addDate=to_date('2007-3-1','yyyy-mm-dd')where sid=101");

System.out.println("操作了"+i+"行");

……

学生自己动手改成删除101学生数据:

……

int i= stmt

ﻩﻩﻩ.executeUpdate("delete fromStudentwhere sid=101");

System.out.println("操作了"+i+"行");

……

学生试验执行DDL语句删除表:

……

inti=stmt

ﻩ.executeUpdate("droptable Student");

System.out.println("操作了" +i +"行");

……

学生练习:

提供一个原始文本文件Student.txt,将文本文件中的数据导入到数据库中的表中

Student.txt文件内容

101,tom,2008-3-1

102,jack,2008-3-2

103,rose,2008-3-3

104,smith,2008-3-4

105,john,2008-3-5

106,zhang,2008-3-6

107,li,2008-3-7

importjava.sql.*;

importjava.io.*;

publicclass Test10{

ﻩpublic staticvoidmain(String[] args)throwsException{

ﻩConnectionconn=null;

ﻩStatementstmt=null;

ﻩResultSetrs =null;

ﻩDriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

String url="jdbc:

oracle:

thin:

@localhost:

1521:

dhc";

ﻩﻩString user="scott";

Stringpwd="tiger";

conn=DriverManager.getConnection(url, user,pwd);

ﻩﻩstmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

ﻩResultSet.CONCUR_UPDATABLE);

fr =new("e:

\\Student.txt");

ﻩﻩBufferedReaderbr=newBufferedReader(fr);

String s = br.readLine();

ﻩwhile (s!

=null){

ﻩﻩﻩString[]rows=s.split(",");

ﻩstmt.executeUpdate("insertintoStudentvalues("+rows[0]+",'"

ﻩﻩ+rows[1]+"',to_date('"+rows[2] + "','yyyy-mm-dd'))");

s=br.readLine();

ﻩ}

ﻩﻩ

ﻩﻩbr.close();

ﻩﻩstmt.close();

ﻩconn.close();

ﻩ}

}

讲解可滚动的结果集游标指针

Connection对象创建Statement对象有两种形式:

●一种是用createStatement()无参方法,这种方法创建的Statement对象执行的查询的结果集指针只能向下移动

●另一种方法是用createStatement(int resultSetType,intresultSetConcurrency)有参方法,这种方法创建的Statement对象执行的查询结果集的指针是可以任意移动的

后一种方法有两个参数:

分别是结果集游标类型和结果集是否可更新

结果集游标类型有三个设置值:

1.ResultSet.TYPE_FORWARD_ONLY指针只能向下移动(默认)

2.ResultSet.TYPE_SCROLL_INSENSITIVE 指针可任意滚动,但结果集中被更新的行不可视

3.ResultSet.TYPE_SCROLL_SENSITIVE指针可任意滚动,结果集中被更新的行可视

结果集是否可更新有两个设置值:

1.ResultSet.CONCUR_READ_ONLY只读(默认)

2.ResultSet.CONCUR_UPDATABLE可更新记录

关于指针移动的方法:

默认打开结果集的时候指针位于第一行记录的上面

next()下一行

previous()上一行

first() 第一行

last()最后一行

absolute(n) 定位到第n条

relative(n)相对于当前指针位置定位到第n条,n为正数下移,n为负数上移

beforeFirst()第一条的前面

afterLast()最后一条的后面

getRow() 获得当前行的行号

学生练习:

查询出工资排名在第6位到第10位的员工编号,姓名和工资

……

stmt =conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

ﻩﻩResultSet.CONCUR_READ_ONLY);

rs=stmt.executeQuery("select*from employeesorder bysalarydesc");

if (rs.absolute(6)) {

ﻩfor(inti =6;i<=10;i++){

ﻩﻩSystem.out.println(i+ ":

\t" +rs.getInt

(1) +"/

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2