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()); //使用函数写入
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);}



