




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JDBC代码手册整理者:Eric 2008-1-13版本号:V080113JDBC使用手册1JDBC详细介绍2JDBC类地图2插入数据3修改数据4删除数据5查询数据6查询统计函数8带参数的SQL查询9存储过程的调用11JDBC元数据12元数据Meta Data12数据库的元数据12结果集的元数据13JDBC事务15事务的基本知识15事务实例15滚动ResultSet更新数据16ResultSet中的Type取值16修改数据17删除数据18插入数据20SQL批处理22批处理22事务和批处理的区别23Blob与Clob字段的处理23把数据写入数据库23把数据从数据库读出来25数据库连接池(JNDI
2、)27第一步:为Tomcat 配置连接池27第二步:在应用中配置资源引用27第三步:在Servlet的init 方法中通过JNDI 接口来获取DataSource281 JDBC详细介绍1.1 JDBC类地图 DriverManager:通过驱动,建立与数据库间的连接。 Connection:代表着与数据库间的连接。 Statement:代表着要执行的SQL语句。 ResultSet:代表着数据库查询到的结果集。1.2 插入数据import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;p
3、ublic class Run_MySql /* * param args */public static void main(String args) Connection conn = null;Statement stmt = null;try / 动态导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManager.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "root"
4、;, "");/ 创造SQL语句String sql = "INSERT INTO user_list ( user_name, user_password ) VALUES ( 'Eric', '123' )"/ 执行SQL语句stmt = conn.createStatement();stmt.executeUpdate(sql);System.out.println( "OK!" ); catch (Exception e) e.printStackTrace(); finally / 关闭Sta
5、tementtry stmt.close(); catch (Exception e) / 关闭Connectiontry conn.close(); catch (Exception e) 1.3 修改数据import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class RunUpdate public static void main(String args) Connection conn = null;Statement stmt = null;try / 动态
6、导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManager.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "root", "");/ 创造SQL语句String sql = "UPDATE jdbc_teaching.user_list SET user_password = '456' WHERE user_name =
7、39;Eric'"/ 执行SQL语句stmt = conn.createStatement();stmt.executeUpdate(sql);System.out.println( "OK!" ); catch (Exception e) e.printStackTrace(); finally / 关闭Statementtry stmt.close(); catch (Exception e) / 关闭Connectiontry conn.close(); catch (Exception e) 1.4 删除数据import java.sql.Conn
8、ection;import java.sql.DriverManager;import java.sql.Statement;public class RunDelete public static void main(String args) Connection conn = null;Statement stmt = null;try / 动态导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManager.getConnection("jdbc:mysql:/local
9、host:3306/jdbc_teaching", "root", "");/ 创造SQL语句String sql = "DELETE FROM jdbc_teaching.user_list WHERE user_name = 'Eric'"/ 执行SQL语句stmt = conn.createStatement();stmt.executeUpdate(sql);System.out.println( "OK!" ); catch (Exception e) e.printStackT
10、race(); finally / 关闭Statementtry stmt.close(); catch (Exception e) / 关闭Connectiontry conn.close(); catch (Exception e) 1.5 查询数据import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class RunQuery public static void main(String args) Conne
11、ction conn = null;Statement stmt = null;ResultSet rs = null;try / 动态导入数据库的驱动(注册驱动)Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接(取得连接)conn = DriverManager.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "root", "");/ 创造SQL语句String sql = "SELEC
12、T * FROM user_list"/ 执行SQL语句(创建statement)stmt = conn.createStatement();/(执行查询)rs = stmt.executeQuery(sql);/处理查询while (true) / 移动到下一条数据boolean b = rs.next();/ 检查下一条数据是否存在if ( false = b ) / 如果下一条数据不存在,就不用再遍历了break;/ 取得用户名()String userName = rs.getString( "user_name" );/ 取得密码(字段的编号从1开始,密
13、码排第二位)String userPassword = rs.getString( 2 );System.out.println( userName + " : " + userPassword ); catch (Exception e) e.printStackTrace(); finally / 关闭ResultSettry rs.close(); catch (Exception e) / 关闭Statementtry stmt.close(); catch (Exception e) / 关闭Connectiontry conn.close(); catch (E
14、xception e) 1.6 查询统计函数import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class RunQueryCount public static void main(String args) Connection conn = null;Statement stmt = null;ResultSet rs = null;try / 动态导入数据库的驱动Class.forName("com.
15、mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManager.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "root", "");/ 创造SQL语句String sql = "SELECT COUNT(*) FROM user_list"/ 执行SQL语句stmt = conn.createStatement();rs = stmt.executeQuery(sql);/ 移动到下一条数据rs.n
16、ext();/ 取得结果int count = rs.getInt( 1 );int count2 = rs.getInt( "COUNT(*)" );System.out.println( count + " : " + count2 ); catch (Exception e) e.printStackTrace(); finally / 关闭ResultSettry rs.close(); catch (Exception e) / 关闭Statementtry stmt.close(); catch (Exception e) / 关闭Conne
17、ctiontry conn.close(); catch (Exception e) 1.7 带参数的SQL查询import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;public class RunQuery public static void main(String args) Connection conn = null;/ 注意stmt的类型PreparedStatement stmt = null;Resu
18、ltSet rs = null;try / 动态导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManager.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "root", "");/ 创造SQL语句String sql = "SELECT * FROM user_list WHERE user_name = '?'"/
19、创造SQL语句stmt = conn.prepareStatement(sql);/ 参数赋值(参数的顺序是从1开始的)stmt.setString( 1, "Eric" );/ 执行SQLrs = stmt.executeQuery(sql);while (true) / 移动到下一条数据boolean b = rs.next();/ 检查下一条数据是否存在if ( false = b ) / 如果下一条数据不存在,就不用再遍历了break;/ 取得用户名String userName = rs.getString( "user_name" );/ 取
20、得密码(字段的编号从1开始,密码排第二位)String userPassword = rs.getString( 2 );System.out.println( userName + " : " + userPassword ); catch (Exception e) e.printStackTrace(); finally / 关闭ResultSettry rs.close(); catch (Exception e) / 关闭Statementtry stmt.close(); catch (Exception e) / 关闭Connectiontry conn.cl
21、ose(); catch (Exception e) 1.8 存储过程的调用 MySql中的存储过程:CREATE DEFINER=rootlocalhost PROCEDURE test_procedure()BEGIN INSERT INTO jdbc_teaching.user_list ( user_name, user_password ) VALUES ( 'Janet', '678' );ENDimport java.sql.Connection;import java.sql.DriverManager;import java.sql.State
22、ment;public class CallProcedure /* * param args */public static void main(String args) Connection conn = null;Statement stmt = null;try / 动态导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManager.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "
23、;root", "");/ 创造调用存储过程的SQLString sql = "CALL test_procedure()"/ 执行调用存储过程的SQL语句stmt = conn.prepareCall(sql);stmt.execute(sql);System.out.println( "OK!" ); catch (Exception e) e.printStackTrace(); finally / 关闭Statementtry stmt.close(); catch (Exception e) / 关闭Connect
24、iontry conn.close(); catch (Exception e) 2 JDBC元数据2.1 元数据Meta Data 什么是元数据? 本身固有的特性。 元数据分类 数据库的元数据:如数据库的名称,版本等。 查询结果的元数据:查询结果集中字段数量,某字段的名称等。2.2 数据库的元数据import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.DriverManager;import java.sql.Statement;public class RunDatabaseMetaData /
25、* * param args */public static void main(String args) Connection conn = null;Statement stmt = null;try / 动态导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManager.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "root", "");/ 获取数据
26、库元数据DatabaseMetaData dmd = conn.getMetaData();String productName = dmd.getDatabaseProductName();String productVersion = dmd.getDatabaseProductVersion();String driverName = dmd.getDriverName();String driverVersion = dmd.getDriverVersion();System.out.println(productName + " - " + productVers
27、ion + " n"+ driverName + " - " + driverVersion); catch (Exception e) e.printStackTrace(); finally / 关闭Statementtry stmt.close(); catch (Exception e) / 关闭Connectiontry conn.close(); catch (Exception e) 2.3 结果集的元数据import java.sql.Connection;import java.sql.DriverManager;import java
28、.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.Statement;public class RunResultSetMetaData public static void main(String args) Connection conn = null;Statement stmt = null;ResultSet rs = null;try / 动态导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverMa
29、nager.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "root", "");/ 创造SQL语句String sql = "SELECT * FROM user_list"/ 执行SQL语句stmt = conn.createStatement();rs = stmt.executeQuery(sql);/ 获取结果集元数据ResultSetMetaData rsmd = rs.getMetaData();int columnCount =
30、rsmd.getColumnCount();String label = rsmd.getColumnLabel( 1 );System.out.println( columnCount + "n" + label ); catch (Exception e) e.printStackTrace(); finally / 关闭ResultSettry rs.close(); catch (Exception e) / 关闭Statementtry stmt.close(); catch (Exception e) / 关闭Connectiontry conn.close()
31、; catch (Exception e) 3 JDBC事务3.1 事务的基本知识 由银行转帐看事务的特性 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持续性(Durability)3.2 事务实例import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class RunInsert /* * param args */public static void main(String args) Connection conn
32、 = null;Statement stmt = null;try / 动态导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManager.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "root", "");/ 开启事务conn.setAutoCommit( false );/ 创造SQL语句String sql = "INSERT INTO u
33、ser_list ( user_name, user_password ) VALUES ( 'Eric', '123' )"/ 执行SQL语句stmt = conn.createStatement();stmt.executeUpdate(sql);/ 提交事务mit();System.out.println( "OK!" ); catch (Exception e) e.printStackTrace();/ 回滚事务try conn.rollback(); catch ( Exception e2 ) finally / 关闭
34、Statementtry stmt.close(); catch (Exception e) / 关闭Connectiontry conn.close(); catch (Exception e) 4 滚动ResultSet更新数据4.1 ResultSet中的Type取值TYPE_FORWARD_ONLY 不可滚动TYPE_SCROLL_INSENSITIVE
35、160; 结果集可滚动,但对数据库变化不敏感TYPE_SCROLL_SENSITIVE 结果集可滚动,但对数据库变化敏感ResultSet中的Concurrency取值CONCUR_READ_ONLY 结果集不能用于更新数据库 CONCUR
36、_UPDATEABLE 结果集可以用于更新数据库4.2 修改数据import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class RunUpdate public static void main(String args) Connection conn
37、 = null;Statement stmt = null;ResultSet rs = null;try / 动态导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManager.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "root", "");/ 创造SQL语句String sql = "SELECT * FROM user_list&quo
38、t;/ 执行SQL语句stmt = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );rs = stmt.executeQuery(sql);while ( true ) boolean b = rs.next();if ( false = b ) break;String userName = rs.getString( "user_name" );if ( true = userName.equalsIgnoreCase( "Eric&qu
39、ot; ) ) / 更新当前数据的user_passwordrs.updateString( "user_password", "12345678" );/ 提交更新rs.updateRow();break;System.out.println( "OK!" ); catch (Exception e) e.printStackTrace(); finally / 关闭ResultSettry rs.close(); catch( Exception e ) / 关闭Statementtry stmt.close(); catch (
40、Exception e) / 关闭Connectiontry conn.close(); catch (Exception e) 4.3 删除数据import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class RunDelete public static void main(String args) Connection conn = null;Statement stmt = null;ResultSet rs
41、= null;try / 动态导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManager.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "root", "");/ 创造SQL语句String sql = "SELECT * FROM user_list"/ 执行SQL语句stmt = conn.createStatement( Res
42、ultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );rs = stmt.executeQuery(sql);while ( true ) boolean b = rs.next();if ( false = b ) break;String userName = rs.getString( "user_name" );if ( true = userName.equalsIgnoreCase( "Eric" ) ) / 删除当前数据rs.deleteRow();break;System
43、.out.println( "OK!" ); catch (Exception e) e.printStackTrace(); finally / 关闭ResultSettry rs.close(); catch( Exception e ) / 关闭Statementtry stmt.close(); catch (Exception e) / 关闭Connectiontry conn.close(); catch (Exception e) 4.4 插入数据import java.sql.Connection;import java.sql.DriverManager;
44、import java.sql.ResultSet;import java.sql.Statement;public class RunInsert public static void main(String args) Connection conn = null;Statement stmt = null;ResultSet rs = null;try / 动态导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManager.getConnection("jdbc:mys
45、ql:/localhost:3306/jdbc_teaching", "root", "");/ 创造SQL语句String sql = "SELECT * FROM user_list"/ 执行SQL语句stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);rs = stmt.executeQuery(sql);while (true) boolean b = rs.next();if (false
46、 = b) break;String userName = rs.getString("user_name");if (true = userName.equalsIgnoreCase("Janet") / 创建一条准备数据,并志向这条数据rs.moveToInsertRow();/ 设定要插入的用户名rs.updateString("user_name", "Eric");/ 设定要插入的密码rs.updateString("user_password", "123");/
47、 提交要插入的数据rs.insertRow();/ 指向插入前指向的那条数据rs.moveToCurrentRow();break;System.out.println("OK!"); catch (Exception e) e.printStackTrace(); finally / 关闭ResultSettry rs.close(); catch (Exception e) / 关闭Statementtry stmt.close(); catch (Exception e) / 关闭Connectiontry conn.close(); catch (Exception
48、 e) 5 SQL批处理5.1 批处理import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class RunInsert public static void main(String args) Connection conn = null;Statement stmt = null;try / 动态导入数据库的驱动Class.forName("com.mysql.jdbc.Driver");/ 获取数据库链接conn = DriverManage
49、r.getConnection("jdbc:mysql:/localhost:3306/jdbc_teaching", "root", "");/ 开启事务conn.setAutoCommit(false);/ 创造执行SQL语句的环境stmt = conn.createStatement();/ 添加处理进当前批次stmt.addBatch("INSERT INTO user_list ( user_name, user_password ) VALUES ('Name789', '234'
50、)");stmt.addBatch("INSERT INTO user_list ( user_name, user_password ) VALUES ('Name567', '234')");/ 执行当前批次stmt.executeBatch();/ 提交事务mit();System.out.println("OK!"); catch (Exception e) e.printStackTrace();/ 回滚事务try conn.rollback(); catch (Exception e2) finall
51、y / 关闭Statementtry stmt.close(); catch (Exception e) / 关闭Connectiontry conn.close(); catch (Exception e) 5.2 事务和批处理的区别事务处理:底层是在数据库方存储SQL(没有提交事务的数据放在数据库的临时表空间),最后一次把临时表空间的数据提交到数据库服务器执行实现。(消耗数据库服务器内存)SQL批处理:底层是在客户端把SQL存储起来,最后一次把客户端存储的数据发送到数据库服务器执行实现。(消耗客户端的内存)。6 Blob与Clob字段的处理6.1 把数据写入数据库import java.io.File;import java.io.FileInputStr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息守秘维护承诺书(6篇)
- 2025年黄山市祁门文化旅游发展集团有限公司招聘5人考前自测高频考点模拟试题及答案详解(全优)
- 个性化权益保护保证承诺书6篇
- 2025年山东省黄河三角洲农业高新技术产业示范区山东省师范类高校学生从业技能大赛一、二等奖获得者(13人)模拟试卷及答案详解(有一套)
- 2025年福建省福州市水路运输事业发展中心招聘1人模拟试卷及答案详解(网校专用)
- 2025年湖北省三支一扶招聘考试(2000人)模拟试卷附答案详解
- 地方戏剧保护与振兴承诺书5篇
- 客户服务流程优化与工具集成方案
- 江苏省扬州市三校2024-2025学年高二上学期10月联合测试地理试卷(解析版)
- 2025年广东华润电力春季招聘考前自测高频考点模拟试题及答案详解(有一套)
- 2025广东广州市白云区民政局招聘窗口服务岗政府雇员1人笔试备考试题及答案解析
- 国家开放大学《药物治疗学(本)》形考作业1-4参考答案
- 《加工工艺学》2-2特种铸造
- GB/T 6342-1996泡沫塑料与橡胶线性尺寸的测定
- 第五章电压暂降及短时间中断
- GB/T 1423-1996贵金属及其合金密度的测试方法
- GB 17790-2008家用和类似用途空调器安装规范
- 2022年曲靖市交通建设投资集团有限公司招聘笔试题库及答案解析
- 高中综合实践活动
- HBN品牌拆解报告
- 【课件】Unit 4 Body Language Reading and Thinking 课件-2021-2022学年高中英语人教版(2019)选择性必修第一册
评论
0/150
提交评论