java基础笔记
第一部分:DB2基础知识 一、复习 jre jdk jvm path classpath 二、数据库基础-DB2 1.访问172.18.60.14/ temp 123 2.安装检查 db2cmd db2start 3.正式安装 安装路径: D:\IBM\SQLLIB 用户名:db2admin 密码:123 设置为Administrator为登录用户: lusrmgr.msc 如果不能安装,则使用解压工具把 4.安装后检查 4.1路径检查 D:\DB2,如果安装了示例数据库db2exc_974_WIN_x86.exe,解压出来后,使用:db2exc_974_WIN_x86.exe\db2\Windows\DB2 Express-C.msi D:\IBM\SQLLIB 右下角的启动小图标,设置不自动启动 4.2服务组件 services.msc control-> 4.3服务设置 为手动启动 登录为本地账户 4.4实例的相关操作 cmd db2cmd db2start 启动当前实例 db2stop 停止 当前实例 服务开发以后,其他db2客户端可以被访问机器。 db2admin start db2admin stop 三、相关windows命令操作 cmd cd cd .. cd \ 盘:切换盘符 rd mkdir del dir rename copy tree lusrmgr.msc notepad cls mspaint services.msc regedit path control type exit help 四、数据库db2使用 system->instacne->database->tablspace->tables,index,views,trrigers,schema (一)实例创建 1.查看实例 dbilist 2.创建实例 db2icrt instacne_name db2icrt erp 3.设置当前使用实例 set DB2INSTANCE=erp 4.删除实例 db2idrop instacne_name db2idrop erp (二)、创建示例数据库 db2fs 启动菜单找到"第一步" db2sampl.exe (三)、如何连接数据库 先查看有哪些数据库: db2 list db directory 连接数据库: db2 connect to sample user db2admin using 123 或 db2 connect to sample,默认以登录的用户名与密码 (四)、查看数据库某模式下的数据表 db2 list tables for schema administrator (五)、断开数据库连接 db2 terminate 不存在连接时,不会报错 db2 connect reset 不存在连接时,会报错 (六)、创建自己新的数据库 db2 create database njdvlp 或 db2 create database njdvlp on d: 创建后面练习使用数据库: db2 create database mydb 连接数据库: db2 connect to mydb user db2admin using 123 其他图形化的方式创建,访问数据库 db2ca:配置助手 推荐第三方连接工具: QuestCentral (七)、使用db2ca配置连接远程数据库 主机名:172.18.60.69 服务名称:空 端口号:50000 数据库名称:idbnj 数据库别名:erptest 操作系统:AIX 服务器认证 测试连接的用户标识和密码:javauser (八)、连接远程数据库 db2 connect to erptest user db2admin using 123 五、模式的相关操作 schema: 1.查看模式 db2 connect to mydb db2 select schemaname,owner from syscat.schemata 2.创建模式schema: 显示创建: db2 create schema schema_name 隐式创建: db2 create talbe dbnew.tblUser(intId int) 删除模式: db2 drop schema dbnew restrict E:\2013>db2 drop schema dbnew restrict DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在 SQL 处理期间,它返回: SQL0478N 不能对对象类型 "SCHEMA" 执行 DROP、ALTER、TRANSFER OWNERSHIP 或 REVOKE,因为它有一个类型为 "TABLE" 的从属对象 "DBNEW.TBLUSER"。 SQLSTATE=42893 db2 drop table dbnew.tbluser 六、数据库语句操作 1.操作的步骤 db2start启动实例 db2 connect to mydb user dbadmin using 123 连接操作数据库 db2 create table_name创建表 db2 select * from table_name 查询语句 db2 insert into table_name values() 插入记录 db2 update table_name set xxfield=valuesss 更新记录 db2 delete from table_name 删除记录 2.如何使用帮助 db2 ? 列出所有命名 db2 ? list db2 ? options 3.创建数据表 create table db.tblUser ( intId int not null primary key, strSn varchar(10) not null, strName varchar(50) not null, intAge int default 18 ) 设置其他语句终止符: db2 -td@ 作业: 1.复习数据库安装及相关操作 实例 数据库 连接本地,远程 模式相关操作 命令帮助 2.预习 select ,insert ,upate ,delete等语句 3.预习jdbc编程,尝试访问连接db2 2013-08-26 四、数据表相关操作 4.1创建表 年级表: intId 主键 strSn 编号 strName 名称 create table db.tblGrade ( intId int generated by default as identity primary key, strSn varchar(20) not null, strName varchar(50) not null )@ insert into db.tblGrade(strSn,strName) values('001','一年级')@ insert into db.tblGrade(strSn,strName) values('002','二年级')@ insert into db.tblGrade(strSn,strName) values('003','三年级')@ insert into db.tblGrade(strSn,strName) values('004','四年级')@ insert into db.tblGrade(strSn,strName) values('005','五年级')@ 学生表:db.tblStudent intId 主键 strSn 编号 strName 姓名 intAge 年龄 strSex 性别(T:男,F:女) gradeId 所属年级 create table db.tblStudent ( intId int generated by default as identity primary key, strSn varchar(20) not null, strName varchar(50) not null, intAge int default 18, strSex char(1), gradeId int )@ insert into db.tblStudent(strSn,strName,intAge,strSex,gradeId) values('101','张三',10,'T',4)@ insert into db.tblStudent(strSn,strName,intAge,strSex,gradeId) values('102','李四',11,'F',5)@ insert into db.tblStudent(strSn,strName,intAge,strSex,gradeId) values('103','王五',12,'T',3)@ insert into db.tblStudent(strSn,strName,intAge,strSex,gradeId) values('104','冯六',13,'F',2)@ 课程表:db.tblClass intId 主键 strSn 编号 strName 课程名称 bookName 教材名称 create table db.tblClass ( intId int generated by default as identity primary key, strSn varchar(20) not null, strName varchar(50) not null, bookName varchar(50) )@ insert into db.tblClass(strSn,strName,bookName) values('201','Java基础','Java大学简明教程')@ insert into db.tblClass(strSn,strName,bookName) values('301','数据库基础','DB2教程')@ insert into db.tblClass(strSn,strName,bookName) values('401','Java Web 基础','Tomcat&JSP深入浅出')@ 成绩表:db.tblScore intId 主键 studentId 学生id courseId 课程id bdNum 分数 create table db.tblScore ( intId int generated by default as identity primary key, studentId int not null, courseId int not null, bdNum float )@ insert into db.tblScore(studentId,courseId,bdNum) values(1,1,80)@ insert into db.tblScore(studentId,courseId,bdNum) values(1,2,90)@ insert into db.tblScore(studentId,courseId,bdNum) values(1,3,85)@ insert into db.tblScore(studentId,courseId,bdNum) values(2,1,88)@ insert into db.tblScore(studentId,courseId,bdNum) values(2,2,92)@ insert into db.tblScore(studentId,courseId,bdNum) values(2,3,86)@ insert into db.tblScore(studentId,courseId,bdNum) values(3,1,70)@ insert into db.tblScore(studentId,courseId,bdNum) values(3,2,50)@ insert into db.tblScore(studentId,courseId,bdNum) values(3,3,65)@ 4.2更改授权 如何更改授权: db2 connect to mydb db2 grant dbadm on database to user db2admin 4.3 查看表结构 describe table db.tblStudent@ describe table db.tblStudent show detail@ 4.4删除表 create table db.tblDemo(intId int)@ drop table db.tblDemo@ 4.5插入数据 insert into table_Name values(value1,value2) insert into table_Name(col1,col2) values(value1,value2) 4.6修改记录 update table_name set col1=value1 where col2=value 把所有学生的分数减去2: update db.tblScore set bdNum=bdNum-2 4.7删除记录 删除针对整行记录,不能删除某个列 insert into db.tblGrade(strSn,strName) values('108','八年级')@ select * from db.tblGrade@ delete from db.tblGrade where strSn='108'@ 修改数据,删除数据都要小心,删除之前,先select 查看一下,你的条件作用的范围, 是否是你要修改或删除的范围。 4.8查询记录 4.8.1:select * from db.tblGrade@ 查询所有列,所有 数据 4.8.2:select strName from db.tblGrade@ 查询部分列或特定列,所有数据 4.8.3:select strName from db.tblGrade where strSn='001'@ 查询部分列,部分数据 4.8.4:where 后面条件可以有:>,<,=,<>,in,not in ,between and ,and ,or,like like包括'%XX%'或'?XX',?号代表一个字符,%代表任意多个字符 4.8.5:排序 asc:升序,desc:降序, select * from db.tblGrade order by strSn desc@ 4.8.6:聚合函数 sum,max,min,count,avg select max(intAge) from db.tblStudent @ 需要查出年龄最大的学生记录。 select * from db.tblStudent where intAge in(select max(intage) from db.tblStudent)@ 4.8.7:子查询 条件里面还有一个查询 4.8.8:数字函数 abs,ceil(),floor,rand(), 4.8.9:联合查询,union 查询出性别为'T'的学生 select strSn,strName from db.tblStudent where strSex='T'@ 查询出性别为'F'的学生 select strSn,strName from db.tblStudent where strSex='F'@ 使用union进行联合出一个结果集: select strSn,strName from db.tblStudent where strSex='T' union select strSn,strName from db.tblStudent where strSex='F'@ 分类汇总,可以采用此种把不同类汇总进行联合输出。 把年级编号,年级名称中的记录与学生中的编号,与姓名进行联合输出. select strSn,strName from db.tblGrade union select strSex,strName from db.tblStudent 符合联合的三个要求: 1.列的个数要相等 2.列的类型要一致 3.列的名称要一致,如果不一致,可以采用as进行转换 4.8.10分组group by 把相同类型进行分组汇总: 按性别进行统计学生个数, select strSex,count(*) from db.tblStudent group by strSex@ 出现在查询中的列,必须为group by后面的列或聚合倒数列,但是出现在group by 后面的列,可以不出现在查询结果列中。 select count(*) from db.tblStudent group by strSex@ 4.8.11:having 是指在分组group by 以后相关进行过滤。 在学生表中插入一条记录,为了性别不同的个数不一样: insert into db.tblStudent(strSn,strName,intAge,strSex,gradeId) values('106','吴七',13,'F',2)@ select strSex,count(*) from db.tblStudent group by strSex having count(*) >2 @ 4.8.12:where,group by ,having,order by 等几种关系 where >group by >having >order by select strSex,count(*) from db.tblStudent where intId>1 group by strSex having count(*)=3 order by strSex 4.9多表查询 查询出学生记录中所在年级的中文名称. select strName,gradeId from db.tblStudent@ select db.tblstudent.strName studentname,db.tblGrade.strname gradename from db.tblstudent,db.tblgrade where db.tblstudent.gradeid=db.tblgrade.intid@ 表的别名: select s.strName,g.strName from db.tblStudent s,db.tblGrade g where s.gradeId=g.intId 列的别名: select s.strName as 学生姓名,g.strName as 年级名称 from db.tblStudent s,db.tblGrade g where s.gradeId=g.intId 4.9.1内连接,inner join select s.strName,g.strName from db.tblStudent s inner join db.tblGrade g on s.gradeId=g.intId 外连接:左连接,右连接,全连接 4.9.2左连接 left join on 查询年级表没有没有学生的记录。 select g.strName,s.strName from db.tblGrade g left join db.tblStudent s on g.intId=s.gradeId 4.9.3右连接:right join on 查询年级表没有没有学生的记录。 select g.strName,s.strName from db.tblGrade g right join db.tblStudent s on g.intId=s.gradeId 下面的SQL语句实现功能与上述4.9.2左连接一致。 select g.strName,s.strName from db.tblStudent s right join db.tblGrade g on g.intId=s.gradeId 4.9.4全连接:full outer join on 在学生表插入一个没有对应年级的学生记录 insert into db.tblStudent(strSn,strName,intAge,strSex,gradeId) values('109','蔡八',11,'F',20)@ select g.strName,s.strName from db.tblStudent s full outer join db.tblGrade g on g.intId=s.gradeId 六、数据库备份与恢复 (一)、单表: e: mkdir tmp cd tmp db2cmd 导出:export 1.命令行方式导出 db2 export to student.xls of del messages msg.txt select * from db.tblStudnet 2.采用gui方式 导出 db2cc 导入:import db2 import from student.xls of del messages msgImport.txt insert into db.tblstudent 采用gui方式 导入 db2cc (二)、整库的导入与导出 db2move: e: cd 2013 mkdir mydb cd mydb db2move export导出: db2move mydb export -u db2admin -p 123 -sn db sn:选项后面为模式名:db db2move mydb export -u db2admin -p 123 -sn db -aw aw:如果没有指定aw,那么产生的警告的表将不会出现在db2move.lst db2move import 导入: create database mydbnew db2move mydbnew import -u db2admin -p 123 作业: 1.完成课堂上讲课练习 2.完成如下查询: 2.1求每一个班有多少个学生?显示如下列名及字段:年级名称,人数 select g.strName,count(s.intId) from db.tblGrade g left join db.tblStudent s on s.gradeId=g.intId group by g.strName 2.2课程平均分大于86的记录?显示如下列名与字段:课程名称,教材名称,平均分 select c.strname,c.bookname,avg(s.dbnum) from db.tblClass c inner join db.tblScore s on c.intid=s.courseid group by c.strname,c.bookname having avg(s.dbnum)>86 2.3显示学生表中所有字段,字段列名为中文名称。 2.4显示学生表与年级表中如下字段:学生姓名,学生编号,年级名称 2.5显示学生表中如下字段:性别,人数 3.复习java基础中面向对象开发的概念:class,interfacel,extends,implements,override,overload 4.预习jdbc编程部分,包括: 4.1jdbc连接的几种类型 4.2jdbc常用接口所在包名 4.3尝试使用jdbc技术把今天学生表中db.tblStudent中的记录显示出来。 一般不建议使用多个表查询时,使用where 一般使用连接:比如inner join select a.intId,a.strName,b.strName from db.tblA a inner join db.tblB b on a.intId=b.intId inner join db.tblC c on b.intId=c.intId inner join db.tblD d on a.gradeId=d.intId where a.intId>100 2013-08-27 复习: cmd db2cmd e: cd 2013 db2 start 启动数据库实例 db2 list db directory 查看此实例下面的数据库 db2 connect to mydb user db2admin using 123 连接到要访问操作的数据库 db2 list tables schema for db 查看模式db下面的所有表 db2 -td@ 进入交互式db2操作控制台 --说明自增可分为:always和default,如果always,则不能手工指定值,如果是default可以手工指定值。 create table db.tblDemo( intId int generated by default as identity primary key, strName varchar(50) not null, strAddress varchar(100), intAge int default 18 )@ create table db.tblDemoNew( intId int generated always as identity primary key, strName varchar(50) not null, strAddress varchar(100), intAge int default 18 )@ insert into db.tblDemo values(100, '张三','南京大厂',20)@ insert into db.tblDemo(strName,strAddress,intAge) values( '李四','南京江宁',28)@ insert into db.tblDemo(strName,strAddress) values( '王五','北京长城')@ 显示一下当前所有的记录 select * from db.tblDemo 更新把李四的年龄减少一岁 update db.tblDemo set intAge=intAge-1 where strName='李四'@ 显示一下当前所有的记录,查看是否已更新 select * from db.tblDemo 删除年龄大于30的记录 delete from db.tblDemo where intAge>30 @ 显示一下当前所有的记录,查看是否已删除 select * from db.tblDemo 退出交互式db2操作控制台 quit@ 第二部分:Jdbc编程技术 数据持久层技术: 1.jdbc 2.jdbcTemplate,DBUtils 3.mybatis(ibatis) orm半自动化技术,把sql语句写入一个xml配置文件中进行统一管理,也是对数据库访问封装。 4.hibernate orm 5.jpa 6.spring data jpa TWP:mybatis+spring data jpa 一、准备环境 准备目录 e: cd 2013 mkdir javaTest cd javaTest 检查java环境: java javac JAVA_HOME(使用set命令检查是否有JAVA_HOME 目录) 检查是否可正常执行java程序 set JAVA_HOME= path里面是否有%JAVA_HOME%\bin这个目录 二、测试连接 DB2 1.建立一个Java类,JdbcTest.java: notepad++ JdctTest.java public class JdbcTest{ public static void main(String[] args){ System.out.println("JdbcTest in here!"); } } javac JdbcTest.java java JdbcTest 2.连接数据库的步骤: 2.1.加载驱动 Class.forName(""); 2.2.得到连接 con DriverManager.getConnection("","",""); 2.3.生成Statement stmt con.creasteStatement(); 2.3.1此处也可以使用预处理sql, PreparedStatement 2.4.得到结果集ResultSet rst stmt.executeQuery(strSQL); 2.5.执行insert ,update, delete等数据更新操作采用 stmt.executeUpdate(strSQL); 2.6.返回结果集的处理使用 while(rst.next()){ rst.getString(1)或rst.getString("列名"); } 2.7.关闭结果集,关闭statment,关闭连接con rst.close() stmt.close(); con.close(); 3.实现数据库连接 Class.forName(""); DriverManager.getConnection("jdbc:db2:mydb","db2admin","123"); 4.显示数据 while(rst.next()) { rst.getString(1)或rst.getString("strSn"); } 5.插入数据,两种使用 5.1使用Statment con.createStatement(); stmt.executeUpdate(strSQL); 5.2使用PreparedStatment con.prepareStatement(strSQL); pstmt.setString(1,"ddd"); ... pstmt.executeUpdate() 6.修改数据 7.删除数据 三、事务控制 con.setAutoCommit(false);//默认为true con.commit();//提交事务 con.rollback();//回滚事务 try{ con.setAutoCommmit(false); insert into db.tblOrder//插入主档 insert into db.tblOrderItem //插入明细档 con.commit(); }catch(SQLException sqle){ con.rollback(); } 第三部分:综合练习 采用面向对象思想,使用jdbc技术,实现用户资料管理的 (实体类名:UserVO,数据表:db.tblUser, 字段列表如下: intId int generated by default as identity , //主键 strSn varchar(10) not null //用户编号 strName varchar(50) not null //用户姓名 strAddress varchar(100) //家庭地址 strSex char(1) //性别:T:男,F:女 intAge int default 18 //年龄,默认18 bdSalary decimal(7,2) default 1800 //工资 ) 实现用户资料的添加,更新,删除(按用户id),查询(按用户编号或姓名查询)的模块开发,用户数据存储至数据库或文件中,可通过配置选项进行设置; CRUD: 1.MVC模式 Model:模型层,一般为javabean,符合一定规范的java class,一个是必须默认构造函数,set,get方法符合要求实现属性的封装与访问。 UserVO.java View:显示层可以使用jsp,html等来显示,此处使用console,控制台 Control:控制层,在java web传统采用servlet,一般不是webwork2,springmvc,struct2等基本都是对servlet进行了封装,便于实现 控制层,我们这里采用普通的java class. 2.DAO模式 Data Acess Object(DAO) 访问接口: add() update() delete() query() 比如:UserDao 那实现为:UserDaoImpl 3.分析需要做什么?实现crud 添加:根据用户输入的资料添加用户信息 更新:根据输入的资料更新用户信息,如果没有输入信息,则以原数据为准。 删除:先列出所有记录,根据记录中Id来输入,并删除输入的id的数据. 查询:输入用户工号或用户姓名查询符合条件的所有用户资料。 4.如何去设计呢? 采用MVC和DAO模式相结合,三层架构模式 Model:UserVO View:控制台输出 Control:普通的java class 5.如何实现相关功能 5.1先规划项目的目录 存储结构 规划一个项目物理目录结构: 建立一个项目文件夹,叫:MyUserPrj doc bin main src model view control dao service config lib 规划逻辑上面的结构:包括如何命名包? com.nisco.user.model com.nisco.user.view com.nisco.user.control com.nisco.user.dao com.nisco.user.service 准备各个目录下初始文件: lib,增加db2的java jar包 复制:D:\IBM\SQLLIB\java\db2java.zip 并把db2java.zip改名为:db2java.jar 6.把需要的数据库表结构创建出来 db2start db2cmd db2 -td@ connect to mydb user db2admin using 123@ drop table db.tblUser@ create table db.tblUser ( intId int generated by default as identity , strSn varchar(10) not null , strName varchar(50) not null , strAddress varchar(100) , strSex char(1) , intAge int default 18 , bdSalary decimal(7,2) default 1800 )@ insert into db.tblUser(strSn,strName,strAddress,strSex,intAge,bdSalary) values('012169','孙安俊','南京大厂','T',18,2900)@ insert into db.tblUser(strSn,strName,strAddress,strSex,intAge,bdSalary) values('011101','祥祥','南京大厂','T',24,5200)@ select * from db.tblUser@ 7.开发创建一个DBUtil类,用于创建Connection 8.开发一个UserClient UserClient.java 9.目录 .:代表当前目录 ..:代表上一级目录 ../../:代表上上级目录。 10.实现界面交互 UserMenu.java 使用System.out.prinltn(""); 11.实现用户输入数据: 作业 完成今天上课的练习 完成综合练习中的用户资料管理中的其他功能 包括更新 删除 查询 中实现用户输入工号或姓名,按输入的条件查询结果出来 完善在新增资料室的数据其他检查项 比如:薪水必须大于1200 实现用户编号(工号strSn)以6位流水号,增加的功能 比如:数据库现在最大的工号为:012186 下一个编号:012189 在下一个编号为:012190 思路 找出数据库中tblUser表中字段strSn当前最大值 把最大值加1,则进行格式化成6为数字,前面不足6为,增加0,表示 把得到的编号进行显示并赋值。
不积跬步,无以至千里。