JDBC编程.docx
- 文档编号:10173641
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:11
- 大小:1.30MB
JDBC编程.docx
《JDBC编程.docx》由会员分享,可在线阅读,更多相关《JDBC编程.docx(11页珍藏版)》请在冰豆网上搜索。
JDBC编程
JDBC编程
JDBC工作原理
数据库URL
格式:
jdbc:
<子协议名>:
<子名称>
"jdbc"为协议名,确定不变;
<子协议名>制定目标数据库的种类和具体连接方式;
<子名称>制定具体的数据库/数据源连接信息(如数据库服务器的IP地址,通信端口号,ODBC数据源名称(数据库名称),用户名,密码)
如:
jdbc:
oracle:
thin;@166.111.78.98:
1521:
ora9
jdbc:
microsoft:
sqlserver:
//localhost:
1433;databasename=pubs
JDBC编程基本步骤
1,加载驱动程序(向系统注册的JDBC驱动程序名称);
Class.forName("数据库驱动程序名称");
2,建立到指定数据库的连接,创建语句查询对象;
Connectionconn=null;
conn=DriverManager.getConnection(URL,usename,password);
Statementst=conn.createStatement();
注:
如果url没有指定具体连接的数据库,则连接给定的用户名默认拥有的数据库(SQLSERVER数据库这样定义)
3,提交(执行)数据库查询,获取查询结果。
ResultSetrs=st.executeQuery(SQL语句);
加载驱动程序的三种方式
Class.forName();
加载多个驱动时用多个Class.forName();
System.setProperty();
加载多个驱动时用冒号隔开("驱动1":
"驱动2");
new驱动程序名称();
如:
neworacle.jdbc.driver.OracleDriver();
各数据库JDBC驱动名称
SQLSERVER:
com.microsoft.jdbc.sqlserver.SQLServerDriver;
Url=jdbc:
microsoft:
sqlserver:
//localhost:
1433;
ORACLE:
oracle.jdbc.driver.OracleDriver;
Url=jdbc:
oracle:
thin:
@127.0.0.1:
1521:
sky;
MySQL:
com.mysql.jdbc.Driver;
Url=jdbc:
mysql:
//localhost:
3306/test?
user=root&password=123456&useUnicode=true&characterEncoding=UTF-8;
ResultSet常用getxxx方法
SQL数据库字段对应的java数据类型
SQL语句的分类
SQL(StructuredQueryLanguage)结构化查询语言
如:
select(查询)主要用来查询表中的数据。
DML(DataManipulationLanguage)数据操纵语言
如:
insert,delete,update(插入、删除、修改)主要用来修改更新表中的数据。
DDL(DataDefinitionLanguage)数据库定义语言
如:
create,drop,alter(创建,删除,修改)主要用来操作数据库中的表和视图。
预处理语句
java.sql.PreparedStatement接口提供了执行预编译SQL语句的功能,他继承了java.sql.Statement接口。
Connection对象的prepareStatement(Stringsql)方法可以创建并返回PreparedStatement类型的对象
PreparedStatement接口的主要方法:
voidsetXXX(intparameterIndex,XXXx)
设定SQL语句中不确定的参数,parameterIndex是数据表中字段的下标(从1开始),XXX表示具体的数据类型x表示该数据类型的值。
ResultSetexecuteQuery()——查询获取结果集
intexecuteUpdate()——返回更新受影响的行数
示例:
Connectionconn=null;
Stringsql="insertintodeptvalues(?
?
?
)";
PreParedStatementps=conn.prepareStatement();
ps.setInt(1,1002);
ps.setString(2,usename);
ps.setString(3,password);
ps.executeUpdate();
存储过程
介绍:
存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,sql语句执行的时候要先编译后存储在数据库中。
用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。
这种已经编译好的过程可极大地改善SQL语句的性能。
由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。
存储过程大大增强了SQL语言的功能和灵活性。
存储过程可以用流控制语句编写,有很强的灵活性,长用来完成复杂的判断和较复杂的运算。
java.sql.CallableStatement接口提供了调用数据库服务器端存储过程(Procedure)的功能,他继承了java.sql.preparedStatement接口。
Connection对象的prerareCall(Stringsql)方法可以创建并返回CallaleStatement对象
Connectionconn=null;
CallableStatementcst=conn.prepareCall(sql);
CallableStatement接口主要方法:
voidsetXXX(intparameterIndex,XXXx);
booleanexecute();
示例(创建表和存储过程):
createtableperson(innumberprimary,namechar(10),agenumber);
CreateorreplaceprocedureMyprocedure(pidinnumber,nameinchar,ageinchar)
as
begin
insertintopersonvalues(pid,name,age)
end;
Java程序中执行的代码段:
cst=con.prepareCall("{callMyprocedure(?
?
?
)}")
cst.setInt(1,1001);
cst.setString(2,"jay");
cst.setInt(3,30);
cst.execute();
cst.close();
事务处理
事务是现代数据库理论中的核心概念之一。
如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。
当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。
由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚(回到最初的系统状态)。
事务必须服从ISO/IEC所制定的ACID原则。
ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。
事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。
JDBC事务是用Connection对象控制的。
JDBCConnection接口(java.sql.Connection)提供了两种事务模式:
自动提交和手工提交。
java.sql.Connection提供了以下控制事务的方法:
publicvoidsetAutoCommit(boolean)——将此连接的自动提交模式设置为给定状态(flase为手动提交,true为自动提交,默认为自动提交)
publicbooleangetAutoCommit()——获取此Connection对象的当前自动提交模式。
publicvoidcommit()——使所有上一次提交/回滚后进行的更改成为持久更改(提交当前事务)
publicvoidrollback()——取消在当前事务中进行的所有更改
注:
commit()和rollback()方法在非自动提交的状态下才可调用。
示例代码:
publicintdelete(intsID){
dbc=newDataBaseConnection();
Connectioncon=dbc.getConnection();
try{
con.setAutoCommit(false);//更改JDBC事务的默认提交方式
dbc.executeUpdate("deletefrombylawwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
mit();//提交JDBC事务
con.setAutoCommit(true);//恢复事务默认提交方式(自动提交)
dbc.close();
return1;
}
catch(Exceptionexc){
con.rollBack();//回滚JDBC事务
exc.printStackTrace();
dbc.close();
return-1;
}
}
事务处理之部分回滚——Savepoint
JDBC3.0开始支持在事务中设置保存点(Savepoint),以实现对数据库的进一步控制,即支持部分回滚功能.(使用Savepoint需先将提交模式设置为false—手动提交)
java.sql.Savepoint接口表示数据库事务的保存点,在Connection对象的rollback()方法中可以对当前事务的保存点进行引用,从而将事务回滚到该保存点。
Connection对象的setSavepoint()方法可以创建并返回Savepoint对象
Savepointsp=conn.setSavepoint();//设置保存点
Savepointsp=conn.setSavepoint("sp1");//设置带保存点名称的保存点。
intgetSavepointId()——获取此Savepoint对象表示的保存点的生成ID。
StringgetSavepointName()——获取此Savepoint对象表示的保存点的名称。
示例:
Stringstr=sp.getSavepointName();str="sp1";//获取保存点sp的名称
conn.rollback(sp);//取消所有设置给定Savepoint对象之后进行的更改(回滚到保存点sp)
代码示例:
conn.setAutoCommit(false);//设置自动提交为false
Statementst=conn.createStatement();
st.executeUpdate("insetintoteachervalues(11,'tom','2500')");
st.extcuteUpdate("insertintoteachervalues(12,'john','3400')");
Savepointsp1=conn.setSavepoint("p1");//设置保存点sp1
st.executeUpdate("insertintoteachervalues(13,'billy','3500')");
Savepointsp2=conn.setSavepoint("p2");//设置保存点sp2
st.executeUpdate("updateintosetsalary=salary+8000wheretid=12");
ResultSetrs=st.executeQuery("selectavg(salary)fromteacher");
rs.next();//遍历第一行
doubleavg_salary=rs.getDouble
(1);//取出第一个字段的值
if(avg_salary>4000){
conn.rollback(sp1);//平均工资大于4000回滚到sp1保存点
}elseif(avg_salary>=3000){
conn.rollback(sp2);//平均工资大于3000回滚到sp2保存点
}
mit();//提交所有更新操作
批处理
JDBC2.0开始提供了对数据库操作的批处理(batchProcessing)功能。
使用批处理可以避免向数据库进行一连串的调用,从而显著提高程序运行的效率。
Statement接口提供的批处理相关方法:
voidaddbatch(Stringsql)——将给定的SQL命令添加到此Statement对象的当前命令列表中
int[]executeBatch()——将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
voidclearBatch()——清空此Statement对象的当前SQL命令列表。
代码示例:
try{
conn.setAutoCommit(false);
st.addBatch("insertintodeptvalues(11,'tom','2500')");
st.addBatch("updatedeptsetsalary=salary+800");
st.executeBatch();//执行批处理语句,若发成异常则捕捉并调用rollback()方法。
mit();//若没有发生异常则提交
}catch(Exceptione){
System.out.printnl("failed,rollback!
");
try{conn.rollback();
}catch(Exceptione1){e.printStackTrace();//捕捉回滚可能发生的异常}}
高级SQL类型
BLOB(BinarylargeObject二进制大对象)类型用于保存大规模二进制数据,BLOB常常是数据库中用来存储二进制文件的字段类型。
(如图片,音乐。
)
CLOB(CharacterlargeObject文本大对象)类型用于保存大规模文本数据(如:
文章)
JDBC2.0开始引入对应SQL99标准的多种高级数据类型,其中最重要的就是BLOB和CLOB
重要方法:
InputStreamgetBinaryStream(intcolumnIndex)throwsSQLException
以未解释字节的流的形式获取此ResultSet对象的当前行中指定列的值。
然后,可以按块从流中读取值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JDBC 编程