JDBC---数据库连接增删改查

2 篇文章 0 订阅
 
到这里,我意识到这个系统MVC中的C放置在各个V中了,所以C就不介绍了,哈哈哈
接着总结DAO层,这个系统我采用的应该算是标准的DAO设计模式
还没有完全写完的dao包
DAO的结构图
 
DAO数据访问层的开发:
1.设计基类DAOBase类
提供标准的获得和关闭数据库连接的方法
package com.yinger.patientims.dao; 

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * 数据库操作的基础类,它是其他的DAO类的父类
 * 定义了建立数据库连接和关闭数据库连接的方法
 */

public class DAOBase {
   private Connection connection;

   // 得到数据库连接
   public Connection getConnection() {
     try {
      Class.forName( "com.mysql.jdbc.Driver");
      connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/patientims", "root", "root");
    } catch (Exception e) {
      e.printStackTrace();
    }
     return connection;
  }

   // 关闭数据库连接
   public void closeConnnection() {
     try {
      connection.close();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
       if (connection != null) {
        connection = null;
      }
    }
  }

}
 
2.编写各个Model层对象对应的DAO类
例如 PatientDAO
注意一个方法 setOnePatient 方法,这个方法很有用的,其作用是将数据库中取出的一条记录放置到一个Patient对象上,所以该方法
最好是能够独立出来,以便重复使用!
package com.yinger.patientims.dao; 

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.yinger.patientims.model.Patient;
import com.yinger.patientims.util.DBUtil;

public class PatientDAO extends DAOBase {

   // 得到所有住院的病人的信息
   // SELECT
   // p.id,p.name,p.age,p.sex,p.address,p.logtime,p.phone,d.name,b.sickbedno,r.sickroomno
   // FROM t_patient p,t_department d,t_sickbed b,t_sickroom r
   // WHERE p.sickbed_id=b.id and b.sickroom_id=r.id and r.department_id=d.id
   public List <Patient > getPatientInfoList() {
    Patient patient;
    List <Patient > list = new ArrayList <Patient >();
     // 注意:这里有两个name,要使用到别名
    String sql = "SELECT p.id,p.name as pname,p.age,p.sex,p.address,p.logtime,p.phone,d.name as dname,b.sickbedno,r.sickroomno "
         + "FROM t_patient p,t_department d,t_sickbed b,t_sickroom r "
         + "WHERE p.sickbed_id=b.id and b.sickroom_id=r.id and r.department_id=d.id";
 
     String sql="SELECT * FROM  t_table"   //查询整个表
    Connection connection = null;
     // 在finally中使用它是它必须要初始化
     // 还有,它一定要放在外面,这样在try外面(finally)才可以被访问到
     // 还有,一定要有finally!关闭数据库连接是很重要的!
     try {
      connection = getConnection();
      PreparedStatement pStatement = connection.prepareStatement(sql);
      ResultSet resultSet = pStatement.executeQuery();
       while (resultSet.next()) {
        patient = setOnePatient(resultSet);
        list.add(patient);
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
       try {
        connection.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
     return list;
  }

   // 将数据库中的一条patient记录关联到一个Patient对象中
   // 并且它不处理异常,抛出由上层处理
   private Patient setOnePatient(ResultSet resultSet) throws Exception {
    Patient patient = new Patient();
     if (resultSet.getLong( "id") != 0) {
      patient.setId(resultSet.getLong( "id"));
    }
     if (resultSet.getString( "pname") != null) {
      patient.setName(resultSet.getString( "pname"));
    }
     if (resultSet.getString( "sex") != null) {
      patient.setSex(resultSet.getString( "sex"));
    }
     if (resultSet.getString( "phone") != null) {
      patient.setPhone(resultSet.getString( "phone"));
    }
     if (resultSet.getString( "address") != null) {
      patient.setAddress(resultSet.getString( "address"));
    }
     if (resultSet.getInt( "age") != 0) {
      patient.setAge(resultSet.getInt( "age"));
    }
     if (resultSet.getDate( "logtime") != null) {
      patient.setLogtime(resultSet.getDate( "logtime"));
    }
     if (resultSet.getString( "dname") != null) {
       // 注意这一步!这里容易发生空指针异常!在一个Patient对象中Department等属性并没有被初始化!
       // 所以要在类中new出各个对象,对于SickRoom等等同理
      patient.getDepartment().setName(resultSet.getString( "dname"));
    }
     if (resultSet.getInt( "sickbedno") != 0) {
      patient.getSickbed().setSickBedNo(resultSet.getInt( "sickbedno"));
    }
     if (resultSet.getInt( "sickroomno") != 0) {
      patient.getSickroom().setSickRoomNo(resultSet.getInt( "sickroomno"));
    }
     return patient;
  }

   // 删除病人信息
   public boolean deletePatient(Patient patient) {
    Long id = patient.getId();
    Connection connection = null;
    String sql = "delete from t_patient where id=  "+ id + "    ";
     try {
      connection = getConnection();
      PreparedStatement pStatement = connection.prepareStatement(sql);
       int res = pStatement.executeUpdate();
       if (res > 0) {
         return true; // 注意:这里虽然是return了,但是这个方法真正返回之前还是要执行finally
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
       try {
        connection.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
     return false;
  }

   // 添加病人住院信息
   public boolean insertPatient(Patient patient) {
    Connection connection = null;
     // INSERT INTO
     // t_patient(name,sex,age,phone,logtime,address,sickbed_id) VALUES
     // ('patient"+i+"','女',37,'1533535354','2011-10-10','TianJin',"+id+")
    String sql = "INSERT INTO t_patient(name,sex,age,phone,logtime,address,sickbed_id) VALUES ('" + patient.getName() + "','" + patient.getSex() + "',"
         + patient.getAge() + ",'" + patient.getPhone() + "','" + DBUtil.simpleDateFormat.format(patient.getLogtime()) + "','" + patient.getAddress() + "',"
         + patient.getSickbed().getId() + ")";   // 字符串用'"+ patient.getName() + "',整形用"+ patient.getAge() + "

        
     //patient.getLogtime().toLocaleString() 已经不推荐使用了
     //注意:时间是有点特别地是使用 DateFormater进行format一下!
     try {
      connection = getConnection();
      PreparedStatement pStatement = connection.prepareStatement(sql);
       int res = pStatement.executeUpdate();
       if (res > 0) {
         return true; // 注意:这里虽然是return了,但是这个方法真正返回之前还是要执行finally
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
       try {
        connection.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
     return false;
  }

   // 修改病人住院信息
   public boolean updatePatient(Patient patient) {
    Connection connection = null;
     //UPDATE t_patient as p set p.name='yyh' , p.address='ghalsdhgl' , p.age=24 , p.phone='523659365', p.sex='female'
     // where id=6
    StringBuffer sql = new StringBuffer( "UPDATE t_patient as p ");
    sql.append( " set p.name='" +patient.getName() + "' ");
    sql.append( ", p.address='" +patient.getAddress() + "' ");
    sql.append( " , p.age=" +patient.getAge() + " ");
    sql.append( " , p.phone='" +patient.getPhone() + "' ");
    sql.append( ", p.sex='" +patient.getSex() + "' ");
    sql.append( " ,p.sickbed_id= " +patient.getSickbed().getId() + " ");
    sql.append( " where id=" +patient.getId());
     try {
      connection = getConnection();
      PreparedStatement pStatement = connection.prepareStatement(sql.toString());
       int res = pStatement.executeUpdate();
       if (res > 0) {
         return true; 
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
       try {
        connection.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
     return false;
  }

}
 
 
再比如:DepartmentDAO类
 
package com.yinger.patientims.dao; 

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.yinger.patientims.model.Department;

public class DepartmentDAO extends DAOBase{

//  private List departmentList = new ArrayList();
//  private Department department;

   // 得到所有的科室
   public List <Department > getDepartmentList(){
    Department department;
    List <Department > list = new ArrayList <Department >();
    Connection connection = null;
    String sql = "select id,name from t_department";
     try {
      connection = getConnection();
      PreparedStatement pStatement = connection.prepareStatement(sql);
      ResultSet resultSet = pStatement.executeQuery();
       while (resultSet.next()) {
        department = setOneDepartment(resultSet);
        list.add(department);
      }
      pStatement.close();
    } catch (Exception e) {
      e.printStackTrace();
    } finally{
       try {
        connection.close(); // Quick Fix : Ctrl + 1
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
     return list;
  }

   // 从数据库中取出一条记录并保存到一个Department中
   private Department setOneDepartment(ResultSet resultSet) throws Exception {
    Department department = new Department();
     if(resultSet.getLong( "id") != 0){
      department.setId(resultSet.getLong( "id"));
    }
     if(resultSet.getString( "name") !=null){
      department.setName(resultSet.getString( "name"));
    }
     return department;
  }

}
 
3.总结:
(1)注意DAO类中每个操作的语句结构,一定要捕捉异常进行处理,一定要有finally,并在其中关闭连接
(2)注意数据库中取出来的数据的类型和Model的该属性的类型
(3)注意方法的返回值,是否要返回值?
(4)注意sql语句的构造,如果多次使用字符串的合并建议使用高效率的StringBuilder,还有构造时也要注意是否需要'',这个最好是
先测试,然后编写代码!
 
 
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答JDBC连接MySQL并进行增删改查操作的问题。 首先,您需要确保已经安装了MySQL数据库和Java开发环境。然后,您需要下载MySQL提供的JDBC驱动程序,将其添加到您的Java项目中。 接下来,您可以使用以下代码示例来连接MySQL数据库并进行增删改查操作: ``` import java.sql.*; public class JdbcExample { public static void main(String[] args) throws SQLException { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 连接到数据库 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); // 执行查询操作 pstmt = conn.prepareStatement("SELECT * FROM mytable"); rs = pstmt.executeQuery(); while (rs.next()) { // 处理查询结果 String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("Name: " + name + ", Age: " + age); } // 执行插入操作 pstmt = conn.prepareStatement("INSERT INTO mytable (name, age) VALUES (?, ?)"); pstmt.setString(1, "John"); pstmt.setInt(2, 30); int rows = pstmt.executeUpdate(); System.out.println(rows + " row(s) inserted."); // 执行更新操作 pstmt = conn.prepareStatement("UPDATE mytable SET age = ? WHERE name = ?"); pstmt.setInt(1, 31); pstmt.setString(2, "John"); rows = pstmt.executeUpdate(); System.out.println(rows + " row(s) updated."); // 执行删除操作 pstmt = conn.prepareStatement("DELETE FROM mytable WHERE name = ?"); pstmt.setString(1, "John"); rows = pstmt.executeUpdate(); System.out.println(rows + " row(s) deleted."); } catch (SQLException e) { e.printStackTrace(); } finally { if (rs != null) { rs.close(); } if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } } } } ``` 在这个代码示例中,我们首先使用`DriverManager.getConnection()`方法连接到MySQL数据库,然后使用`PreparedStatement`对象执行查询、插入、更新和删除操作。最后,我们使用`ResultSet`对象处理查询结果,使用`SQLException`对象处理异常,使用`close()`方法关闭数据库连接、语句和结果集。 当然,在实际开发中,您需要根据自己的需求进行适当的修改和优化。希望这个示例可以帮助您理解如何使用JDBC连接MySQL并进行增删改查操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值