结果可以回滚
结果集可以更新,影响数据库的更新
批处理
Statement stm=conn.createStatement();
stm2=conn.createStatement(int value1,int value2);
value1:是否可滚动
ResultSet.TYPE_SCROLL_INSENCITIVE
value2:是否可更新
ResultSet.CONCUR_UPDABLE
rs=stm2.executeQuery();
pstm=conn.prepareStatement(sql,int,int);
数据库表数据的分页
1.db--sql
子查询和Rownum
2.jdbc---->可滚动的结果集
String sql="select * from s_emp order by start_date";
rs=stm.execute(sql);
int num=1;
rs.absolute(5);
while(rs.next()){
if(num>5) return;
.........
}
int[] a=stm.executeBatch();
stm批处理里缓存的是sql命令
pstm批处理里缓存的是数据
Object----->db
class(entity)-------table
object(persist object)--------row
field------column(oid-----pk)
relation---------> pk fk
class Student{
private Integer oid;
String name;
int age;
String sex;
public Student(String name,int age,String sex){
}
}
Student s1=new Student("zhangsan",18,"male");
Student s2=new Student("lisi",19,"male");
Student s3=new Student("zhangsan",20,"male");
----------------------------------------------------
one-to-one( Car ---- License )
1.java
class Car{
//oid
private Integer cid;
// 业务属性
private String manufactory;
private String productType;
//关系属性
private License license;
// get 和 set
// 有参和无参的构造方法
public void addLicense(License license){
this.license=license;
license.addCar(this);
}
public void removeLicense(){
this.license.removeCar();
this.license=null;
}
}
class License{
private Integer lid;
private String serialNum;
private String LicenseType;
private Car car;
// get 和 set
// 有参和无参的构造方法
public void addCar(Car car){
this.car=car;
}
public void removeCar(){
this.car=null;
}
}
2. db
create table jdbc_car
( cid number(7) primary key,
manufactory varchar2(15) not null,
producttype varchar2(15) not null,
);
create table jdbc_license
( lid number(7) primary key,
serialnum varchar2(15) not null,
licensetype varchar2(15) not null,
car_id number(7) references jdbc_car(cid) unique
);
3. dao( CarDao--->jdbc_car , LicenseDao--->jdbc_license)
class CarDao{
public void insertCar(Car c) throws Exception{
1.insert into cartable
2.c.setCid(?);
3.insert into license
4.l.setLid(?);
}
public void deleteCar1(Car c) throws Exception{
1.delete from license
2.delete from car
3.c.setOid(null);
4.license.setLid(null);
5.c.removeLicense(l);
}
public void deleteCar(Car c) throws Exception{
1.update license set car_id=null
2.delete from car
3.c.setOid(null);
4.license.setLid(null);
5.c.removeLicense(l);
}
public void updateCar(Car c) throws Exception{
1. update car table;
2. update license table set car_id=null;
3?
}
public Car queryByCid(Integer cid) throws Exception{
db-->1.select car table
2.select license table
内存--> 3. car.addLicense(license);
4.return car;
}
}
main(){
Car c=queryByCarid(222);
c.addLicense(license);
dao.update(c);
}
1. 维护数据库
2. 维护内存中的oid
3. 维护关系
TestBatch.Java
import java.sql.*;
public class TestBatch {
public static void main(String[] args) {
Connection conn=null;
Statement stm=null;
try{
conn=JdbcUtil.getConnection();
conn.setAutoCommit(false);
stm=conn.createStatement();
String sql="insert
into jdbc_account(id,name,passwd,cardid,balance,personId)" +" values(jdbc_account_seq.nextval,'liucy','000','000',10,'0000')";
stm.addBatch(sql);
sql="update jdbc_account set balance=100000 where name='luxw'";
stm.addBatch(sql);
sql="delete from jdbc_account where id=110 or id=104";
stm.addBatch(sql);
int[] a=stm.executeBatch();
for(int i:a){
System.out.println(i);
}
conn.commit();
}catch(Exception e){
e.printStackTrace();
if(conn!=null) try{ conn.rollback();
} catch(Exception ee){}
}finally{
JdbcUtil.release(null, stm, conn);
}
}
}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class TestBlob {
public static void insertBlob(String filename){
Connection conn=null;
Statement stm=null;
ResultSet rs=null;
try{
conn=JdbcUtil.getConnection();
conn.setAutoCommit(false);
stm=conn.createStatement();
/*
* empty_blob()是Oracle提供的单行函数,作用向表里的
* blob列插入一个空的blob字段,blob字段的值随后用IO
* 流向数据库里写入
*/
String sql="insert into largetable(id,name,largefile)"
+" values(3,'file3',empty_blob())";
stm.executeUpdate(sql);
sql="select largefile from largetable where id=3";
rs=stm.executeQuery(sql);
if(rs.next()){
Blob blo=rs.getBlob(1);
System.out.println(blo.getClass().getName());
oracle.sql.BLOB bo=(oracle.sql.BLOB)blo;
OutputStream os=bo.getBinaryOutputStream();
InputStream is=new FileInputStream(filename);
byte[] b=new byte[1024];
int len=0,num=0;
while(true){
len=is.read(b);
if(len<=0) break;
os.write(b,0,len);
if(++num%10==0){
System.out.println("10 k ok");
}
}
is.close();
os.close();
}
conn.commit();
}catch(Exception e){
if(conn!=null) try{ conn.rollback();} catch(Exception ee){}
}finally{
JdbcUtil.release(null,stm,conn);
}
}
public static void queryBlob(String name){
Connection conn=null;
Statement stm=null;
ResultSet rs=null;
try{
conn=JdbcUtil.getConnection();
conn.setAutoCommit(false);
stm=conn.createStatement();
String sql="select largefile from largetable where name='"+name+"'";
System.out.println(sql);
rs=stm.executeQuery(sql);
if(rs.next()){
Blob blo=rs.getBlob(1);
System.out.println(blo);
InputStream is=blo.getBinaryStream();
OutputStream os=new FileOutputStream("copy.rar");
byte[] b=new byte[1024];
int len=0,num=0;
while(true){
len=is.read(b);
if(len<=0) break;
os.write(b,0,len);
if(++num%100==0){
System.out.println("1m ok");
}
}
is.close();
os.close();
}
conn.commit();
}catch(Exception e){
if(conn!=null) try{ conn.rollback();} catch(Exception ee){}
}finally{
JdbcUtil.release(null,stm,conn);
}
}
public static void main(String[] args) {
queryBlob("file3");
}
}
分享到:
相关推荐
JavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源...
**JDBC2详解** JDBC(Java Database Connectivity)是Java编程语言中用于访问数据库的标准Java API,它由一组接口和类组成,使得Java开发者能够连接并操作各种类型的数据库系统。JDBC2作为JDBC的第二个主要版本,在...
postgresql-8.1-415.jdbc2ee.jar jdbc驱动
2. **Common.jar**:这个文件包含了DB2 JDBC驱动所需的通用类和库,是驱动程序正常运行的基础。 3. **db2qgjava.jar**:此文件可能包含了DB2 Query Governor的Java实现,Query Governor是一种性能管理工具,可以...
jdbc2_0-stdext.jar jdbc2_0-stdext.jar
as400-jdbc2-service,不错的东西 !
`msbase.jar`和`mssqlserver.jar`是早期版本的SQL Server JDBC驱动组件,而`jdbc2_0-stdext.jar`可能包含JDBC 2.0标准扩展的类库,用于支持更多的功能和特性。这些驱动允许Java应用程序连接到Microsoft SQL Server...
db2-jdbc2-service.xml,不错的东西!
IBM DB2 JDBC驱动是连接Java应用程序与IBM DB2数据库的关键组件。它遵循Java Database Connectivity (JDBC) API标准,使得Java开发者能够通过编写Java代码来执行SQL查询、更新数据库记录以及进行其他数据库操作。在...
sybase-jdbc2-service.xml
mssql-jdbc2-service.xml
- **驱动程序类名**:`com.sybase.jdbc2.jdbc.SybDriver` (或 `com.sybase.jdbc3.jdbc.SybDriver`) - **JDBC URL**:`jdbc:sybase:Tds:<host>:<port>?ServiceName=<database_name>` - 默认端口:2638 #### 八、...
- JDK 1.3结合J2EE(Java 2 Platform, Enterprise Edition)引入了JDBC 2 EE,这一版本增加了对`javax.sql`包的支持。 - `javax.sql`中的类主要用于实现更高级别的数据库连接池管理和事务管理等功能。 - 对于企业...
2. **加载驱动**:使用`Class.forName()`方法加载JDBC驱动。 3. **创建连接**:通过`DriverManager.getConnection()`方法建立与Sybase数据库的连接,需要提供数据库URL、用户名和密码。 4. **创建Statement或...
例如,使用jconn2.jar时,驱动类名通常是com.sybase.jdbc2.jdbc.SybDriver,而使用jtds-1.2.4.jar时,驱动类名则为net.sourceforge.jtds.jdbc.Driver。 在实际应用中,开发者需要在Java代码中加载对应的驱动,并...
若需切换不同版本,可通过执行相应目录下的`usejdbc2`或`usejdbc1`命令完成。 - **DB2版本8**:该版本进一步扩展了支持的JDBC驱动程序类型,引入了第二类、第三类和第四类驱动程序。其中,第四类驱动程序被称为...
压缩包中的`jdbc2.ppt`、`Jdbc3.ppt`和`Jdbc.ppt`是针对不同版本的JDBC进行详细讲解的PPT,涵盖了JDBC的基础概念、核心API的使用以及高级特性,对于理解和掌握JDBC有着极大的帮助。通过这些PPT,你可以系统地学习...
在Java应用程序中,我们可以通过Java Database Connectivity (JDBC) API来与GBase数据库进行交互。本篇将详细介绍如何使用JDBC连接GBase数据库以及GBase 8.3驱动包的相关知识。 首先,了解JDBC是Java语言访问数据库...
常用JDBC连接数据库方法总结如下: 一、DB2 Class.forName("Com.ibm.db2.jdbc.net.DB2Driver") String url="jdbc:db2://dburl:port/DBname" cn = DriverM