java-jdbc-db2

0、得到结果集的一种方式

/*查询得到结果集的另一种方式*/
Statement stmt = con.createStatement();    
String sql="select value from restart";    
ResultSet rs = stmt.executeQuery(sql);        


一、初始化连接数据库 

1.装载一个类并且实例化

Class.forName("java:jdbc:db2");

2.

3.,conn.setAutoCommit(boolean b)方法,传入一个false,这样将不会自动提交,需要使用conn.commit()方法,手动提交事务。

二、更新操作

.executeQuery方法,返回更新的行数

三、sql错误码的获取

catch(SQLException x){
int SQLCode = x.getErrorCode();//每个产品内部的错误编码集
String SQLState = x.getSQLState();//国际标准错误编码集
String msg = x.getMessage();
}

四、删除语句

PreparedStatement pstmt = null;
String mysql=null;
String eno="000110";
mysql="DELETE FROM TEMPL WHERE EMPNO = ?";
pstmt = con.prepareStatement(mysql);
pstmt.setString(1,eno);
deleteCount = pstmt.executeUpdate();

把删除操作展现给用户,经确认再删除

讨论:主变量(host variables)

db2自动转换数据类型 D后是数据库sample 表jlu.employee

db2dclgn -D sample -T jlu.employee -L Java

五、关于空值

rs.getInt(1)//游标先指到这里

rs.waNull()//再进行是否为空值的判断

pstmt.setNull(1,java.sql.Type.SMALLINT);//传入空值

PreparedStatement stmt = null;

sql="UPDATE TEMPL SET PHONENO = ? "+" WHERE EMPNO = '000110' "

六、异常处理

// 违反约束 不可以为空
//类型不匹配
//溢出 数值型
//如何判断一条语句是否成功
//SQLCA 任何数据库 任何主语言都可以用 加头文件

七、游标

ResultSet prs1=null,prs2=null;
String sql;
PreparedStatement pstmt1 = con.prepareStatement(sql,prs1.TYPE_FORWARD_ONLY,prs1.CONCUR_READ_ONLY);//
//第二个参数:游标的方向
//第三个:并发,只读的时候才可以并发
//jdbc2.0 支持并发的写操作  但是db2不支持
/*可滚动的游标*/
PreparedStatement pstmt2 = 
con.prepareStatement(sql,prs2.TYPE_SCROLL_INSENSITIVE,prs2.CONCUR_READ_ONLY);
/*...执行语句,获得结果集*/
/*从后往前读的游标*/
prs.afterLast();            //结果集最后一行的最后面
while(prs2.previous()){}    //往前看结果集
/*指向特定的行*/
prs.absolute(3)             //指向结果集第三行
相对 读下一行
relative(+1)读下一行
relative(-1)读上一行

物化结果集

专门为排序定义临时的表空间

先查再修改

String myselect ="select lastname, firstname from emp"+" for update" 

String myupdate = "update emp set firstname = ? where current of "//后面跟指向查询结果的游标名字
ResultSet rs = stmt.executeQuery(myselect);
String cursorName = rs.getCursorName();
PreparedStatement ps =con.prepareStatement(myupdate+cursorName);

关闭结果集游标,即调用rs.close(),不会释放锁

但是提交事务.commit()会释放锁

八、结果集的重定位,部分提交

目的:防止被一两个错误打断海量修改操作

以update为例

采用stmt.executeUpdate("COMMIT")更新所有操作

九、结果集元数据接口(ResultSetMetaData)

数据库元信息

Connection sample = DriverManager.getConnection("jdbc:db2:sample");

DatabaseMetaData dbmd = sample.getMetaData();

ResultSet rs = dbmd.getSchemas();

while(rs.next()){

String s = rs.getString(1);

System.out.println("\nSchema Name:" +s);

}

结果集元信息

ResultSet rs = stmt.executeQuery("select * from udba.staff");
ResultSetMetaData rsmd = rs.getMetaData();
int Colomn_Number = rsmd.getColumnCount();
Sysem.out.println("\nNumber of colomns in result set = "+ Colomn_Number);

十、批处理

addbatch()                        //临时空间保存完整的sql语句

,stmt.executeBatch()        //比一次一提交效率高

十一、大对象

数据以大对象的形式存放在表中(Blob二进制大对象)音频

与常规列变量的访问不同jdbc有clob和blob

Clob字符型大对象

每个数据库产品都有vatchar,最大宽度255char。

oracle 4G   db2 2G

软件系统综合实践  必须用大对象的操作

doubleByte dbclob双字节的汉字、韩文

十二、clob对象的读取

 posstr (,)personal在resume列中第一次出现的位置

 连接两个字符串

substr 有三个参数时:第二个参数表明读取的开始位置,第三个是结束

有两个参数时:第二个参数表明读取开始位置,读到结尾。

十三、BLOB对象的读取

File file = new FIle("C:/a.jpg);        //定义要写入的文件

java.io.BufferedInputStream imageInput = 

new java.io.BufferedInputStream(new java.io.FileInputStream(file));        //定义文件的写入流

preparedStatement.setBinaryStream(1,imageInput,(int)file.length());        //使用函数写入

/*执行SQL语句*/

/*对BLOB的读取采取步骤*/

Blob blob = (Blob)rs.getBlob(1);

java.io.InputStream inputStream = blob.getBinaryStream();        //把Blob对象转化为流

File fileOutput = newFile("c:/backa.jpg");                                       //定义要写入的文件

FileOutputStream fo = new fileOUtputStream(fileOutput);

/*写入文件*/

int c;

while((c=inputStream.read())!=-1){fp.write(c);}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值