课堂笔记--JDBC
2011-09-14 23:47
197 查看
JDBC的使用
创建一个以JDBC连接数据库的程序,包括如下7五个步骤:
第一步:载入驱动
Class.formName("com.mysql.jdbc.Driver");//载入驱动,参数驱动程序的完整路径 ClassNotFoundExcrption
等价:(载入驱动)
Driver d=new Driver();
DriverManager.registerDriver(d);
第二步:提供JDBC连接的URL
父协议:自协议://数据库服务地址:端口/数据库名字
String url="jdbc:mysql://localhost:3306/test";
String username="root";
String password="1234";
或urll ="jdbc:mysql://localhost:3306/test?user=root&password=1234”
第三步:建立连接
Connection con;
con=DriverManager.getConnection(url,username,password);
或con=DriverManager.getConnection(urll);
第四步:需要生成一个语句对象(Statement对象),负责向mysql提交sql语句
Statement stat=con.createStatement();
第五步:通过语句对象提交sql语句
stat.excuteQuery("sql的查询语句select")
stat.excuteUpdate("sql的更新语句insert/update/delete")
n如果是非0,那就说明更新成功如果n是0,更新操作是失败
stat.excute("sql的create语句或drop语句等")
delete from xs where 学号="081102";
第六步:处理结果---执行结果可能会出现两种情况
执行更新返回的是本次操作影响到的记录数
执行查询返回的结果是一个ResultSet对象,该对象以0或多条记录的形式包含了查询结果,可以通过隐含的游标(指针)来定位数据,初始化时,游标位于第一条记录前,可以通过next()方法移动到下一条记录。
ResultSet rs=stat.executeQuery(“select …”);
rs.next();//移动游标到第一条记录,如果没有到最后一条记录的后面,方法返回true,否则返回false。
while(rs.next()){
//读取游标所指的记录行数据
System.out.println(“学号:”+rs.getInt(1));
System.out.println(“学号:”+rs.getInt(“id”));
}
ResultSet对象rs中有getXXX()方法,可从当前记录行中获取指定列的信息,可通过指定列索引号或列明两种方式指定要读取的列。
第七步:闭JDBC对象
在操作完成以后要把所使用的JDBC对象全部关闭,以释放JDBC资源,关闭的顺序和声明顺序相反。
…
finally{
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}…
}
PreparedStatement与 Statement的区别
1: PreparedStatement是预先编译的语句,而Statement则不是预先编译的,在DBMS中处理管理中Statement是要进行语法、语义的,而PreparedStatement则不要。
2: PrepareStatement中执行的SQL语句中是可以带参数的,而Statement则不可以。
比如:
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00);
pstmt.setInt(2, 110592);
pstmt. executeUpdate();
3: 当处理批量SQL语句时,这个时候就可以体现PrepareStatement的优势,由于采用Cache机制,则预先编译的语句,就会放在Cache中,下次执行相同SQL语句时,则可以直接从Cache中取出来。
PreparedStatement相对于Statement’而言:安全是一个优势,另一方面是性能。PrepareStatement在重复执行类似的SQL时,速度会快一些,比如不用做SQL解析和重做查询计划等工作。
JDBC中大文本及图片的读取:
Txt文件的读取:
首先准备一个文本文件,里面的内容可以自行设置,文本文件命名为“text.txt”;再准备一张图片,命名为“bzc.bmp”。将文本文件与图片放置于src目录之下。新建MyBlobTest.java,添加代码:
pstat=con.prepareStatement("insert into stuinfo(name,content,image) values(?,?,?)");
BufferedReader br=null;
InputStream isimg=null;
pstat.setString(1,“test”);//第一个?对应的参数值
br=new BufferedReader(new FileReader(“src/text.txt"));
pstat.setCharacterStream(2,br);
isimg=new FileInputStream("src/DSCF3318.JPG");
pstat.setBinaryStream(3, isimg);
if(pstat.executeUpdate()==1)
System.out.println("插入成功");
else
System.out.println("插入失败");
LOB的读取:
新建MyBlobTestSelect.java,添加代码。
pstat=con.prepareStatement("select * from stuinfo where name=?");
ResultSet rs=null;
pstat.setString(1,"test");
rs=pstat.executeQuery();
while(rs.next()){
br=new BufferedReader(rs.getCharacterStream(3));
String str=null;
while((str=br.readLine())!=null){
System.out.println(str);
str=br.readLine();
}
}
JDBC调用存储过程
存储过程调用代码
创建CallableStatement对象
CallableStatement cstat;
cstat=con.prepareCall("{call demoSp(?,?)}");
给存储过程中的参数输入参数值
cstat.setString(1,"HELLO");
cstat.setInt(2,199);
给输出参数指定JDBC类型
cstat.registerOutParameter(2,Types.INTEGER);
执行调用存储过程的语句
boolean hadResults=cstat.execute();
当execute()方法返回为真时,有结果集
读取结果集
while(hadResults){
ResultSet rs=cstat.getResultSet();
while(rs.next()){
System.out.println(rs.getString(1));
}
hadResults=cstat.getMoreResults();
}
读取输出参数的值
int outValue=cstat.getInt(2);
System.out.println(outValue);
相关文章推荐
- 课堂笔记--JDBC 事务控制和管理
- 9-15课堂笔记JDBC的事务控制和批量处理
- 创建JDBC的步骤 - JAVA课堂笔记整理
- c程序入门课堂笔记(局部变量和字符数组)
- 操作系统课堂笔记(3)用户接口和作业管理
- 【JavaEE学习笔记】JDBC_03_批处理,获取自增长键值,DBCP,C3P0,DBUtils
- 关于java 基础的课堂笔记
- 数据库开发技术 课堂笔记4
- 科锐课堂笔记:2017/4/12 单例模式与运算符重载
- MongoDB学习笔记番外篇:JDBC方式操作MongoDB示例
- maven之构建oracle的jdbc学习笔记_保存点_SQLXml_ojdbc6驱动连接简析
- JDBC 笔记2
- [课堂笔记]七.Java国际化
- Mysql Java驱动代码阅读笔记及JDBC规范笔记
- java 课堂笔记 第一章java概述
- java第七次课堂笔记
- PHP燕十八 课堂笔记------递归 无限极分类
- JAVA的面向对象编程--------课堂笔记
- CCNA课堂精简笔记(2)
- 3.22课堂笔记