版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JDBC数据库编程1、JDBC简介在现在的所有开发之中都是基于数据库的开发应用,那么如果要进行数据库的开发,则必须存在相应的操作服务支持,而JDBC就是一种服务:JDBC(Java数据库连接),是一套操作标准。JDBC的核心组成就是接口,不同的数据库生产商要根据自己的数据库按照指定的接口标准实现数据库的连接以及操作。而JDBC按照分类主要分为以下三种操作形式: JDBC-ODBC:使用JDBC技术连接ODBC,通过ODBC进行数据库的操作;|- 操作流程:程序 JDBC ODBC 数据库;中间要经过一个ODBC,没人这么做;|- 好处:所有的技术都是最新的,并且由Java默认提供驱动程序; J
2、DBC:不同的数据库生产商根据指定的标准进行数据库驱动的开发, 并且使用;|- 操作流程:程序 JDBC 数据库;需要单独配置驱动程序; JDBC网络连接:根据网络协议进行服务器的连接操作,开发之中都使用此方式;进行数据库开发的系统包是java.sql包,在这个包之中主要是一个类四个接口:DriverManager类、Connection、Statement、PreparedStatement、ResultSet。2、连接数据库本次使用的是Oracle数据库进行开发,而如果要使用oracle,则必须保证两个服务打开:监听、实例服务。但是如果要进行Oracle的数据库连接还需要得到Oracle的
3、驱动,那么这一驱动程序在Oracle安装之后会自动提供。路径:D:oracleproduct10.1.0db_1jdbclibclasses12.jar,此时可以在CLASSPATH之中进行此路径的注册,但是这个CLASSPATH在Eclipse之中没有用处,所以还需要在Eclipse里面配置jar包。而如果要想取得数据库连接,还需要以下四个信息才可以完成: 数据库驱动程序:oracle.jdbc.driver.OracleDriver; 数据库连接地址:现在操作的数据库是MLDN,连接端口是:1521|- 连接地址:jdbc:oracle:thin:localhost:1521:MLDN;
4、数据库的用户名:scott; 数据库的密码:tiger;以上的这一信息一定要记下来,不同的数据库连接只在此处不同,但是至少得写一个出来。准备完成了所有的信息之后,下面就可以按照如下的步骤进行数据库的操作: 加载数据库驱动程序; 通过DriverManager类取得连接;|- 方法:public static Connection getConnection(String url, String user, String password) throws SQLException 进行数据表的CRUD操作; 关闭数据库;资源操作必须关闭每一个DriverManager取得的连接都通过Connec
5、tion接口表示,所以在整个的JDBC,每次通过DriverManager取得的每一个Connection都表示一个新的数据库连接。范例:连接数据库package cn.mldn.test;import java.sql.Connection;import java.sql.DriverManager;public class TestDemo public static final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public static final String DBURL = jdbc:oracle:thin:loca
6、lhost:1521:MLDN;public static final String DBUSER = scott;public static final String PASSWORD = tiger;public static void main(String args) throws Exception / 省事Connection conn = null; / 表示一个数据库连接对象Class.forName(DBDRIVER); / 加载数据库驱动程序/ CTRL + SHIFT + X,格式化代码:CTRL + Fconn = DriverManager.getConnection
7、(DBURL, DBUSER, PASSWORD);System.out.println(conn); / 输出连接对象conn.close();解决方法:1、输入regedit.exe,进入到注册表;2、找到项:HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesOracleOraDb10g_home2TNSListener;3、观察ImagePath,表示的是可执行程序的路径;D:oracleproduct10.1.0db_1BINTNSLSNR3、数据库的操作(重点)当取得了数据库的连接对象之后,那么下面就可以通过Connection接口对象取得St
8、atement接口对象。 方法:public Statement createStatement() throws SQLException;用户可以使用Statement接口中的方法进行数据库的查询及更新处理操作; 更新操作:public int executeUpdate(String sql) throws SQLException;返回更新的行数 查询操作:public ResultSet executeQuery(String sql) throws SQLException;在执行操作之前首先建立一张新的数据表,数据库创建脚本如下:DROP TABLE member PURGE ;
9、DROP SEQUENCE myseq ;CREATE SEQUENCE myseq ;CREATE TABLE member (midNUMBERPRIMARY KEY ,nameVARCHAR2(200)NOT NULL ,ageNUMBER ,birthdayDATE ,noteCLOB) ;其中mid的内容由序列控制增长,序列的增长使用nextval伪列。3.1、进行数据的更新操作数据的更新操作主要是分为三种:1、增加操作:INSERT INTO 表名称 (字段,) VALUES (值,)在编写增加操作的时候数据要注意: VARCHAR2、CLOB:使用“”声明; NUMBER:直接编
10、写数字; DATE:SYSDATE、TO_DATE()、按照指定的字符串规格编写。package cn.mldn.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class TestDemo public static final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public static final String DBURL = jdbc:oracle:thin:localhost:1
11、521:MLDN;public static final String DBUSER = scott;public static final String PASSWORD = tiger;public static void main(String args) throws Exception / 省事Connection conn = null; / 表示一个数据库连接对象Statement stmt = null; / 表示数据库操作对象Class.forName(DBDRIVER); / 加载数据库驱动程序conn = DriverManager.getConnection(DBURL
12、, DBUSER, PASSWORD);stmt = conn.createStatement(); / 创建数据库操作String sql = INSERT INTO member(mid,name,age,birthday,note) + VALUES (myseq.nextval,张三,20, + TO_DATE(1891-09-12,yyyy-mm-dd),岁数很长的一个老人) ;int len = stmt.executeUpdate(sql); / 执行更新System.out.println(更新行数: + len);stmt.close() ;conn.close();2、删除
13、操作:DELETE FROM 表名称 WHERE 删除条件(s)如果不写删除条件表示全部删除。package cn.mldn.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class TestDemo public static final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public static final String DBURL = jdbc:oracle:thin:local
14、host:1521:MLDN;public static final String DBUSER = scott;public static final String PASSWORD = tiger;public static void main(String args) throws Exception / 省事Connection conn = null; / 表示一个数据库连接对象Statement stmt = null; / 表示数据库操作对象Class.forName(DBDRIVER); / 加载数据库驱动程序conn = DriverManager.getConnection
15、(DBURL, DBUSER, PASSWORD);stmt = conn.createStatement(); / 创建数据库操作String sql = DELETE FROM member WHERE mid IN (4,14) ;int len = stmt.executeUpdate(sql); / 执行更新System.out.println(更新行数: + len);stmt.close() ;conn.close();3、修改操作:UPDATE 表名称 SET 字段=值, WHERE 修改条件(s)package cn.mldn.test;import java.sql.Con
16、nection;import java.sql.DriverManager;import java.sql.Statement;public class TestDemo public static final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public static final String DBURL = jdbc:oracle:thin:localhost:1521:MLDN;public static final String DBUSER = scott;public static final String PAS
17、SWORD = tiger;public static void main(String args) throws Exception / 省事Connection conn = null; / 表示一个数据库连接对象Statement stmt = null; / 表示数据库操作对象Class.forName(DBDRIVER); / 加载数据库驱动程序conn = DriverManager.getConnection(DBURL, DBUSER, PASSWORD);stmt = conn.createStatement(); / 创建数据库操作String sql = UPDATE m
18、ember SET name=李四 WHERE mid IN (1,3,5,7,9,10) ;int len = stmt.executeUpdate(sql); / 执行更新System.out.println(更新行数: + len);stmt.close() ;conn.close();所有的操作发现只是在更改了SQL语句,其他的地方没有任何的改变,这个就是JDBC操作的固定之处。3.2、数据库的查询操作如果现在在sqlplusw之中进行查询,那么屏幕上返回的是所有满足这一查询的查询结果,但是现在执行查询的不再是前台界面,而是程序,所以就必须把这一查询结果交给程序去处理,那么就必须设计一
19、种类型,这种类型可以保存任意多的查询结果,那么这就是ResultSet作用。范例:查询member表package cn.mldn.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.Date;public class TestDemo public static final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public
20、 static final String DBURL = jdbc:oracle:thin:localhost:1521:MLDN;public static final String DBUSER = scott;public static final String PASSWORD = tiger;public static void main(String args) throws Exception / 省事Connection conn = null; / 表示一个数据库连接对象Statement stmt = null; / 表示数据库操作对象Class.forName(DBDRI
21、VER); / 加载数据库驱动程序conn = DriverManager.getConnection(DBURL, DBUSER, PASSWORD);stmt = conn.createStatement(); / 创建数据库操作String sql = SELECT mid,name,age,birthday,note FROM member ;ResultSet rs = stmt.executeQuery(sql); / 查询数据库while (rs.next() / 指针向下移动int mid = rs.getInt(mid) ;String name = rs.getString
22、(name) ;int age = rs.getInt(age) ;Date birthday = rs.getDate(birthday) ;String note = rs.getString(note) ;System.out.println(mid + , + name + , + age + , + birthday+ , + note);rs.close() ;stmt.close();conn.close();/ 一个连接可以打开多个操作,如果连接一关闭,所有的都关闭但是需要注意的是,在使用ResultSet取数据的时候,也可以使用序号的形式完成。while (rs.next()
23、 / 指针向下移动int mid = rs.getInt(1) ;String name = rs.getString(2) ;int age = rs.getInt(3) ;Date birthday = rs.getDate(4) ;String note = rs.getString(5) ;System.out.println(mid + , + name + , + age + , + birthday+ , + note);以上的代码在Oracle 10g之前都可以使用,但是到了Oracle 11g,对于CLOB字段的取值有了些改变,不能再像之前那样直接利用getString()取
24、了,只能利用IO流读取。while (rs.next() / 指针向下移动int mid = rs.getInt(1) ;String name = rs.getString(2) ;int age = rs.getInt(3) ;Date birthday = rs.getDate(4) ;Reader input = rs.getClob(5).getCharacterStream() ;/ 大字段BufferedReader buf = new BufferedReader(input) ;StringBuffer note = new StringBuffer() ;String st
25、r = null ;while(str = buf.readLine() != null) note.append(str) ;System.out.println(mid + , + name + , + age + , + birthday+ , + note);像以后的MySQL等数据库都不会存在此类问题。4、预处理:PreparedStatement(核心)如果说现在有这样一个要求:增加一个新的数据,但是这个人的姓名叫“MrSmith”,而且现在不单单是修改SQL语句,而是希望这里面的数据由用户自己输入。package cn.mldn.test;import java.sql.Conn
26、ection;import java.sql.DriverManager;import java.sql.Statement;public class TestDemo public static final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public static final String DBURL = jdbc:oracle:thin:localhost:1521:MLDN;public static final String DBUSER = scott;public static final String PASS
27、WORD = tiger;public static void main(String args) throws Exception / 省事String name = MrSmith ;int age = 30 ;String date = 1998-09-01 ;/ 字符串String note = 可算是个正常人。 ;Connection conn = null; / 表示一个数据库连接对象Statement stmt = null; / 表示数据库操作对象Class.forName(DBDRIVER); / 加载数据库驱动程序conn = DriverManager.getConnec
28、tion(DBURL, DBUSER, PASSWORD);stmt = conn.createStatement(); / 创建数据库操作String sql = INSERT INTO member(mid,name,age,birthday,note) + VALUES (myseq.nextval, + name + , + age + , + TO_DATE( + date + ,yyyy-mm-dd), + note + ) ; / 别费劲System.out.println(sql);int len = stmt.executeUpdate(sql); / 执行更新System.
29、out.println(更新行数: + len);stmt.close() ;conn.close();本程序执行时出现了以下的错误信息:INSERT INTO member(mid,name,age,birthday,note) VALUES (myseq.nextval,MrSmith,30, TO_DATE(1998-09-01,yyyy-mm-dd),可算是个正常人。) Exception in thread main java.sql.SQLException: ORA-00917: missing comma在日后的JDBC开发之中,如果出现了SQLException查SQL语句。
30、因为在SQL语句之中“”是作为字符串的声明使用的,所以如果出现一个单独的“”会破坏这一规定,那么自然就出错了。因为此时所使用的方式是拼凑的SQL语句,它需要将多个字符串内容连接在一起,所以使用起来很不方便,则就可以得出一个结论 既然拼凑的SQL不好使用,那么在开发之中是绝对不会使用Statement接口开发。都去使用Statement的子接口 PreparedStatement完成。PreparedStatement是一种预处理的SQL执行方式,其执行的性能要比Statement更高。在进行预处理操作的时候所有的内容实际上并不知道,那么都要使用“?”进行占位,回到之前的增加程序。但是如果要想取
31、得PreparedStatement接口对象则需要使用Connection接口的另外一个方法完成:public PreparedStatement prepareStatement(String sql) throws SQLException而取得了PreparedStatement接口对象之后那么执行数据库操作的方法也要更新: 更新操作:public int executeUpdate() throws SQLException; 查询操作:public ResultSet executeQuery() throws SQLException;范例:使用PreparedStatement进
32、行数据的更新操作package cn.mldn.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.util.Date;public class TestDemo public static final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public static final String DBURL = jdbc:oracle:thin:localhost:1521
33、:MLDN;public static final String DBUSER = scott;public static final String PASSWORD = tiger;public static void main(String args) throws Exception / 省事String name = MrSmith;int age = 30;Date date = new Date(); / 表示日期String note = 可算是个正常人。;Connection conn = null; / 表示一个数据库连接对象PreparedStatement pstmt =
34、 null; / 表示数据库操作对象Class.forName(DBDRIVER); / 加载数据库驱动程序conn = DriverManager.getConnection(DBURL, DBUSER, PASSWORD);String sql = INSERT INTO member(mid,name,age,birthday,note) + VALUES (myseq.nextval,?,?,?,?) ;pstmt = conn.prepareStatement(sql);pstmt.setString(1, name);pstmt.setInt(2, age);pstmt.setDa
35、te(3, new java.sql.Date(date.getTime();pstmt.setString(4, note);System.out.println(sql);int len = pstmt.executeUpdate(); / 执行更新System.out.println(更新行数: + len);pstmt.close();conn.close();以上完成了增加数据的操作,实际上对于修改和删除操作也一样了,下面完成数据的查询操作,通过几个范例说明,这几个范例直接和日后的开发有着最紧密的联系。范例:查询member表中的全部记录package cn.mldn.test;im
36、port java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.Date;public class TestDemo public static final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public static final String DBURL = jdbc:oracle:thin:localhost:1521:MLDN
37、;public static final String DBUSER = scott;public static final String PASSWORD = tiger;public static void main(String args) throws Exception / 省事Connection conn = null; / 表示一个数据库连接对象PreparedStatement pstmt = null; / 表示数据库操作对象Class.forName(DBDRIVER); / 加载数据库驱动程序conn = DriverManager.getConnection(DBUR
38、L, DBUSER, PASSWORD);String sql = SELECT mid,name,age,birthday,note FROM member ;pstmt = conn.prepareStatement(sql);ResultSet rs = pstmt.executeQuery() ;while (rs.next() int mid = rs.getInt(1) ;String name = rs.getString(2) ;int age = rs.getInt(3) ;Date birthday = rs.getDate(4) ;String note = rs.get
39、String(5) ;System.out.println(mid + , + name + , + age + , + birthday+ , + note);pstmt.close();conn.close();范例:使用模糊查询package cn.mldn.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.Date;public class TestDemo p
40、ublic static final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public static final String DBURL = jdbc:oracle:thin:localhost:1521:MLDN;public static final String DBUSER = scott;public static final String PASSWORD = tiger;public static void main(String args) throws Exception / 省事String keyWord
41、= 张 ;Connection conn = null; / 表示一个数据库连接对象PreparedStatement pstmt = null; / 表示数据库操作对象Class.forName(DBDRIVER); / 加载数据库驱动程序conn = DriverManager.getConnection(DBURL, DBUSER, PASSWORD);String sql = SELECT mid,name,age,birthday,note + FROM member + WHERE name LIKE ?;pstmt = conn.prepareStatement(sql);pst
42、mt.setString(1, % + keyWord + %);ResultSet rs = pstmt.executeQuery() ;while (rs.next() int mid = rs.getInt(1) ;String name = rs.getString(2) ;int age = rs.getInt(3) ;Date birthday = rs.getDate(4) ;String note = rs.getString(5) ;System.out.println(mid + , + name + , + age + , + birthday+ , + note);ps
43、tmt.close();conn.close();如果此时的keyWord为空字符串呢?表示查询全部数据。范例:分页显示数据currentPage = 1,lineSize = 5,当前在第1页,每页显示5条记录。package cn.mldn.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.Date;public class TestDemo public stat
44、ic final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public static final String DBURL = jdbc:oracle:thin:localhost:1521:MLDN;public static final String DBUSER = scott;public static final String PASSWORD = tiger;public static void main(String args) throws Exception / 省事String keyWord = ;int cur
45、rentPage = 2 ;int lineSize = 5 ;Connection conn = null; / 表示一个数据库连接对象PreparedStatement pstmt = null; / 表示数据库操作对象Class.forName(DBDRIVER); / 加载数据库驱动程序conn = DriverManager.getConnection(DBURL, DBUSER, PASSWORD);String sql = SELECT * FROM + (SELECT mid,name,age,birthday,note,ROWNUM rn + FROM member + WH
46、ERE name LIKE ? AND ROWNUM? ;pstmt = conn.prepareStatement(sql);pstmt.setString(1, % + keyWord + %);pstmt.setInt(2, currentPage * lineSize);pstmt.setInt(3, (currentPage - 1) * lineSize);ResultSet rs = pstmt.executeQuery() ;while (rs.next() int mid = rs.getInt(1) ;String name = rs.getString(2) ;int a
47、ge = rs.getInt(3) ;Date birthday = rs.getDate(4) ;String note = rs.getString(5) ;System.out.println(mid + , + name + , + age + , + birthday+ , + note);pstmt.close();conn.close();范例:查询member表中的数据量 COUNT()函数package cn.mldn.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.P
48、reparedStatement;import java.sql.ResultSet;public class TestDemo public static final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public static final String DBURL = jdbc:oracle:thin:localhost:1521:MLDN;public static final String DBUSER = scott;public static final String PASSWORD = tiger;public
49、static void main(String args) throws Exception / 省事String keyWord = ;Connection conn = null; / 表示一个数据库连接对象PreparedStatement pstmt = null; / 表示数据库操作对象Class.forName(DBDRIVER); / 加载数据库驱动程序conn = DriverManager.getConnection(DBURL, DBUSER, PASSWORD);String sql = SELECT COUNT(mid) + FROM member + WHERE na
50、me LIKE ? ;pstmt = conn.prepareStatement(sql);pstmt.setString(1, % + keyWord + %);ResultSet rs = pstmt.executeQuery();if (rs.next() / 一定满足int count = rs.getInt(1); / 取第一列System.out.println(count);pstmt.close();conn.close();以上的几个程序为今天最重要的程序,晚上把这些程序都可以不看参考的写出来。5、批处理及事务处理在之前所有的操作实际上都属于JDBC 1.0的范畴,当然与最早
51、的JDBC 1.0相比已经有很多的改善,而现在最新的JDBC版本是4.0,但是根本没人使(都使Hibernate),而在JDBC 2.0之后实际上增加了许多的新功能(基本上都是无用功能):可滚动的结果集、使用结果集更新数据、批处理。在这之中唯一可以使用的就是批处理的操作,所谓的批处理就是指一次性向数据表之中执行多条SQL语句。而要想使用批处理,则对应的操作方法也应该更改: Statement操作更改:|- 增加批处理:public void addBatch(String sql) throws SQLException;|- 执行批处理:public int executeBatch() t
52、hrows SQLException; PreparedStatement操作更改:|- 增加批处理:public void addBatch() throws SQLException;范例:通过Statement演示一下批处理package cn.mldn.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class TestDemo public static final String DBDRIVER = oracle.jdbc.driver.OracleDriver;public static final String DBURL = jdbc:oracle:thin:localhost:1521:MLDN;public static final String DBUSER = scott;public static final String PASSWORD = tiger;public static void main(String args) throws Exception / 省事Connection conn = null; /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园临时培训制度
- 花卉公司培训制度
- 艺术班培训规章制度
- 高校团校培训制度
- 英语培训学校奖罚制度
- 严精培训督导制度
- 党员分级培训制度
- 幼儿园职前培训制度
- 监理公司质量培训制度
- 固废业务培训制度
- 2026新疆阿合奇县公益性岗位(乡村振兴专干)招聘44人笔试备考试题及答案解析
- 2025-2026学年辽宁省葫芦岛市连山区八年级(上)期末数学试卷(含答案)
- 上海市松江区2026届初三一模物理试题(含答案)
- 小学六年级英语2026年上学期语法改错综合真题
- 2026长治日报社工作人员招聘劳务派遣人员5人备考题库完美版
- 护理核心制度内容精要
- 湖南省娄底市期末真题重组卷-2025-2026学年四年级语文上册(统编版)
- 光伏板清洗施工方案
- 阅读理解体裁与命题方向(复习讲义)-2026年春季高考英语(上海高考专用)
- 指南抗菌药物临床应用指导原则(2025版)
- 2025年华侨生联考试题试卷及答案
评论
0/150
提交评论