JDBC允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
JDBC的执行流程如下:
- 连接数据源,如:数据库;
- 为数据库传递查询和更新指令(sql)
- 处理数据库响应并返回的结果(resultset)
一般原生JDBC会将数据库连接封装为一个JdbcUtil,示例如下:
1 package com.spring.utility; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 6 public class JdbcUtil { 7 private static String DriverString = "com.mysql.jdbc.Driver"; 8 private static String URL = "jdbc:mysql://localhost:3306/数据库名称"; 9 private static String UserName = 用户名; 10 private static String Password = 密码; 11 public static Connection getConnection(){ 12 try{ 13 Class.forName(DriverString); 14 Connection cn = DriverManager.getConnection(URL, UserName, Password); 15 return cn; 16 }catch(Exception e){ 17 e.printStackTrace(); 18 } 19 return null; 20 } 21 }
然后根据MVC框架,一般会在Dao层调用该工具类:
1 package com.spring.dao.impl; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 import com.spring.dao.StudentDao; 11 import com.spring.entity.StudentEntity; 12 import com.spring.utility.JdbcUtil; 13 14 /** 15 * @author Administrator 16 * 17 */ 18 public class StudentDaoImpl implements StudentDao{ 19 20 @Override 21 public int insert(StudentEntity st){ 22 Connection cn = JdbcUtil.getConnection(); 23 int result = 0; 24 String str = "insert into studententity(name,sex) values(?,?)"; 25 try { 26 PreparedStatement prp = cn.prepareStatement(str); 27 prp.setString(1, st.getName()); 28 prp.setInt(2, st.getSex()); 29 result = prp.executeUpdate(); 30 } catch (SQLException e) { 31 e.printStackTrace(); 32 }finally{ 33 try { 34 cn.close(); 35 } catch (SQLException e) { 36 e.printStackTrace(); 37 } 38 } 39 40 return result; 41 } 42 43 @Override 44 public int update(StudentEntity st) { 45 Connection cn = JdbcUtil.getConnection(); 46 int result = 0; 47 String str = "update studententity set name=?,sex=? where id=?"; 48 try { 49 PreparedStatement prp = cn.prepareStatement(str); 50 prp.setString(1, st.getName()); 51 prp.setInt(2, st.getSex()); 52 prp.setInt(3, st.getId()); 53 result = prp.executeUpdate(); 54 } catch (SQLException e) { 55 e.printStackTrace(); 56 }finally{ 57 try { 58 cn.close(); 59 } catch (SQLException e) { 60 e.printStackTrace(); 61 } 62 } 63 return result; 64 } 65 66 @Override 67 public List<StudentEntity> query(String st) { 68 Connection cn = JdbcUtil.getConnection(); 69 String sql = st; 70 List<StudentEntity> li = new ArrayList<StudentEntity>(); 71 try { 72 PreparedStatement prp = cn.prepareStatement(sql); 73 ResultSet rs = prp.executeQuery(); 74 while(rs.next()){ 75 StudentEntity stu = new StudentEntity(); 76 stu.setId(rs.getInt("id")); 77 stu.setName(rs.getString("name")); 78 stu.setSex(rs.getInt("sex")); 79 li.add(stu); 80 } 81 82 } catch (SQLException e) { 83 e.printStackTrace(); 84 } 85 return li; 86 } 87 88 @Override 89 public int delete(String st) { 90 Connection cn = JdbcUtil.getConnection(); 91 String sql = st; 92 int result=0; 93 try { 94 PreparedStatement prp = cn.prepareStatement(sql); 95 result = prp.executeUpdate(); 96 System.out.println("result="+result); 97 } catch (SQLException e) { 98 e.printStackTrace(); 99 } 100 return result; 101 } 102 103 }
做好Dao层后,根据实际需求需要,封装Service层,然后在Controller层调用就好了。
下面是自己容易犯的小错误:
1.insert语句写的还不正确,insert 表(各字段) values(各字段的值)
2.在写insert时,如果数据库主键设置了自增,则在语句中不需要插入该值;(否则报错)
3.查询query,在使用resultset的时候,结果集List<Entity>中List用的是JAVA.util包中的,而不是java.awt包中的
4.需要根据预编译类PreparedStatement的不同方法,判断何种返回值才是执行成功;[这个只是注意点,不是错误点]
原文地址:https://www.cnblogs.com/silence-fire/p/8931086.html
时间: 2024-11-16 10:46:11