- 浏览: 188902 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 3251. 什么是线程? 线程和进程的区别 在了解线程的概念前,我 ... -
Java多线程编程-同步和锁
2017-10-04 13:29 01. 竞态条件(Race Condition) 两个或以上线 ... -
Core Java - 流(Stream) - 字节流和字符流(一)
2016-12-02 17:27 4480. 概述: Java中基于流的 ... -
Java开发 - 异常 - 使用throws
2016-04-21 11:35 515如果一个方法可能会产生异常,我们需要用throws关键字给它标 ... -
Java开发 - 异常 - 抛出异常
2016-04-21 11:24 567问题: 如何抛出一个系统异常并且捕获它 代码如下: pu ... -
Java8通过管道流(stream)来实现集合的一些聚合函数
2015-10-22 10:24 1766stream的一些聚合函数包括: count(), findF ... -
数组自定义排序
2015-10-21 14:17 1429CustomComparator.java package ... -
数组排序
2015-10-21 09:58 657SortArray.java package coreja ... -
HashMap使用范例
2015-10-20 14:25 761HashMapDemo.java package core ... -
Java8新特性 - Lambda表达式 - Functional Interfaces
2015-10-20 09:52 745Mapper.java package corejava8 ... -
使用Hashtable和线程技术制作自己简单的内存缓存
2013-07-19 11:06 11081. 首先,我们要做一个缓存数据类 这个数据类要有一个数据 ... -
Java OutOfMemory 解决
2013-07-19 10:18 792Eclipse中设置 -
String.format方法使用
2013-06-18 15:21 1875一.常规类型、字符类型和数值类型的格式说明符的语法如下:%[a ... -
JDK1.6连接SQL Server2008失败的原因
2011-07-29 15:05 10421. 需要下载最新sql server jdbc,从微软网站下 ... -
jar命令打包java带有包名的类文件
2011-07-13 09:40 1268jar cvfm JTool.jar jtool\ui\man ... -
ikvm转换jar文件成dll
2011-06-19 22:35 1695ikvmc -out:BasicFileOutput.dll ... -
jar命令打包java类文件
2011-06-19 22:33 1328jar cvfm BasicFileOutput.jar ma ... -
Java命令行编译自动生成包目录
2011-06-19 18:01 1345javac -d . BufferedInputFile.ja ... -
用命令行编译和执行带有包的java文件
2011-06-19 15:24 2753主要介绍java和javac命令的使用, 分带package和 ... -
FilenameFilter过滤目录下文件
2011-06-19 10:01 951编写一个实现FilenameFilter接口的类 publ ...
相关推荐
实验四数据库编程 1、实验目的: (1)掌握基本的DBMS的使用 (2)理解JDBC的概念 (3)运用JDBC-ODBC桥开发数据库系统 2、基本要求: (1)注意自始至终贯彻课程中所绍程序设计风格,养成良好的编程习惯。 (2)独立完成所布置...
java编程技术-JDBC数据库访问。主要介绍了: PostgreSQL数据库简介 ;Java数据库技术概述;传统的数据库连接方法;使用数据源连接数据库;预处理语句;DAO设计模式介绍。
连接数据库,试用Statement借口进行数据库的更新操作,试用ResultSet接口接受查询结果,PreparedStatement,事务处理,封装JDBC操作数据库的工具类,DAO设计模式
为了降低耦合性,提出了DAO封装数据库操作的设计模式,本例程实现了利用DAO设计模式,对数据表进行增、删、改、查,可以通过控制台输入数字1,2,3,4,实现对数据库的操作。
实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用 实验二 JSF+JPA实现用户注册 实验三 struts+spring+hibernate框架访问数据库的应用 实验四 使用WebService和EJBean访问数据库的应用
通常由数据库管理系统(DBMS = DataBase Management System)软件(如Oracle、DB2、SQL Server等)对数据库进行管理,应用程序通过(标准)编程接口(如ODBC/JDBC、DAO/ADO.NET、DOM/SAX等)来访问数据库
JSP 云平台教学系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助 系统采用serlvet +dao +bean,系统具有完整的源代码和数据库 ,系统主要采用B/S模式开发。开发 环境为TOMCAT7.0,Myeclipse8.5开发...
在封装SQL语句之前,我们得知道什么是DAO封装与实体类以及JDBC工具类的封装与连接数据库的具体流程。 封装SQL语句的好处: 封装SQL语句后就可以导包,给其他的工程使用,大大降低开发的强度,减少代码的冗余。...
Nutz, 它是一组轻便小型的框架的集合。 -------------Nutz 可以做什么? Dao -- 针对 JDBC 的薄封装,事务模板,无缓存 ...如果你以前根本没接触过 SSH ,只使用 JDBC 编程, 整个 Nutz 专门为你设计
JSP 绘本租赁管理系统是一套完善的web设计系统serlvet+dao+bean(MVC模式),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用...
本人做的一个仓库管理系统课程设计,供大家参考。使用struts1.2结合jdbc数据库编程接口,数据操作封装在DAO数据访问对象中。
JDBC工作我在IFRS Web编程领域从事JDBC工作。工作定义创建POJO汽车和板块类。 现在,创建相应的DAO类以及这两个类SQL的枚举。 在这些类中,创建GenericDAO接口定义的所有方法。 在DAO类中,处理异常。 在Car和Plate...
J2EE开发人员使用数据访问对象(DAO)设计模式把底层的数据访问逻辑和高层的商务逻辑...我们使用JDBC API连接我们公司的各种数据库平台,并且在整个应用程序中应用了DAO设计模式.下图显示了应用程序和数据源的关系: 通
采用java语言开发,原生jdbc编程,dao层和service分离,数据库采用oracle,基于servlet,jsp
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...
** DAO:**是使用数据持久性的应用程序的标准,其中使用面向对象的编程语言实现业务规则与数据库访问规则的分离。 注释: 使用测试类(src / test / java)验证CRUD 在lib文件夹中,有一些用于使用Ireport 5.6和...
Java网络编程 JAVA web开发实例讲解 宠物分类展现web项目 第03章 数据库准备及JDBC(共40页).ppt Java网络编程 JAVA web开发实例讲解 宠物分类展现web项目 第04章 用Hibernate优化宠物分类展现DAO类(共33页).ppt ...
采用java语言开发,原生jdbc编程,dao层和service分离,数据库采用oracle 采用java语言开发,原生jdbc编程,dao层和service分离,数据库采用oracle
通过本教程,您将学习如何使用 Java 编程语言建立与关系数据库的连接,以及查询和修改数据。 您还将知道如何使用 DAO(数据访问对象)在其自己的类中组织数据访问代码。 先决条件 在本教程中,我们将使用 MySQL ...
☆ Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭...