JDBC-PPTPPT文件格式下载.ppt
《JDBC-PPTPPT文件格式下载.ppt》由会员分享,可在线阅读,更多相关《JDBC-PPTPPT文件格式下载.ppt(38页珍藏版)》请在冰豆网上搜索。
![JDBC-PPTPPT文件格式下载.ppt](https://file1.bdocx.com/fileroot1/2022-10/4/a190af72-b3a2-47c6-b322-a6d9c29817b1/a190af72-b3a2-47c6-b322-a6d9c29817b11.gif)
本地API;
JDBC网络纯Java驱动程序;
本地协议纯Java驱动程序。
建立连接(Connection),Connectionconn=DriverManager.getConnection(url,user,password);
url格式:
JDBC:
子协议:
子名称/主机名:
端口/数据库名?
属性名=属性值,创建执行SQL的语句(Statement),StatementStatementst=conn.createStatement();
st.executeQuery(sql);
PreparedStatementStringsql=“select*fromtable_namewherecol_name=?
”;
PreparedStatementps=conn.preparedStatement(sql);
ps.setString(1,“col_value”);
ps.executeQuery();
处理执行结果(ResultSet),ResultSetrs=statement.executeQuery(sql);
While(rs.next()rs.getString(“col_name”);
rs.getInt(“col_name”);
/,释放资源,释放ResultSet,Statement,Connection.数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。
Connection的使用原则是尽量晚创建,尽量早的释放。
基本的CRUD(创建、读取、更新、删除),模板代码Connectionconn=null;
Statementst=null;
ResultSetrs=null;
try/获得Connection/创建Statement/处理查询结果ResultSetfinally/释放资源ResultSet,Statement,Connection,创建,增加对应SQL的INSERT,返回增加成功的行(记录)数conn=getConnection();
Statementst=conn.createStatement();
Stringsql=“insertintouser(name,age,regist_date)”+“values(name,10,now()”;
inti=st.executeUpdate(sql);
/i为插入的记录数,读取,读取(查询)对应SQL的SELECT,返回查询结果conn=getConnection();
st=conn.createStatement();
Stringsql=selectid,name,age,regist_datefromuser;
rs=st.executeQuery(sql);
while(rs.next()System.out.print(rs.getInt(id)+tt);
System.out.print(rs.getString(name)+tt);
System.out.print(rs.getInt(age)+tt);
System.out.print(rs.getTimestamp(regist_date)+tt);
System.out.println();
更新,更新(修改)对应SQL的UPDATE,返回被修改的行(记录)数conn=getConnection();
Stringsql=“updatepersonsetname=newname”;
/i为符合条件的记录数,删除,删除对应SQL的DELETE,返回被删除的行(记录)数conn=getConnection();
Stringsql=“deletefromuserwhereid=1”;
/i为删掉的记录数,CRUD总结,增、删、改用Statement.executeUpdate来完成,返回整数(匹配的记录数),这类操作相对简单。
查询用Statement.executeQuery来完成,返回的是ResultSet对象,ResultSet中包含了查询的结果;
查询相对与增、删、改要复杂一些,因为有查询结果要处理。
SQL注入,PreparedStatement和Statement,在SQL中包含特殊字符或SQL的关键字(如:
or1or)时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用PreparedStatement来解决。
PreperedStatement(从Statement扩展而来)相对Statement的优点:
1.没有SQL注入的问题。
2.Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。
3.数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。
数据类型,详细信息见java.sql.Types几种特殊且比较常用的类型1.DATA,TIME,TIMESTAMPdate,time,datetime存:
ps.setDate(i,d);
ps.setTime(i,t);
ps.setTimestamp(i,ts);
取:
rs.getDate(i);
rs.getTime(i);
rs.getTimestamp(i);
2.CLOBtext存:
ps.setCharacterStream(index,reader,length);
ps.setString(i,s);
reader=rs.getCharacterStream(i);
reader=rs.getClob(i).getCharacterStream();
string=rs.getString(i);
3.BLOBblob存:
ps.setBinaryStream(i,inputStream,length);
rs.getBinaryStream(i);
rs.getBlob(i).getBinaryStream();
一个简单用户相关的数据访问层,J2EE三层架构简介表示层、业务逻辑层、数据访问层,三层之间用接口隔离。
定义domain对象User,定义存取用户的接口用JDBC实现接口用配置文件(properties)和反射实现与具体类的耦合,事务(ACID),原子性(atomicity):
组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。
一致性(consistency):
在事务处理执行前后,数据库是一致的(数据库数据完整性约束)。
隔离性(isolcation):
一个事务处理对另一个事务处理的影响。
持续性(durability):
事务处理的效果能够被永久保存下来。
connection.setAutoCommit(false);
/打开事务。
mit();
/提交事务。
connection.rollback();
/回滚事务。
事务(SavePoint),当只想撤销事务中的部分操作时可使用SavePointSavePointsp=connection.setSavepoint();
connection.rollerbak(sp);
事务(JTA),跨越多个数据源的事务,使用JTA容器实现事务。
分成两阶段提交。
javax.transaction.UserTransactiontx=(UserTransaction)ctx.lookup(“jndiName);
tx.begin();
/connection1connection2(可能来自不同的数据库)mit();
/tx.rollback();
隔离级别多线程并发读取数据时的正确性,connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
V:
可能出现,X:
不会出现,存储过程,存储过程CallableStatement(从PreperedStatement扩展来)cs=connection.prepareCall(“callpsname(?
?
)”);
cs.registerOutParameter(index,Types.INTEGER);
cs.setXXX(i,xxxx);
cs.executeUpdate();
intid=cs.getInt(index);
其他的几个API,PreparedStatement.getGeneratedKeys()PreparedStatementps=connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
ps.executeUpdate();
ResultSetrs=st.getGeneratedKeys();
rs.getInt
(1);
批处理,可以大幅度提升大量增、删、改的速度。
PreparedStatement.addBatch();
PreparedStatement.executeBatch();
其他的几个API,可滚动的结果集Statementst=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSetrs=st.executeQuery(sql);
rs.beforeFirst();
rs.afterLast();
rs.first();
rs.isFirst();
rs.last();
rs.isLast();
rs.absolute(9);
rs.moveToInsertRow();
可更新的结果集conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs.updateString(colname,newvalue);
rs.updateRow();
DatabaseMetaData和ParameterMetaData,DatabaseMetaDatameta=connection.getMetaData();
通过DatabaseMetaData可以获得数据库相关的信息如:
数据库版本、数据库名、数据库厂商信息、