java基础笔记

第一部分:DB2基础知识
一、复习
jre
jdk
jvm
path
classpath
二、数据库基础-DB2
1.访问172.18.60.14/
temp
123
2.安装检查
db2cmd
db2start
3.正式安装
安装路径:
D:IBMSQLLIB
用户名:db2admin
密码:123

设置为Administrator为登录用户:
lusrmgr.msc

如果不能安装,则使用解压工具把

4.安装后检查
4.1路径检查
D:DB2,如果安装了示例数据库db2exc_974_WIN_x86.exe,解压出来后,使用:db2exc_974_WIN_x86.exedb2WindowsDB2 Express-C.msi
D:IBMSQLLIB
右下角的启动小图标,设置不自动启动
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%in这个目录 
二、测试连接 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:IBMSQLLIBjavadb2java.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,表示

把得到的编号进行显示并赋值。
原文地址:https://www.cnblogs.com/shoneworn/p/3288311.html