JDBC---DAO經典模式 實現對資料庫的增、刪、改、查
JDBC(Java Data Base Connection)的作用是連線資料庫
先看下jdbc連線SQLServer資料庫的簡單例子
程式碼實現(FirstJDBC):
package com.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class FirstJDBC { public static void main(String[] args) { //呼叫連線資料庫的操作 Connection con = createConnection(); } /** * JDBC 建立 SQL Server資料庫連線 */ private static Connection createConnection() { //定義載入驅動程式 String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //定義 連線 伺服器 和 資料庫sample String dbURL = "jdbc:sqlserver://localhost:1433; DataBaseName = sample1" ; //預設使用者名稱,不要用windows預設身份驗證 String userName = "sa" ; String userPassword = "zhichao" ; Connection connection = null ; Statement sta = null ; try { //正式載入驅動 Class.forName(driverName); //開始連線 connection = DriverManager.getConnection(dbURL, userName, userPassword); System.out.println("Connection Success !"); //向資料庫中執行SQL語句 sta = connection.createStatement() ; ResultSet rs = sta.executeQuery("SELECT id,name,height From Table_1"); while(rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); float height = rs.getFloat("height"); System.out.println("id = "+id+" name = "+name+" height = "+height); } } catch (Exception e) { System.out.println("Connection Fail !"); e.printStackTrace() ; } /** * 關閉資料庫 * @param connection */ finally { try { if (null != sta) { sta.close() ; sta = null; System.out.println("Statement 關閉成功"); } if (null != connection) { connection.close() ; connection = null; System.out.println("Connection 關閉成功"); } } catch (Exception e) { e.printStackTrace() ; } } return connection ; } }
小結:
要寫一個jdbc程式,先要載入相應資料庫的驅動程式,驅動程式最好放在你建的工程裡面,可以在你的工程下面建一個 lib資料夾以儲存外部的jar檔案,這樣的話把你的工程拷貝到別的計算機執行,仍能成功執行。
jdbc程式碼一般步驟:
1)載入外部驅動程式(jar包)
2)正式載入驅動程式 (Class.forName(driverName) )
3)獲取connection連線 (在jdk中的sql包中,只提供了一個類那就是DriverManeger,通過呼叫它的靜態方法getConnection(),可以得到以資料庫的連線
4)建立sql語句的宣告(Statement),執行sql語句(查詢),遍歷結果集
5)關閉資料庫連線(一般用finally{}來處理,或者呼叫方法的形式來完成,關閉之前先判斷你要關閉的物件連線是否為空,如果空那會拋異常,所以先判斷)
------------------------------------- ------------------------------------- ------------------------Data Access Objects-------------------- ------------------------------------------- ---------------------------
使用 DAO模式 來對資料庫做增刪改查操作
這種模式可以大概分為三個層:1.DAO層 2.服務層 3.表現層
1)表現層 :相當於客戶端用來檢視,提交資訊的角色
2)服務層 :是表現層和DAO層的紐帶,其實也沒幹什麼事就是通知訊息的角色
3)DAO :真正要做事的角色(對資料庫的某些操作)
舉個生活中的例子:
就好比你去餐廳吃飯,你充當一個 (表現層)的角色,然後有美女服務員(服務層),問你需要吃什麼東西,給你下一張訂單,讓你填。之後服務員把訂單傳到 廚師(DAO層)那裡,具體操作廚師會搞定,一段時間後廚師把做好的食物傳給服務員,服務員把食物在傳給客戶,這些操作就算基本完成了。
執行順序: 表現層-->服務層-->DAO層-->返回服務層-->返回表現層
來看看實現DAO模式的UML圖:
程式碼實現:
1.Bean檔案,在這主要作用(有點像中介儲存的角色):當從資料庫拿出資料後,一個個set到該類裡,進行賦值,然後把該物件放到集合中,之後再get出來
Student.java
package com.myjdbc.bean;
public class Student {
private Integer stuId;
private String stuName ;
private Integer stuAge;
private String stuTel ;
private String stuAddress ;
private Integer groupId;
public Integer getStuId() {
return stuId;
}
public void setStuId(Integer stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public Integer getStuAge() {
return stuAge;
}
public void setStuAge(Integer stuAge) {
this.stuAge = stuAge;
}
public String getStuTel() {
return stuTel;
}
public void setStuTel(String stuTel) {
this.stuTel = stuTel;
}
public String getStuAddress() {
return stuAddress;
}
public void setStuAddress(String stuAddress) {
this.stuAddress = stuAddress;
}
public Integer getGroupId() {
return groupId;
}
public void setGroupId(Integer groupId) {
this.groupId = groupId;
}
}
2.java連線資料庫的基本操作及關閉,封裝在一個類中
JDBCUtils.java
package com.myjdbc.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBCUtils {
/**
* 獲取連線
*
*/
public static Connection getConnection()
{
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://localhost:1433; DataBaseName = studentManager";
String user = "sa" ;
String password = "zhichao";
Connection con = null ;
try {
Class.forName(driverName);
con = DriverManager.getConnection(url, user, password);
System.out.println("success");
} catch (Exception e) {
e.printStackTrace();
}
return con ;
}
/**
* 關閉連線
*/
public static void free(ResultSet rs, Statement sta , Connection con)
{
try {
if(null != rs)
{
rs.close();
rs = null ;
}
if(null != sta)
{
sta.close();
sta = null ;
}
if(null != con)
{
con.close();
con = null ;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.定義一個DAO介面
StudentDAO.java
package com.myjdbc.dao;
import java.util.Set;
import com.myjdbc.bean.Student ;
public interface StudentDAO {
public int addStudent(Student student) ;
public int deleteStudent(String name);
public int updateStudent(String name);
public Student findStudent(String name);
public Set<Student> findAll();
}
4.實現DAO介面的類,具體DAO,做重要工作的類
ConcreteStudentDao.java
package com.myjdbc.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;
import com.myjdbc.bean.Student;
import com.myjdbc.dao.StudentDAO;
import com.myjdbc.utils.JDBCUtils;
public class ConcreteStudentDao implements StudentDAO{
//增加一個學生
public int addStudent(Student student)
{
Connection con = null ;
PreparedStatement ps = null ;
int i = 0 ;
try
{
con = JDBCUtils.getConnection();
String sql = "insert into student(stuName,stuAge,stuTel,stuAddress,groupId) values(?,?,?,?,?)";
ps = con.prepareStatement(sql);
ps.setString(1, student.getStuName());
ps.setInt(2, student.getStuAge());
ps.setString(3, student.getStuTel());
ps.setString(4, student.getStuAddress());
ps.setInt(5, student.getGroupId());
i = ps.executeUpdate() ;
}
catch(SQLException e)
{
throw new DAOException(e.getMessage(),e);
}
finally
{
JDBCUtils.free(null, ps, con);
}
return i;
}
//刪除一個學生
public int deleteStudent(String name)
{
Connection con = null ;
PreparedStatement ps = null ;
int i = 0 ;
try
{
con = JDBCUtils.getConnection();
String sql = "delete from student where stuName =?";
ps = con.prepareStatement(sql);
ps.setString(1, name);
i = ps.executeUpdate() ;
}
catch(SQLException e)
{
throw new DAOException(e.getMessage(),e);
}
finally
{
JDBCUtils.free(null, ps, con);
}
return i;
}
//修改一個學生
public int updateStudent(String name)
{
Connection con = null ;
PreparedStatement ps = null ;
int i = 0 ;
try
{
con = JDBCUtils.getConnection();
String sql = "update student set stuAge=stuAge+1 where stuName =?";
ps = con.prepareStatement(sql);
ps.setString(1, name);
i = ps.executeUpdate() ;
}
catch(SQLException e)
{
throw new DAOException(e.getMessage(),e);
}
finally
{
JDBCUtils.free(null, ps, con);
}
return i;
}
//查詢一行
public Student findStudent(String name)
{
Connection con = null ;
PreparedStatement ps = null ;
Student stu = null ;
ResultSet rs = null;
try
{
con = JDBCUtils.getConnection();
String sql = "select stuName,stuAge,stuTel,stuAddress,groupId from student where stuName =?";
ps = con.prepareStatement(sql);
ps.setString(1, name);
rs = ps.executeQuery() ;
stu = new Student();
while(rs.next())
{
stu.setStuName(rs.getString(1));
stu.setStuAge(rs.getInt(2));
stu.setStuTel(rs.getString(3));
stu.setStuAddress(rs.getString(4));
stu.setGroupId(rs.getInt(5));
}
}
catch(SQLException e)
{
throw new DAOException(e.getMessage(),e);
}
finally
{
JDBCUtils.free(rs, ps, con);
}
return stu;
}
//查詢所有
public Set<Student> findAll()
{
Connection con = null ;
PreparedStatement ps = null ;
Student stu = null ;
ResultSet rs = null;
Set<Student> set = null ;
try
{
con = JDBCUtils.getConnection();
String sql = "select stuName,stuAge,stuTel,stuAddress,groupId from student";
ps = con.prepareStatement(sql);
set = new HashSet<Student>() ;
rs = ps.executeQuery() ;
while(rs.next())
{
stu = new Student();
stu.setStuName(rs.getString(1));
stu.setStuAge(rs.getInt(2));
stu.setStuTel(rs.getString(3));
stu.setStuAddress(rs.getString(4));
stu.setGroupId(rs.getInt(5));
set.add(stu);
}
}
catch(SQLException e)
{
throw new DAOException(e.getMessage(),e);
}
finally
{
JDBCUtils.free(rs, ps, con);
}
return set;
}
}
5.自定義異常 繼承了執行時異常,具體操作讓父類實現
DAOException.java
package com.myjdbc.dao;
/**
* 自定義異常
* @author Administrator
*
*/
public class DAOException extends RuntimeException {
public DAOException()
{
super();
}
public DAOException(String messege,Throwable cause)
{
super(messege,cause);
}
public DAOException(String messege)
{
super(messege);
}
public DAOException(Throwable cause)
{
super(cause);
}
}
6定義一個服務類(服務層),本來還要定義一個介面,這裡簡寫了,客戶與DAO的紐帶,持有DAO物件的引用
StudentService.java
package com.myjdbc.service;
import java.util.Set;
import com.myjdbc.bean.Student;
import com.myjdbc.dao.StudentDAO;
import com.myjdbc.dao.ConcreteStudentDao;
public class StudentService {
StudentDAO sd = new ConcreteStudentDao();
public int add(Student student)
{
return this.sd.addStudent(student);
}
public int delete(String name)
{
return this.sd.deleteStudent(name);
}
public int update(String name)
{
return this.sd.updateStudent(name);
}
public Student find(String name)
{
return this.sd.findStudent(name);
}
public Set<Student> findAll()
{
return this.sd.findAll();
}
}
7.定義一個測試類,相當於 (表現層)
Client.java
package com.myjdbc.test;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.myjdbc.bean.Student;
import com.myjdbc.service.StudentService;
public class Client {
public static void main(String[] args)
{
Student stu = new Student();
Set<Student> set = new HashSet<Student>();
// stu.setStuName("zhangsan");
// stu.setStuAge(20);
// stu.setStuTel("18779157911");
// stu.setStuAddress("china");
// stu.setGroupId(1);
StudentService ss = new StudentService();
//System.out.println(ss.add(stu));
//System.out.println(ss.delete("aa"));
//System.out.println(ss.update("bb"));
//stu = ss.find("cc");
//System.out.println(stu.getStuName() +" " +stu.getStuAge()+" "+stu.getStuTel()+" "+stu.getStuAddress()+" "+stu.getGroupId());
set = ss.findAll() ;
Iterator<Student> iterator = set.iterator();
while(iterator.hasNext())
{
Student student = (Student)iterator.next() ;
System.out.println(student.getStuName() +" " +student.getStuAge()+" "+student.getStuTel()+" "+student.getStuAddress()+" "+student.getGroupId());
}
}
}
相關推薦
JDBC---DAO經典模式 實現對資料庫的增、刪、改、查
JDBC(Java Data Base Connection)的作用是連線資料庫 先看下jdbc連線SQLServer資料庫的簡單例子 程式碼實現(FirstJDBC): package com.jdbc; import java.sql.Connection; im
java連結mysql以及對資料庫的增,刪,改,查
package com.jdbcdemo; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.PreparedStateme
mybatis的傳統的增,刪,改,查實現
3.2.1、儲存使用者 <insert id="saveUser" parameterType="com.atguigu.mybatis.pojo.User"> insert into t_user(`last_name`,`sex`) valu
Mapper介面方式的mybatis的增,刪,改,查實現
4.1、Mapper介面程式設計的命名習慣Mapper介面方式的程式設計,需要先有一個介面。這個介面的命名一般是xxxxMapper。 比如: User模組的Mapper,介面命名為UserMapper。 Book模組的Mapper,介面命名為BookMappe
shell指令碼操作mysql資料庫,使用mysql的-e引數可以執行各種sql的(建立,刪除,增,刪,改、查)等各種操作
來源:http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520114116289991/ mysql -hhostname -Pport -uusername -ppassword -e 相關mysql的
dict的增,刪,改,查
date 關聯 print none 必須 數據類型 相同 一個 code dict是無序的 ,數據關聯性強,鍵值對,唯一一個個映射的數據類型 字典的鍵必須是可哈希的數據類型 (字符串,數字,bool,元祖)並且是唯一的. 不可哈希的:(列表,字典) dict的增 1
Javascript操作Cookie(增,刪,改,查)
time() add return jna mts cap 關閉 nbsp expire 1 //1. 獲得指定名稱為ObjName的Cookie的值 2 function getCookie(ObjName){ 3 var arrStr = documen
MySql cmd下的學習筆記 —— 有關表的操作(增,刪,改,查)
strong .com nsh utf str tab 主鍵 test har (知識回顧) 連接數據庫 mysql -uroot -p111 先建立一個新庫 create database test1; use test1; 由於今天的主要內容是表的操作,建立表的詳細過
mysql基本功能 增,刪,改,查
增 ==》 insert into 庫.表(欄位名列表) values(值列表); mysql> create table meinvdb.mm(-> id int(4) not null primary key,-> name varchar(18) not null-> );Que
mysql基本功能 增,刪,改,查
cat dup pda key null cte insert value creat 增 ==》 insert into 庫.表(字段名列表) values(值列表); mysql> create table meinvdb.mm(-> id
MySQL基礎操作增,刪,改,查。
一,SQL語言概述1,SQL語言是關係型資料庫的標準語言,用於維護管理資料庫,如資料查詢,資料更新,訪問控制,物件管理等功能。 2,建表 這是需要掌握的。(1)#Show databases; 檢視資料庫裡所有的小資料庫名。 show看 databases 資料庫小庫 (2)#Create databa
python第四天課程:列表(增,刪,改,查),元祖
''' #1.增加 append insert li = ['alex',[1,2,3],'wusir','egon','女神','taibai'] li.append('日天') print(li) li.append(1) print(li) while 1: name = input('請
asp.net core 2.1 dotnet(三)EF.core 的增,刪,改,查
1.呼叫方式: 增加引用: using Microsoft.EntityFrameworkCore; using Newtonsoft
Java中List的增,刪,改,查
package Colection; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; //備選課程類 public class L
斷電導致oracle的ORA-01207錯誤完全解決辦法(重做日誌檔案(redo log files)管理(增,刪,改,查,切))
彙總整理一下有關重做日誌檔案(redo log files)管理相關的操作(增,刪,改,查,切)。供參考。1.當前日誌相關資訊[email protected]> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES
GreenDao3.2使用詳解(增,刪,改,查,升級)
首先看一下效果圖: 專案結構如下圖所示: 第一步:在build中新增配置如下: projet 目錄下的build.gradle dependencies { classpath 'org.greenrobot:greendao-gradl
表的完整語法增,刪,改,查( 子查詢 )
多行 教學 pan 比較 nbsp 匹配 字段 values 數據 表的完整語法增刪該查 表的完整 增 語法 1.所有數據按順序插入 insert [into] 表名 values (值1,……值n),[值1,……值n] 2.指定字段匹配插入,可以任意順序
SQL server中常見的增,刪,改,查的操作
--增-- /*增加列*/ alter table 表名 add 列名 varchar(20) check(你的約束條件); 如:在學生情況表中增加一個Email列,要求檢查輸入的是否為Email; alter table 學生情況表 add Email varchar
基於SpringMVC框架,完成使用者的增,刪,改,查,以及json資料處理
package org.ksea.controller; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.http.HttpServletRequest; import j
MySQL資料庫學習筆記(十一)----DAO設計模式實現資料庫的增刪改查(進一步封裝JDBC工具類)
系列文章並非本人原創。 在這裡我想討論的一個問題是:在PersonDaoImpl這個實現類中,我們可以看到 public void add(Person p) throws SQLException { 26 Connection conn