java高阶与数据库小结

来源:互联网 发布:苹果设计软件sketch 编辑:程序博客网 时间:2024/06/01 18:46
java反射:
1:获取类的对象的三种方式:
a:Object类中的getClass()方法
b:数据类型的静态属性方式:name String类型 String.class
c:Class类中的一个方法:Class.forName("当前类的全路径名称");
2:
Method:成员方法类:
invoke(Object obj,String args):第一个参数:表示的是对象是谁
第二个参数:表示的是实际参数
3:动态代理:(理解)

java网络编程:
a:udp协议和TCP(三次握手:第一个链接通道/监听客户端连接/端口号一致:就进行连接!)协议的区别:
upd协议(发送短信:只管发送,不管你是否能接受到)
发送端:
1):创建发送端的Scoket对象:无参构造
DatagramSocket ds = new atagramSocket();
2):数据报包:
public DatagramPacket(byte[] buf,int offset,int length, InetAddress address,int port)
参数1:传入的字节数组
参数2.3:传入字节数组的一部分
参数4:返回的是ip地址对象
参数5:端口号
3):调用DatagramSocket 的发送的方法:
ds.send(dp);
4):释放资源:
谁先释放问所谓
接收端:
1):创建接收端的Scoket对象:
DatagramSocket ds = new atagramSocket(int port );传入端口号
2)创建数据包:接收发送端的数据包
DatagramPacket(byte[] buf, int length) 
byte[] bys = new byte[1024] ;
int len = bys.length;
3):接收数据
ds.receive(dp) ;
4)解析数据:
public byte[] getData()返回数据缓冲区:获取传入的实际数据
public int getLength()返回将要发送或接收到的数据的长度。 获取实际长度
获取ip地址
InnetAddress address = dp.getAddress(); 返回一个ip地址对象

b:TCP协议:打电话:建立连接通道.
客户端和服务器端的交互

客户端将通道内的流发送(写数据)到服务器端,服务器进行读取数据,给客户端反馈
客户端:
1)创建Scoket对象
Socket s = new Socket("192.168.20.1",10086);
2)写数据:将流进行封装
public OutputStream getOutputStream():返回此套接字的输出流。 
OutputStream  os = s.getOutputStream();
os.write("你好".getBytes()) ;
3)释放资源
os.close();
服务器端:
1)public ServerSocket(int port):建立连接 :ServerSocket ss = new ServerSocket(10086) ;
2)监听客户端的连接:
Socket s = ss.accept();
3):返回此套接字的输入流
InputStream is = s.getInputStreamt();
4)一次读取一个字节数字
int len = 0 ;
while((is.read())!=-1){
System.out.println("..");
}
数据库:
DDL语句:数据定义语句:create/alter/drop
DML语句:数据库操作语句:针对的是表里面的数:inset/update/delete
DQL语句:数据库查询语句:select 等等

数据库:
show databases;--->查看当前数据库中有多个数据库
创建一个新的数据库:
create database mydb_01;
表:
创建表的语法:
create table 表明(字段名1 字段类型1,....)

创建学生表
create table student(id int,name varchar(20),age int) ;

查询该表中的字段
desc student ;

修改表:
给表中增加字段:
alter table student add column gender varchar(20) ;
修改表中的字段类型
alter table student modify column gender varchar(2);
修改表中的字段名称(alter table 表名 change column 旧字段 新字段 字段类型 )
alter table student change column gender sex varhcar(2) ;
修改表的名称:重命名:renameto
alter table student rename to teacher;
对数据进行操作:
插入:insert into student(id,name,age) values(1,'张三',20);
insert into student(name ,age) values('李四',25) ;
insert into student(name,age) values(2,'王五',30) ; (前后不一致):错误
修改
update student set name = '陈六' where id = 1 ;
删除数据

delete from student ; ---->删除全表数据(还可以单个数据)
delete from 表名 where 字段='....';
truncate table :删除全表数据(只能删除全表)

truncate table可以将自增长约束重置为0
delete from不能将自增长约束重置为0

数据库中约束
默认值约束:default:给某个一字段设置默认值约束:那么这个字段不设置值,那么默认值约束起作用
非空约束:not null:给某一个字段设置非空,那么该字段的值不能为null
主键(primary key)和自增长约束(auto_increament)
唯一约束(unique)

主键:在实际的开发中给每一表设置一个主键:(id为主键):不能将有业务含义的字段设置为主键:很容出错:
重点:外键约束(foreign key):两个表或者两个以上的表(并声明级联操作方法 )
格式:CONSTRAINT employee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE
--          外键名称                     外键字段  参考   
主表:约束别人的表
副表:别别人约束的表(主键设置在副表上)
左外连接/右外链接:
from 表1
right(left) outer join 表名2
on 级联条件

重点:级联操作(CASCAD):去操作主表的时候,副表也跟着发生变化
ON UPDATE CASCADE 修改数据
ON DELETE CASCADE  删除数据

触发器:trigger:给某一表修改/插入/删除数据的时候,触发器会在日志记录表中自动的记录每一条信息!

JDBC:java连接数据库
核心API:
Driver:驱动接口
Connection接口:连接数据库
Statement接口:执行静态是的SQL(Structure Query Language:结构化查询语言)语句
PreaparedStatement接口:执行预编译的sQL语句
CallableStatement接口:执行数据库中存储过程的sql语句