第1天(4课时)
创建jdbc应用
创建jdbc应用步骤分7步
1)载入jdbc驱动(指定我要连接到哪种数据库,连接不同数据库用不同驱动)
2)定义连接url(连接准备 url,端口,用户名,密码)
3)建立连接
4)创建PreparedStatement(动态) Statement(静态的)(拼sql语句)
5)执行数据库命令(crud)
6)结果的处理
7)关闭连接
浓缩
1,2连接准备---> 3 连接 ----> 4,5给数据库下指令---> 6处理结果---> 7关闭连接
连接各数据库的文档放在
E:\java16\javase\手册\JDBC—数据库的连接字符串及连接方法(各类数据库)
代码开始
建包
右键src new-package-输入com.neuedu.jdbc -ok
建类
右键包-new class-JdbcInsert.java
public class JdbcInsert {
@Test
public void insert(){
}
}
引入junit
用@Test因为没有引junit会报错,鼠标点击红色叉号,接eclipse指示引入junit
1)载入jdbc驱动(指定我要连接到哪种数据库,连接不同数据库用不同驱动)
https://www.runoob.com/w3cnote/java-class-forname.html
Class.forName("com.mysql.jdbc.Driver");
注意,要把mysql jar包引到工程里。
操作方法:工程右键-build path-configure build path-add libraries选项卡-add exteral jar -选中mysql的jar包-ok
2)定义连接url(连接准备 url,端口,用户名,密码)
String url="jdbc:mysql://localhost:3306/java16?characterEncoding=UTF-8&useUnicode=true";String user="root";String password="root";
3)建立连接
Connection conn=DriverManager.getConnection(url, user, password);
4)创建PreparedStatement(动态) Statement(静态的)(拼sql语句)
Statement st=conn.createStatement();
5)执行数据库命令(crud)
executeUpdate: 用于 insert update delete
executeQuery: 用于 select
ResultSet rs= st.executeQuery("select empno,ename,deptno from emp where deptno=10");
6)结果的处理
while(rs.next()){//双引号里是数据库里的字段名,Stringe_name=rs.getString("ename");System.out.println(e_name);intemp_no=rs.getInt("empno");System.out.println(emp_no);intdeptno=rs.getInt("deptno");System.out.println(deptno);}
7)关闭连接
rs.close();st.close();conn.close();
完整代码
@Testpublicvoidquery()throws ClassNotFoundException,SQLException{//1)载入jdbc驱动(指定我要连接到哪种数据库,连接不同数据库用不同驱动)Class.forName("com.mysql.jdbc.Driver");//2)定义连接url(连接准备 url,端口,用户名,密码)Stringurl="jdbc:mysql://localhost:3306/java16?characterEncoding=UTF-8&useUnicode=true";Stringuser="root";Stringpassword="root";//3)建立连接Connectionconn=DriverManager.getConnection(url,user,password);//4)创建PreparedStatement(动态) Statement(静态的)(拼sql语句)Statementst=conn.createStatement();//5)执行数据库命令(crud) //executeUpdate insert update delete//executeQuery select//查询10号部门的员工的员工编号,员工姓名,部门编号ResultSetrs=st.executeQuery("select empno,ename,deptno from emp where deptno=10");//6)结果的处理while(rs.next()){//双引号里是数据库里的字段名,Stringe_name=rs.getString("ename");System.out.println(e_name);intemp_no=rs.getInt("empno");System.out.println(emp_no);intdeptno=rs.getInt("deptno");System.out.println(deptno);}//7)关闭连接rs.close();st.close();conn.close();}
发现异常不显示,改造代码
@Testpublicvoidquery1(){Connectionconn=null;Statementst=null;ResultSetrs=null;try{// 1)载入jdbc驱动(指定我要连接到哪种数据库,连接不同数据库用不同驱动)Class.forName("com.mysql.jdbc.Driver");// 2)定义连接url(连接准备 url,端口,用户名,密码)Stringurl="jdbc:mysql://localhost:3306/java16?characterEncoding=UTF-8&useUnicode=true";Stringuser="root";Stringpassword="root";// 3)建立连接conn=DriverManager.getConnection(url,user,password);// 4)创建PreparedStatement(动态) Statement(静态的)(拼sql语句)st=conn.createStatement();// 5)执行数据库命令(crud)// executeUpdate insert update delete// executeQuery select// 查询10号部门的员工的员工编号,员工姓名,部门编号rs=st.executeQuery("select empno,ename,deptno from emp where deptno=10");// 6)结果的处理while(rs.next()){// 双引号里是数据库里的字段名,Stringe_name=rs.getString("ename");System.out.println(e_name);intemp_no=rs.getInt("empno");System.out.println(emp_no);intdeptno=rs.getInt("deptno");System.out.println(deptno);}}catch(Exceptione){e.printStackTrace();}finally{// 7)关闭连接try{rs.close();st.close();conn.close();}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}}
添加 修改 删除执行的是executeUpdate 返回类型为int而不是ResultSet,所以,这三种操作没有结果集
删除代码如下:
@Testpublicvoiddel(){Connection conn=null;Statement st=null;try{// 1)载入jdbc驱动(指定我要连接到哪种数据库,连接不同数据库用不同驱动)Class.forName("com.mysql.jdbc.Driver");// 2)定义连接url(连接准备 url,端口,用户名,密码)String url="jdbc:mysql://localhost:3306/java16?characterEncoding=UTF-8&useUnicode=true";String user="root";String password="root";// 3)建立连接conn=DriverManager.getConnection(url,user,password);// 4)创建PreparedStatement(动态) Statement(静态的)(拼sql语句)st=conn.createStatement();// 5)执行数据库命令(crud)// executeUpdate insert update delete// executeQuery select// 查询10号部门的员工的员工编号,员工姓名,部门编号int count=st.executeUpdate("delete from emp_back where ename='SCOTT'");System.out.println(count);}catch(Exceptione){e.printStackTrace();}finally{// 7)关闭连接try{st.close();conn.close();}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}}
作业
1)练习修改和删除
2)写添加和修改
第2天(6课时)
项目阶段(正常)
1)立项
2)需求分析(需求规格说明书)
3)概要设计(界面原型 部署模型 架构)
4)详细设计(包 类 内部接口(输入、输出) 流程图 外部接口)
5)编码(实现类)
6)测试(单元测试 集成测试 模拟现场环境做一个测试环境 性能测试)
7)部署实施(部署到生产环境)
8)上线运行
项目阶段(有时)
1)立项
2)需求分析(需求规格说明书)
3)概要设计(界面原型 部署模型 架构)
5)编码(实现类)
6)测试(单元测试 集成测试 模拟现场环境做一个测试环境 性能测试)
7)部署实施(部署到生产环境)
8)详细设计(包 类 内部接口(输入、输出) 流程图 外部接口)
9)上线运行
10)验收
用户注册
字段:用户id,用户名,密码,邮箱,权限
表名:t_*****
建表语句
/*
Navicat MySQL Data Transfer
Source Server : mysql
Source Server Version : 50553
Source Host : localhost:3306
Source Database : java16
Target Server Type: MYSQL
Target Server Version : 50553
File Encoding : 65001
Date: 2018-10-17 10:30:43
*/SET FOREIGN_KEY_CHECKS=0;--------------------------------Table structurefort_user------------------------------DROP TABLE IF EXISTS`t_user`;CREATE TABLE`t_user`(`user_id`int(11)NOT NULL AUTO_INCREMENT,`user_name`varchar(20)NOT NULL,`user_pwd`varchar(20)NOT NULL,`user_email`varchar(100)DEFAULT NULL,`user_power`int(11)NOT NULL,PRIMARY KEY(`user_id`))ENGINE=InnoDB DEFAULT CHARSET=utf8;SET FOREIGN_KEY_CHECKS=1;
实体类
publicclassUser{// 用户idprivateintid;// 登录名privateString name;// 密码privateString password;// 邮箱privateString email;// 权限 0-普通用户 1-管理员privateintpower=0;publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(String name){this.name=name;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(String password){this.password=password;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(String email){this.email=email;}publicintgetPower(){returnpower;}publicvoidsetPower(intpower){this.power=power;}}
开发主页
package com.neuedu.jdbc.menu;import java.util.Scanner;publicclassMainMenu{publicstaticvoidmain(String[]args){while(true){System.out.println("欢迎使用neusoft用户管理系统");System.out.println("======================");System.out.println("用户登录---------------1");System.out.println("用户注册---------------2");System.out.println("退出程序---------------3");Scannersc=newScanner(System.in);//接受用户输入intchoice=sc.nextInt();switch(choice){//根据用户输入,进入不同界面case1:// @todo进入用户登录界面System.out.println("用户登录");break;case2://用户注册RegMenuregMenu=newRegMenu();regMenu.show();break;case3:System.exit(0);default:System.out.println("不好意思,您输入错误!");break;}}}}
开发注册页
package com.neuedu.jdbc.menu;import java.util.Scanner;import com.neuedu.jdbc.dao.UserManagerDao;import com.neuedu.jdbc.pojo.User;publicclassRegMenu{publicvoidshow(){//业务层,中间如果有涉及数据库的,咱们调用dao(数据访问对象)类去存库//让用户输入个人信息System.out.println("用户注册界面");System.out.println("======================");Scannersc=newScanner(System.in);System.out.println("请输入您的用户名:");StringuserName=sc.next();System.out.println("请输入您的密码:");StringuserPwd=sc.next();System.out.println("请输入您的邮箱:");Stringemail=sc.next();//@todo做一些必要验证//封装好一个对象,用于调用存库方法时用Useruser=newUser();user.setEmail(email);user.setUserName(userName);user.setUserPwd(userPwd);//把个人信息存库 int 型的结果//需要调用 dao层进行存库UserManagerDaoumd=newUserManagerDao();intresult=umd.addUser(user);//根据返回结果给用户提示if(result>0){System.out.println("注册成功");}else{System.out.println("注册失败");}//回到主界面return;}}
创建实现类
packagecom.neuedu.jdbc.dao;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.SQLException;importcom.neuedu.jdbc.pojo.User;publicclassUserManagerDao{publicintaddUser(Useruser){Connectionconn=null;PreparedStatementptst=null;intresult=0;try{Class.forName("com.mysql.jdbc.Driver");Stringurl="jdbc:mysql://localhost:3306/java13?characterEncoding=UTF-8&useUnicode=true";Stringusername="root";Stringpassword="root";conn=DriverManager.getConnection(url,username,password);ptst=conn.prepareStatement("insert into t_user values(null,?,?,?,?)");ptst.setString(1,user.getUserName());ptst.setString(2,user.getUserPwd());ptst.setString(3,user.getEmail());ptst.setInt(4,user.getUserPower());result=ptst.executeUpdate();}catch(ClassNotFoundException|SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}finally{try{ptst.close();conn.close();}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}returnresult;}}
作业
练习注册功能
思考用户登录功能开发
第3天(6课时)
第一项任务:把昨天写的代码全删除,从头来一遍(3课时)
新建项目-定义实体类-写main方法-定义menu-写dao接口-写dao实现类,整个上午做完注册全流程
第二项任务:登录功能开发
登录功能
登录用户缓存
packagecom.neuedu.jdbc.menu;importcom.neuedu.jdbc.pojo.User;/**
* 虚拟缓存
* @author Administrator
*
*/publicclassLoginUser{//共享对象publicstaticUsercurrentUser;publicstaticUsergetCurrentUser(){returncurrentUser;}publicstaticvoidsetCurrentUser(UsercurrentUser){LoginUser.currentUser=currentUser;}}
LoginMenu
package com.neuedu.jdbc.menu;import java.util.Scanner;import com.neuedu.jdbc.dao.UserManagerDao;import com.neuedu.jdbc.pojo.User;publicclassLoginMenu{publicvoidshow(){System.out.println("欢迎登录界面");System.out.println("======================");Scannersc=newScanner(System.in);System.out.println("请输入您的用户名");StringuserName=sc.next();System.out.println("请输入您的密码");StringuserPwd=sc.next();//封装一个user对象Useruser=newUser();user.setUserName(userName);user.setUserPwd(userPwd);//调用dao的鉴权方法,验证用户名密码正确性UserManagerDaoumd=newUserManagerDao();//根据用户名密码查询用户UserdbUser=umd.findUserByNameAndPassword(user);//如果用户查询到了,进一步做if(null!=dbUser){System.out.println("登录成功!");LoginUser.currentUser=dbUser;//向缓存里存一个user对象,static 的,修改成功后,把对象更新if(dbUser.getUserPower()==0){//跳转到普通用户界面UserMenuum=newUserMenu();um.show();}else{//跳转到管理员界面 学生独立完成}}else{System.out.println("没有查询到该用户");return;}}}
UserManagerDao
publicUserfindUserByNameAndPassword(User user){User db_user=null;Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;try{//加载驱动Class.forName("com.mysql.jdbc.Driver");String url="jdbc:mysql://localhost:3306/java13?characterEncoding=UTF-8&useUnicode=true";String userName="root";String password="root";//获取连接conn=DriverManager.getConnection(url,userName,password);//新建查询,预处理语句//根据用户名和密码查询用户ps=conn.prepareStatement("select * from t_user where user_name=? and user_pwd=?");ps.setString(1,user.getUserName());ps.setString(2,user.getUserPwd());//查询要返回结果集rs=ps.executeQuery();//对结果集进行处理 如果确认返回结果是一行用if,如果是多条,用whileif(rs.next()){//?db_user=newUser();db_user.setId(rs.getInt("user_id"));db_user.setUserName(rs.getString("user_name"));db_user.setUserPwd(rs.getString("user_pwd"));db_user.setEmail(rs.getString("user_email"));db_user.setUserPower(rs.getInt("user_power"));}}catch(ClassNotFoundException|SQLException e){// TODO Auto-generated catch blocke.printStackTrace();}finally{try{rs.close();ps.close();conn.close();}catch(SQLException e){// TODO Auto-generated catch blocke.printStackTrace();}}// TODO Auto-generated method stubreturndb_user;}
UserMenu
package com.neuedu.jdbc.menu;import java.util.Scanner;import com.neuedu.jdbc.pojo.User;publicclassUserMenu{//四种//无参无返回值的 public void methodName();//无参有返回值的public String methodName();//有参无返回值的 public void methodName(String username,String password);// public void methodName(User);//有参有返回值的 public void methodName(String username,String password);//返回权限修饰符 返回值类型 方法名(参数列表)//这个方法可以接受参数类型为User的,返回为void的,方法名为show()publicvoidshow(){while(true){System.out.println(LoginUser.currentUser.getUserName()+"您好:"+"您的权限是普通用户");System.out.println("=========================");System.out.println("修改个人信息---------------1");System.out.println("查询个人信息---------------2");System.out.println("退出程序------------------3");Scannersc=newScanner(System.in);//接受用户输入intchoice=sc.nextInt();switch(choice){case1:System.out.println("修改自己的信息");UpdateUserMenuupdateMenu=newUpdateUserMenu();updateMenu.show();break;case2://查询个人信息System.out.println(LoginUser.currentUser.getId()+" "+LoginUser.currentUser.getUserName()+" "+LoginUser.currentUser.getUserPwd()+" "+LoginUser.currentUser.getEmail()+"普通用户");break;case3:System.exit(0);break;default:System.out.println("选项错误!");break;}}}}
UpdateUserMenu
package com.neuedu.jdbc.menu;importjava.util.Scanner;importcom.neuedu.jdbc.dao.UserManagerDao;importcom.neuedu.jdbc.pojo.User;publicclassUpdateUserMenu{publicvoidshow(){//从缓存中获取当前用户信息Userold_user=LoginUser.currentUser;System.out.println("您现在的信息是"+old_user.getId()+old_user.getUserName()+old_user.getUserPower()+old_user.getEmail());System.out.println("================");Scannersc=newScanner(System.in);System.out.println("请输入要修改的姓名");Stringnew_Name=sc.next();System.out.println("请输入要修改的密码");Stringnew_Pwd=sc.next();System.out.println("请输入要修改的邮箱");Stringnew_email=sc.next();Usernew_user=newUser();new_user.setId(old_user.getId());new_user.setEmail(new_email);new_user.setUserName(new_Name);new_user.setUserPwd(new_Pwd);//给dao传过去,入库去UserManagerDaoupDate=newUserManagerDao();//添加,修改,删除都返回intintcount=upDate.updateUser(new_user);if(count>0){System.out.println("修改成功");//更新组成存的用户信息LoginUser.currentUser=new_user;}else{System.out.println("修改失败");}}}
MainMenu
......
case 1:
//用户登录
LoginMenu loginMenu=new LoginMenu();
loginMenu.show();
break;
......
修改用户信息关键代码
public intupdateUser(User new_user){Connection conn=null;PreparedStatement ps=null;int result=0;try{Class.forName("com.mysql.jdbc.Driver");String url="jdbc:mysql://localhost:3306/java13?characterEncoding=UTF-8&useUnicode=true";String userName="root";String password="root";conn=DriverManager.getConnection(url,userName,password);ps=conn.prepareStatement("update t_user set user_name=?,user_pwd=?,user_email=? where user_id=? ");ps.setString(1,new_user.getUserName());ps.setString(2,new_user.getUserPwd());ps.setString(3,new_user.getEmail());ps.setInt(4,new_user.getId());//返回条数result=ps.executeUpdate();}catch(ClassNotFoundException|SQLException e){// TODO Auto-generated catch blocke.printStackTrace();}finally{try{ps.close();conn.close();}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}returnresult;}
第四天
制作数据库工具类
第一步:建包
new -package-com.neuedu.utils
制作数据库工具类
第一步:建包
new -package-com.neuedu.utils
publicclassDBUtil{// 用于数据库连接的方法publicstaticConnectiongetConnection(){Connectionconn=null;try{Class.forName("com.mysql.jdbc.Driver");Stringurl="jdbc:mysql://localhost:3306/java16?characterEncoding=UTF-8&useUnicode=true";StringUserName="root";Stringpassword="root";conn=DriverManager.getConnection(url,UserName,password);}catch(Exceptione){e.printStackTrace();System.out.println("数据库连接异常"+e.getMessage());}returnconn;}publicstaticvoidcloseConnection(ResultSetrs,Statementst,Connectionconn){try{if(rs!=null){rs.close();}if(st!=null){st.close();}if(conn!=null){conn.close();}}catch(SQLExceptione){e.printStackTrace();System.out.println("关闭连接异常"+e.getMessage());}}}
引入db.propertis
driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/java16?characterEncoding=UTF-8&useUnicode=trueuserName=rootpassWord=root
完整代码
packagecom.neuedu.utils;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.Properties;publicclassDBUtil{// 用于数据库连接的方法publicstaticConnectiongetConnection(){Connection conn=null;try{//载入资源文件Properties prop=newProperties();prop.load(DBUtil.class.getResourceAsStream("/db.properties"));//读取资源文件各属性String driver=prop.getProperty("driver");String url=prop.getProperty("url");String UserName=prop.getProperty("userName");String password=prop.getProperty("passWord");Class.forName(driver);conn=DriverManager.getConnection(url,UserName,password);}catch(Exception e){e.printStackTrace();System.out.println("数据库连接异常"+e.getMessage());}returnconn;}publicstaticvoidcloseConnection(ResultSet rs,Statement st,Connection conn){try{if(rs!=null){rs.close();}if(st!=null){st.close();}if(conn!=null){conn.close();}}catch(SQLException e){e.printStackTrace();System.out.println("关闭连接异常"+e.getMessage());}}}
查询所有用户关键代码
dao实现类
@OverridepublicList<User>findAll(){conn=DBUtil.getConnection();List<User>userList=newArrayList();try{st=conn.prepareStatement("select * from t_user");rs=st.executeQuery();while(rs.next()){//每次都新实例化一个对象Useruser=newUser();//把从数据库查询到的记录封装到对象里user.setId(rs.getInt("user_id"));user.setName(rs.getString("user_name"));user.setPassword(rs.getString("user_pwd"));user.setEmail(rs.getString("user_email"));user.setPower(rs.getInt("user_power"));//把对象放到list里userList.add(user);}}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}returnuserList;}
页面展示
System.out.println("查询结果");for(Useru:userlist){System.out.println(u.getId()+" "+u.getName()+" "+u.getPassword()+" "+u.getEmail()+" "+u.getPower());System.out.println("================================================");}
作业:
学生独立完成项目
转至:↓↓↓
链接:https://www.jianshu.com/p/0d1803e78d37
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。