参考完一二步骤,这里默认数据库已经创建完成 库与表。
框架显示图:
2:在SRC---》Test 下面 创建一个类:BaseDao
该类里面有2个主要方法。
1:查询方法 prepareStatement
2:非查询方法 (增删改) executeUpdate
注意点: 一:JDBC_DRIVER 连接驱动的,这里需要看Mysql的版本。
如果是8.0以上的版本,需要用 com.mysql.cj.jdbc.Driver
该版本是mysql5.7 所以使用的是:com.mysql.jdbc.Driver
二:Class.forName(JDBC_DRIVER); 这个是加载驱动,需要用try catch 并且用ClassNotFoundException 抛异常
三:DB_URL 这个是mysql的连接地址。mytest是数据库名称
四:USER:mysql改数据库账号
五:PASS:数据库登入密码
三:底层连接数据库类:
package Test; import java.sql.*; public class BaseDao { /*** * * @author 数据库连接类 * */ private String JDBC_DRIVER = "com.mysql.jdbc.Driver"; private String DB_URL = "jdbc:mysql://localhost:3306/mytest"; // ---------自己写数据库表名,只要数据库的表名跟这里的一样就行 private String USER = "root"; // ----------你自己数据库的名称 private String PASS = "123456"; // -----------你自己数据库的密码 Connection conn = null; /**** @param 打开数据库 */ protected Connection getConnetconn() { conn = null; try { Class.forName(JDBC_DRIVER); //打开连接 System.out.println("连接数据库....."); conn = DriverManager.getConnection(DB_URL, USER, PASS); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } /**** @param 关闭数据库连接 */ protected void closeAll(Connection conn, PreparedStatement ps, ResultSet rs) { if (rs != null) try { if (rs != null) rs.close(); if (ps != null) ps.close(); if (conn != null) conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /*** @param 增删改方法 * @param 接受 参数为 SQL语句 和 对象数组 * @return 返回受影响行数 */ public int executeUpdate(String sql ,Object []ob) { conn = getConnetconn(); PreparedStatement ps = null; try { ps = prepareStatement(conn, sql, ob); int i = ps.executeUpdate(); return i; } catch (SQLException e) { // TODO Auto-generated catch block // e.printStackTrace(); return 0; } finally { closeAll(conn, ps, null); } } ///*** * 查询方法 */ protected PreparedStatement prepareStatement(Connection conn, String sql, Object[] ob) { PreparedStatement ps = null; try { int index = 1; ps = conn.prepareStatement(sql); if (ps != null && ob != null) { for (int i = 0; i < ob.length; i++) { ps.setObject(index, ob[i]); index++; } } } catch (SQLException e1) { e1.printStackTrace(); } return ps; } }
四:创建一个视图类,其实不创建类也可以实现改Demo,为了更直观,可以创建一个类,类名:UserInfoModel
package Test; public class UserInfoModel { private int userid; private String username; private String useraddr; private String usertel; public int getUserid() { return userid; } public void setUserid(int id) { this.userid = id; } public String getUsername() { return username; } public void setUsername(String username){ this.username = username; } public String getUseraddr() { return useraddr; } public void setUseraddr(String useraddr) { this.useraddr = useraddr; } public String getUsertel() { return usertel; } public void setUsertel(String usertel) { this.usertel = usertel; }
五:调用底层三的方法,实现增删改查
这里:extends 是继承了父类 BaseDao
package Test; import java.sql.*; import java.util.ArrayList; import java.util.List; public class UserInfoDao extends BaseDao{ /*---查询方法---*/ public List<UserInfoModel> search(String sql,Object...params){ List<UserInfoModel> list =new ArrayList<UserInfoModel>(); Connection conn=this.getConnetconn(); PreparedStatement pst=null; ResultSet rs=null; try { pst=this.prepareStatement(conn, sql, params); rs=pst.executeQuery(); while(rs.next()){ UserInfoModel wor=new UserInfoModel(); wor.setUserid(rs.getInt(1)); wor.setUsername(rs.getString(2)); wor.setUseraddr(rs.getString(3)); wor.setUsertel(rs.getString(4)); list.add(wor); } } catch (SQLException e) { e.printStackTrace(); }finally{ closeAll(conn, pst, rs); } return list; } /*新增方法*/ public int insert(){ UserInfoModel t=new UserInfoModel(); t.setUseraddr("shanghai"); t.setUsername("王五"); t.setUsertel("13524696896"); String str="INSERT INTO user_info ( user_name,user_addr,user_tel) VALUE(?,?,?)"; return executeUpdate(str, new Object[]{t.getUsername(),t.getUseraddr(),t.getUsertel()}); } /*修改方法*/ public int update() { UserInfoModel r=new UserInfoModel(); r.setUseraddr("南京"); r.setUsername("测试"); r.setUsertel("13524698886"); r.setUserid(7); String sql="UPDATE user_info SET `user_name`=?,`user_addr`=?,`user_tel`=? WHERE user_id=?"; return executeUpdate(sql, new Object[]{r.getUsername(),r.getUseraddr(),r.getUsertel(),r.getUserid()}); } /*删除方法*/ public int delete() { UserInfoModel e=new UserInfoModel(); String sql="DELETE FROM `user_info` WHERE user_id=?"; e.setUserid(7); return executeUpdate(sql, new Object[]{e.getUserid()}); } }
六:在控制台 主方法 Main里面调用方法:
package Test; import Test.Common; public class Main { public static void main(String[] args) {
UserInfoDao dao=new UserInfoDao(); dao.search("select user_id, user_name,user_addr,user_tel from user_info"); int insert= dao.insert(); System.out.println("新增成功条数:"+insert); int update=dao.update(); System.out.println("修改成功条数:"+update); int delete =dao.delete(); System.out.println("删除成功条数:"+delete);
}
七:完毕