- 浏览: 191960 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (75)
- JSP/Servlet (4)
- Spring (5)
- Hibernate (1)
- Struts (5)
- EJB (3)
- Swing (1)
- Core Java (29)
- Algorithm (2)
- HTML/CSS/JavaScript (0)
- JQuery/AJAX (1)
- Oracle (0)
- Design Pattern (2)
- MVC (0)
- Web服务器 (3)
- 杂项 (0)
- NetCDF On Java (0)
- Java Extension (2)
- iBATIS (4)
- English Articles (1)
- JavaEE (3)
- Java8 (3)
- Android (3)
- Maven (1)
- Hadoop (1)
- Docker (0)
- Java高并发 (0)
最新评论
-
Bll:
为什么要推荐jsp动作标签访问呢?
JavaBean入门 - 概念和简单例子 -
落雪封:
我检查过了,没有注释,只是大文本,也一直报这个错,求原因
Abator生成错误:XML document structures must start and end within the same entity
上次,我们只讲解了JDBC中简单的查询。
任何数据库的操作都包括:增,删,改,查。
今天,我们就来讲一下JDBC中完整地实现这4部分的方法。
为了使代码更加清晰,我们使用了DAO设计模式,就是为
每一个被操作的数据库对象建立一个DAO类,这个DAO类中
包含了被操作对象所应该包含的所有增,删,改,查操作。
首先,我们先建立一个类:CustomerDao
我们先试着在其中加入insert方法,如下:
我们先看一下Customer表插入前的数据情况:
然后,我们在客户端main方法中测试下该方法:
我们再来看一下数据库的情况:
可以看到,2条数据已经被成功插入了,而且你可以在控制台看到2条插入成功信息。
在上面代码中我们需要特别提到的是PreparedStatement。
在JDBC中进行数据更新操作时,我们推荐使用PreparedStatement,因为它
可以使用占位符,以便于我们从外部传入参数。
然后,我们一口气把更新,删除,查存全部做了,完整代码如下:
然后,我们做个Util类用于显示Customers:
客户端代码:
运行结果:
Id: SH001 , City: Shanghai
Id: FISSA , City: Madrid
Id: FRNDO , City: Madrid
Id: KRLOS , City: Madrid
Id: MRPHS , City: Zion
任何数据库的操作都包括:增,删,改,查。
今天,我们就来讲一下JDBC中完整地实现这4部分的方法。
为了使代码更加清晰,我们使用了DAO设计模式,就是为
每一个被操作的数据库对象建立一个DAO类,这个DAO类中
包含了被操作对象所应该包含的所有增,删,改,查操作。
首先,我们先建立一个类:CustomerDao
我们先试着在其中加入insert方法,如下:
public void insert(Customer customer) throws Exception { DbConn conn = null; PreparedStatement pstmt = null; String sql = "insert into Customers(customerid,city) " + "values(?,?)"; conn = new DbConn(); try { pstmt = conn.getConnection().prepareStatement(sql); pstmt.setString(1, customer.getCustomerId()); pstmt.setString(2, customer.getCity()); pstmt.executeUpdate(); pstmt.close(); System.out.println("One Customer Inserted Successfully."); } catch (RuntimeException e) { //e.printStackTrace(); throw new Exception("Insert Customer Error!"); } finally { conn.close(); } }
我们先看一下Customer表插入前的数据情况:
然后,我们在客户端main方法中测试下该方法:
public void insert(Customer customer) throws Exception { DbConn conn = null; PreparedStatement pstmt = null; String sql = "insert into Customers(customerid,city) " + "values(?,?)"; conn = new DbConn(); try { pstmt = conn.getConnection().prepareStatement(sql); pstmt.setString(1, customer.getCustomerId()); pstmt.setString(2, customer.getCity()); pstmt.executeUpdate(); pstmt.close(); System.out.println("One Customer Inserted Successfully."); } catch (RuntimeException e) { //e.printStackTrace(); throw new Exception("Insert Customer Error!"); } finally { conn.close(); } }
我们再来看一下数据库的情况:
可以看到,2条数据已经被成功插入了,而且你可以在控制台看到2条插入成功信息。
在上面代码中我们需要特别提到的是PreparedStatement。
在JDBC中进行数据更新操作时,我们推荐使用PreparedStatement,因为它
可以使用占位符,以便于我们从外部传入参数。
然后,我们一口气把更新,删除,查存全部做了,完整代码如下:
package corejava2.dao; import java.sql.*; import corejava2.objects.Customer; import corejava2.jdbc.DbConn; import java.util.*; public class CustomerDao { //insert public void insert(Customer customer) throws Exception { DbConn conn = null; PreparedStatement pstmt = null; String sql = "insert into Customers(customerid,city) " + "values(?,?)"; conn = new DbConn(); try { pstmt = conn.getConnection().prepareStatement(sql); pstmt.setString(1, customer.getCustomerId()); pstmt.setString(2, customer.getCity()); pstmt.executeUpdate(); pstmt.close(); System.out.println("One Customer Inserted Successfully."); } catch (RuntimeException e) { //e.printStackTrace(); throw new Exception("Insert Customer Error!"); } finally { conn.close(); } } //update public void update(Customer customer) throws Exception { DbConn conn = null; PreparedStatement pstmt = null; String sql = "update Customers set city = ? " + "where customerid = ?"; conn = new DbConn(); try { pstmt = conn.getConnection().prepareStatement(sql); pstmt.setString(1, customer.getCity()); pstmt.setString(2, customer.getCustomerId()); pstmt.executeUpdate(); pstmt.close(); System.out.println("One Customer Updated Successfully."); } catch (RuntimeException e) { //e.printStackTrace(); throw new Exception("Update Customer Error!"); } finally { conn.close(); } } //delete public void delete(String customerId) throws Exception { DbConn conn = null; PreparedStatement pstmt = null; String sql = "delete from Customers where customerid = ?"; conn = new DbConn(); try { pstmt = conn.getConnection().prepareStatement(sql); pstmt.setString(1, customerId); pstmt.executeUpdate(); pstmt.close(); System.out.println("One Customer Deleted Successfully."); } catch (RuntimeException e) { //e.printStackTrace(); throw new Exception("Delete Customer Error!"); } finally { conn.close(); } } //query all public ArrayList queryAll() throws Exception { ArrayList list = new ArrayList(); String sql = "select * from customers"; DbConn conn = null; Statement stmt = null; conn = new DbConn(); try { stmt = conn.getConnection().createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { Customer customer = new Customer(rs.getString("customerid"),rs.getString("city")); list.add(customer); } rs.close(); stmt.close(); } catch (RuntimeException e) { //e.printStackTrace(); throw new Exception("Query All Customers Error!"); } finally { conn.close(); } return list; } }
然后,我们做个Util类用于显示Customers:
package corejava2.util; import java.util.*; import corejava2.objects.Customer; public class CustomerUtil { public static void showCustomers(ArrayList list) { Iterator it = list.iterator(); while (it.hasNext()) { Customer customer = (Customer)it.next(); System.out.println(customer); } } }
客户端代码:
package corejava2.jdbc; import corejava2.dao.CustomerDao; import corejava2.objects.Customer; import corejava2.util.CustomerUtil; import java.util.*; public class JdbcDemo { public static void main(String[]args) throws Exception { Customer customer = null; CustomerDao cusDao = new CustomerDao(); //insert 2 customers customer = new Customer("SH001","Shanghai"); cusDao.insert(customer); customer = new Customer("TK001","Tokyo"); cusDao.insert(customer); //update customer city by id customer = new Customer("TK001","Osaka"); cusDao.update(customer); //delete customer by id cusDao.delete("TK001"); //query all customers ArrayList customers = cusDao.queryAll(); CustomerUtil.showCustomers(customers); } }
运行结果:
Id: SH001 , City: Shanghai
Id: FISSA , City: Madrid
Id: FRNDO , City: Madrid
Id: KRLOS , City: Madrid
Id: MRPHS , City: Zion
发表评论
-
Java高并发和多线程系列 - 1. 线程基本概念
2018-04-16 09:45 3621. 什么是线程? 线程和进程的区别 在了解线程的概念前,我 ... -
Java多线程编程-同步和锁
2017-10-04 13:29 01. 竞态条件(Race Condition) 两个或以上线 ... -
Core Java - 流(Stream) - 字节流和字符流(一)
2016-12-02 17:27 4910. 概述: Java中基于流的 ... -
Java开发 - 异常 - 使用throws
2016-04-21 11:35 562如果一个方法可能会产生异常,我们需要用throws关键字给它标 ... -
Java开发 - 异常 - 抛出异常
2016-04-21 11:24 630问题: 如何抛出一个系统异常并且捕获它 代码如下: pu ... -
Java8通过管道流(stream)来实现集合的一些聚合函数
2015-10-22 10:24 1803stream的一些聚合函数包括: count(), findF ... -
数组自定义排序
2015-10-21 14:17 1459CustomComparator.java package ... -
数组排序
2015-10-21 09:58 706SortArray.java package coreja ... -
HashMap使用范例
2015-10-20 14:25 794HashMapDemo.java package core ... -
Java8新特性 - Lambda表达式 - Functional Interfaces
2015-10-20 09:52 775Mapper.java package corejava8 ... -
使用Hashtable和线程技术制作自己简单的内存缓存
2013-07-19 11:06 11591. 首先,我们要做一个缓存数据类 这个数据类要有一个数据 ... -
Java OutOfMemory 解决
2013-07-19 10:18 837Eclipse中设置 -
String.format方法使用
2013-06-18 15:21 1918一.常规类型、字符类型和数值类型的格式说明符的语法如下:%[a ... -
JDK1.6连接SQL Server2008失败的原因
2011-07-29 15:05 10781. 需要下载最新sql server jdbc,从微软网站下 ... -
jar命令打包java带有包名的类文件
2011-07-13 09:40 1313jar cvfm JTool.jar jtool\ui\man ... -
ikvm转换jar文件成dll
2011-06-19 22:35 1746ikvmc -out:BasicFileOutput.dll ... -
jar命令打包java类文件
2011-06-19 22:33 1368jar cvfm BasicFileOutput.jar ma ... -
Java命令行编译自动生成包目录
2011-06-19 18:01 1393javac -d . BufferedInputFile.ja ... -
用命令行编译和执行带有包的java文件
2011-06-19 15:24 2787主要介绍java和javac命令的使用, 分带package和 ... -
FilenameFilter过滤目录下文件
2011-06-19 10:01 991编写一个实现FilenameFilter接口的类 publ ...
相关推荐
在第24讲中,我们探讨了JDBC编程中的DAO(Data Access Object)模式,这是一种常用的数据访问策略,用于封装数据库操作,以实现业务逻辑与数据存储的解耦。 **数据访问对象(DAO)**是数据库操作的核心组件,它提供...
实验报告的主题是“JAVA实验报告四数据库编程”,主要目的是让学生掌握基本的数据库管理系统(DBMS)使用、理解Java数据库连接(JDBC)的概念,并通过JDBC-ODBC桥接技术来开发实际的数据库系统。实验内容包括设计和...
通过这个上机作业,你不仅可以掌握Dao模式,还能熟悉JDBC的使用,了解数据库编程的基本流程。同时,对于开发CMS这样的实际项目,你将学习到如何组织代码结构,如何设计API接口,以及如何处理并发和安全性问题。这些...
在本资源中,我们主要探讨的是如何利用编程技术,特别是DAO(Data Access Objects)模式来访问和操作Microsoft Access数据库。DAO是一种设计模式,它在软件工程中被广泛应用于数据库访问层,以提供一种抽象的方式与...
Spring JDBC DAO(Data Access Object)模式是Spring提供的一种数据库访问机制,旨在简化传统的JDBC编程,使数据库操作更加便捷、可控。 一、Spring JDBC基础 1. JDBC简介:JDBC(Java Database Connectivity)是...
【JDBC编程3-DBCP】讲解的是在Java应用程序中如何使用数据库连接池(Database Connection Pool,DBCP)来高效管理数据库连接。JDBC(Java Database Connectivity)是Java语言访问数据库的标准API,而DBCP是Apache...
每个实体都可以转化为数据库中的一个表,表之间的关系可以通过外键来建立,例如,一个项目可能有多个负责人,这种一对多的关系可以在数据库设计中体现出来。这将涉及到数据库设计的范式理论,如第一范式(1NF)、第...
在"java编程技术-JDBC数据库访问.ppt"这个文件中,可能详细阐述了上述概念的实例和步骤,包括如何配置数据库连接,如何编写DAO类,如何使用预处理语句执行SQL,以及如何管理和关闭数据库资源等。 总的来说,这个...
Java语言SQL接口JDBC编程技术是Java开发人员与关系型数据库进行交互的重要工具。JDBC(Java Database Connectivity)是Java平台中的一个标准API,它允许Java应用程序与各种类型的数据库进行通信,无论数据库管理系统...
数据库DAO(Data Access Object)操作是Java编程中用于与数据库交互的一种常见模式。DAO层的主要目的是将业务逻辑和数据访问代码分离,使得应用程序能够独立于特定的数据库管理系统,提高代码的可重用性和可测试性。...
在Java编程领域,JDBC(Java Database Connectivity)是连接Java应用程序和各种数据库的重要接口。它允许程序员通过编写Java代码来执行SQL语句,实现对数据库的读写操作。本篇文章将详细阐述如何使用JDBC来操作...
DAO(Data Access Object)是一种面向对象的数据库访问模式,使用DAO对象可以简化数据库访问的复杂度,提高开发效率。 数据库访问接口是数据库应用程序开发的基础,了解这些接口的特点和应用场景,对于开发者来说是...
综上所述,JSP数据库编程涉及JDBC的使用、数据库连接管理、SQL语句的执行以及数据展示。通过学习和实践,你可以创建出高效、安全的Web应用程序,实现与各种数据库的交互。"JSP数据库编程指南"将提供更详细的步骤和...
在Java或类似的面向对象语言中,DAO通常是一个接口,定义了一系列对数据库进行操作的方法,如添加、删除、更新和查询记录。这些方法由具体的实现类处理,它们与特定的数据库系统(如MySQL、Oracle或SQL Server)进行...
在“Accp8.0\S2\使用Java实现数据库编程 第八章”这一主题中,我们聚焦于如何利用Java这门强大的开发语言进行数据库交互。Java数据库编程是后端开发中的核心技能,它使得应用程序能够有效地存储、检索和管理数据。本...
2. **JDBC(Java Database Connectivity)**:JDBC是Java中用于连接数据库的标准API,它提供了一套接口和类来建立、管理和关闭数据库连接,执行SQL语句,并处理结果集。了解JDBC的基础知识包括加载驱动、创建连接、...
**JSP数据库编程指南** 在Web开发领域,JavaServer Pages(JSP)是广泛用于创建动态网页的技术之一。它允许开发者将HTML代码与Java代码相结合,以实现服务器端的业务逻辑处理。当涉及到数据库交互时,JSP可以利用...
### 高级DAO编程技巧详解 #### 一、引言 在现代软件开发中,特别是J2EE领域,数据访问对象(Data Access Object, DAO)的设计模式被广泛应用于分离低级别的数据访问逻辑与高级别的业务逻辑。通过这种方式,开发者...
- Dao包通过JDBC(Java数据库连接)连接数据库,包括加载JDBC驱动、提供连接URL和创建数据库连接。 ### 7. 界面设计 这部分未详述,通常涉及用户友好的图形界面,便于旅客和管理员操作。 ### 8. 结束语 项目实施...