Alex‘s Blog


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Android插件化入门1

发表于 2015-08-13 | 分类于 Android

Android插件化入门系列

概述

插件化涉及的东西很多,所以我们需要多个维度去学习。大概分为5个部分:预备知识、入门、进阶、系列、类库。一步一步深入了解插件的原理。

基础部分

  1. Java类加载器
类加载器(class loader)是 Java中的一个很重要的概念。
类加载器负责加载 Java 类的字节代码到 Java 虚拟机中。
本文首先详细介绍了 Java 类加载器的基本概念,包括代理模
式、加载类的具体过程和线程上下文类加载器等,接着介绍如何开
发自己的类加载器,最后介绍了类加载器在 Web 容器和 OSGi中
的应用。

test

发表于 2015-08-12

CSS基础

发表于 2014-10-02 | 分类于 Web

向前看,迎着困难与嘲笑

一,引用

二,选择器

2.1 类选择器
2.2 id选择器
2.3 标签选择器
2.4 后台选择器

三,CSS的继承性和迭代性

Html基础

发表于 2014-10-01 | 分类于 Web

向前看,迎着困难与嘲笑

一,HTML概述

  • HTML超文本标记语言: 除了

    HTML:本质是表达文本语义
    CSS :负责描述页面的样式
    js  :负责描述页面的动态效果的
    

二,HTML骨架

2.0 如下图所示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="Keywords" content="网易,邮箱" />
    <meta name="Description" content="网易是中国领先的互联网技术公司,为用户提供免费邮箱" />
    <title>Title</title>
</head>
<body>

</body>
</html>
2.1 HTML文档声明头
<!DOCTYPE ....
文档声明:此标签告诉浏览器使用了哪种的规范(html,xhtml等)
2.2 HTML字符集
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
2.3 HTML关键字和搜索页面
<meta name="Keywords" content="网易,邮箱" />
<meta name="Description" content="网易是中国领先的互联网技术公司,为用户提供免费邮箱" />

三,标签

3.1 p标签
p是一个文本标签,只能放文字,图片,表单元素
3.2 img标签
<img src="图片路径" alt="图片加载失败后的描述"/>
3.3 a标签
<a href="地址" title="" target="">文本描述</a>
3.4 列表
<ul>
    <li></li>
</ul>

<ol>
    <li></li>
</ol>

<dl>
    <dt></dt>
    <dd></dd>
</dl>
3.5 div和span
div 标签是一个容器及标签 什么都可以放,甚至可以放div自己
span 里面只能放置文字,图片,表单元素

给自己一个小目标

发表于 2014-10-01 | 分类于 目标

向前看,迎着困难与嘲笑

Android插件化和组件化的开发

前端技术的学习

混合式开发的接触

MySQL (3)

发表于 2014-08-13 | 分类于 MySQL

SQL语句基础

####

MySQL (2)

发表于 2014-08-13 | 分类于 MySQL

约束:规定数据库表中的数据应该如何存在

主键约束

关键字:primary key
主键:被约束的字段,内容不能重复,不能为null
声明方式:
  1. 声明字段时,添加约束

    create table primarykey01(
        id varchar(32) primary key,                     #只能有一个字段是主键
        content varchar(50)
    );
    
  1. 声明字段之后,在约束区域添加主键

    create table primarykey02(
        id varchar(32),
        content varchar(50),
        constraint primary key (id)            # 可以将多个字段组合在一起,形成联合主键 primary key (字段1,字段2)
    );
    * 联合主键 :多个字段组合不重复
        u001 c001  100
        u001 c002  200
    
  2. 创建表之后,修改表结构添加主键

    create table primarykey03(
        id varchar(32),
        content varchar(50)
    );
    # 修改表结构
    alter table primarykey03 add constraint primary key (id);
    
  3. 测试数据

    insert into primarykey03(id) values('u001');        #录入,content=null
    insert into primarykey03(content) values('xxx');    #录入,id='' 空字符串
    insert into primarykey03(content) values('xxx');    #错误
        * 提示:ERROR 1062 (23000): Duplicate entry '' for key 'PRIMARY' # 重复
    

唯一约束

关键字:unique
唯一约束:被约束的字段不能重复
声明方式:
  1. 声明字段时,添加约束

    create table unique01(
        id varchar(32) unique,
        content varchar(50)
    );
    
  2. 声明字段之后,在约束区域添加主键

    create table unique02(
        id varchar(32),
        content varchar(50),
        constraint unique (id)    
    );
    
  3. 创建表之后,修改表结构添加主键

    create table unique03(
        id varchar(32),
        content varchar(50)
    );
    # 修改表结构
    alter table unique03 add constraint unique (id);
    
  4. 测试:

    insert into unique03(content) values('xxx');    #录入,id=null
    insert into unique03(content) values('xxx');    #录入,id=null,重复不包含null
    
    insert into unique03(id) values('u001');        #录入
    insert into unique03(id) values('u001');        #错误,id重复
        * 提示:ERROR 1062 (23000): Duplicate entry 'u001' for key 'id'
    

非空约束

关键字:not null
非空:被约束的字段内容不能为null
  1. 声明:

    * 在定义字段时,声明字段为非空
        create table notnull01(
            id varchar(32) not null,
            content varchar(50)
        );
    
  2. 测试:

    insert into notnull01(content) values('xxx');    #错误,
        * 提示:ERROR 1364 (HY000): Field 'id' doesn't have a default value
    insert into notnull01(id,content) values('n001','xxx');
    
  3. 总结:主键 = 唯一 + 非空

mysql 特有的字段,自动增长列

关键字: auto_increment
自动增长列: 被修饰的字段可以进行自动累加,每次录入一条数据自动加1
要求:
  1. 必须是整形
  2. 必须是键(一般是主键)
  3. 举个例子:

    create table auto(id int primary key auto_increment,content varchar(50));
    
  4. 关于删除

    delete from auto;  #删除表中数据,但是不能重置自动增长列的记录数;
    truncate table auto; # 删除表中数据,并且重置自动增长数列
    

外键约束

关键字 : foreign key

多表操作

表的关系
  1. 一对多,多对一
    • 实例:
      • 国家(1) – 城市(*)
      • 学生(1) – 书籍(*)
    • 主键外键描述关系
      • alter table 从表 add constraint foreign key(从表外键) refrences 主表(主表主键);
  2. 多对多

    • 实例
      • 用户() – 角色()
    • 分析
      • 将多对多 分解成两个一对多
      • 需要中间表,其实就是两张表的从表
  3. 一对一

    • 主表的主键,与从表的外键(唯一),形成主外键的关系
    • 主表的主键,与从表的主键,形成主外键关系
一对多,多对一
  1. 主表 主键

    create table t_student(id varchar(32) primary key,name varchar(50),age int);
    
  2. 从表 外键

    create table t_book(id varchar(32),title varchar(100),price double(5,2),student_id varchar(32));
    
  3. 用主键外键关系描述出一对多关系

    alert table t_book add constraint foreign key (student_id) references t_student (id);
    
  4. 一些操作

    1. 录入数据

      insert into t_book(id,title,price) values('b001','java web',100);#录入:外键的值可以为null
      insert into t_book(id,title,price,student_id) values('b001','java web',100,'s001'); #错误,s001在主表中不存在
      
      insert into t_student(id,name,age) values('s001','jack',20); #录入
      insert into t_book(id,title,price,student_id) values('b002','android',998,'s001'); #录入
      delete from t_student where id = 's001'; #错误,从表中使用s001数据
      
      insert into t_student(id,name,age) values('s002','rose',23);#录入
      delete from t_student where id = 's002';#删除
      
多对多的表
  1. 创建主表 – 学生表

    1
    create table m_student(id varchar(32) primary key,name varchar(50),age int);
  2. 创建从表 – 课程表

    1
    create table m_course(id varchar(32) primary key,content varchar(50),teacher varchar(20));
  3. 创建中间表 –两个外键

    1
    create table m_student_course(student_id varchar(32),course_id varchar(32));
  4. 中间表与学生表 主外键关系

    1
    alter table m_student_course add constraint foreign key (student_id) refrenses m_student (id);
  5. 中间表与课程表 主外键关系

    1
    alter table m_student_course add constraint foreign key(course_id) references m_course (id);
  6. 中间表 生成联合主键

    1
    alter table m_student_course add constraint primary key (student_id,course_id);
连接查询
  1. 笛卡尔积(多个表的乘积)

    select * from table1,table2;
    
  2. 隐式内连接

    1
    select * from t_book,t_student on t_student.id=t_book.student_id;
  1. 内连接

    1
    2
    select ... from 表1 inner join 表2 on 条件;
    select * from t_book inner join t_student on t_student.id=t_book.student_id;
  1. 左外连接

    1
    2
    3
    4
    #格式:select ... from 表1 lefter outer join 表2 on 条件;
    #查询表1所有的数据,表2内容是否显示,取决于on条件
    #实例:统计书籍的借阅情况
    select * from t_book left outer join t_student on t_student.id=t_book.student_id;
  1. 右外连接(和左外连接正好相反)
一对一的关系
  1. 主表的主键,与从表的外键(唯一),形成主外键的关系

    1
    2
    3
    create table company(id varchar(32) primary key,name varchar(50));
    create table address(id varchar(32),addr varchar(50),company_id varchar(32) unique);
    alter table address add constraint foreign key(company_id) refrences company(id);
  2. 主表的主键,与从表的主键,形成主外键关系

MySQL (1)

发表于 2014-08-12 | 分类于 MySQL

一,SQL语句基础

  1. 语法要求
    • 所有内容都需要使用英文符号
    • 每一个语句必须使用;结尾
  • SQL (structured query language)
  • SQL 是操作和检索关系型数据库的标准语言(CURD)
  • SQL分类

    • DDL ,Data Definition Language,数据定义语言 定义结构

      关键字: create drop alter
      
    • DML ,Data Manipulation Language,数据操作语言

      关键字:insert update delete
      
    • DQL ,Data queries Language,数据查询语言,查询(检索)

      关键字:select
      
    • DTL ,Data Trasaction Language ,事务处理语言

      关键字: transaction commit rollback
      
    • DCL ,Data Control Language,数据控制语言,权限

      关键字: 授权grant ,回收revoke
      

二, DDL 数据定义语言

  1. 数据库

    创建: create database [IF NOT EXISTS] 数据库名称 [Character set 字符集名称];
    删除: drop database 数据库名称;
    修改: alert database 数据库名称 character set 字符集名称;
    
  2. 表

    • 创建: create table 表名称(字段描述1,字段描述2,…);

      字段描述: 字段名称 字段类型
          字段名称: 自定义
          字段类型:
              (1)字符串string:
                 char(n) :固定字符串
                 varchar(n): 可变字符串【】
              (2)数字Number
                 mysql类型       Java中类型
                  bit            boolean
                  tinyint        byte
                  smallint       short
                  int            int【】
                  bigint              long
                  double(m,d)     double
                  decimal         number
              (3)日期时间
                  date  
                  time
                  datetime
                  timestamp
               (4)大数据
                 字节:  blob     64k
                        longblog 4g    
                 字符:
                             text     64k
                             longtext 4g
           例如: create table user(
              int varchar(32), 
              name varchar(50),
              age int
              );
      
    • 删除:

      drop table [IF EXISTS] 表名;
      
    • 修改:

      alter table 表名 rename to 新表名;
      
  3. 字段

    • 添加字段

      alter table 表名 add column 字段描述; 
      例如: alter table users add column name int;
      
    • 删除字段:

      alter table 表名 drop [column] 字段名称;
      
    • 修改字段:

      alter table 表名 change [column] old字段名称 new字段描述;
      

三,DML-数据操纵语言(数据)

3.1 插入数据 insert
  1. 格式

    格式1: insert into 表名 values(值1,值2,...);
    格式2: insert into 表明(字段名称1,字段名称2,...) values(值1,值2,...);
    
3.2更新数据
  1. update 表名 set 字段1=值,字段2=值…;

    例如: update users set age=35;
    
  2. update 表名 set 字段1=值,字段2=值… where条件

    条件的格式: 字段 运算符 值     例如:id='u01'
    例如:update users set age=35 where id=2;
    
3.3 删除数据
  1. delete from 表名 where 条件;

    例如: delete from users where id>1;
    

四,DQL – Data queries Language,数据查询语言,查询(检索)

4.1 没有条件查询
  1. 查询所有

    select * from users;
    
  2. 查询部分信息

    select id,firstname,secondname from users;
    
  3. 查询用户编号、姓名,及格(与60分差)

    select id,firstname,secondname, count-60 from users;
    select id,concat(firstname,secondname), count-60 from users;
    
  4. 修改上面查询显示字段名称,用”姓名”表示姓名,用”及格”表示及格

    select id,concat(firstname,secondname) as 姓名, count-60 及格 from users;
    select id,concat(firstname,secondname) as `姓 名`, count-60 及格 from users;
    字段别名: 字段名称 [AS] 别名
    
4.2 有条件查询
  1. 查询分数等于60的学生

    select * from users where count=60;
    
  2. 查询姓”张”学生

    select * from users where firstname='张';
    
  3. 查询年龄大于18的学生

    select * from users where age > 18;
    
  4. 显示分数在60-80的学生

    select * from users where count >=60 and count <= 80;
    select * from users where count between 60 and 80;
    
  5. 查询编号为u001和u002的学生

    select * from users where id='u001' or id='u002';
    select * from users where id in ('u001','u002');
    
  6. 查询年龄是18或20的学生

    select * from users where age = 18 or age = 20;
    
  7. 查询名中含有”云”的学生

    select * from users where secondname like '云';
    #相当于=
    select * from users where secondname like '%云%';
    模糊查询(不完全匹配查询)格式:字段 like 值
            %,匹配多个值
                '%云' ,以”云“结尾
                '云%' ,以”云“开头
                '%云%',包含”云“
            _ 匹配一个字符
    
  8. 查询名中第二字还有”云”的学生

    select * from users where secondname like '_云%';
    
  9. 查询分数小于60 或 大于90分的学生

    select * from users where count < 60 or count > 90;
    
  10. 查询分数等于60 或者 分数大于90并且年龄大于23

    select * from users where count=60 or count > 90 and age > 23 ;
    select * from users where count=60 or (count > 90 and age > 23) ;
        * 注意:and 优先级高于 or
    
  11. 查询没有考试的学生

    select * from users where count is null ;
    
  12. 查询所有考试的学生

    select * from users where count is not null ;
    
  13. 如果数据包含%,查询所有数据中含有%

    insert into users(`id`,`firstname`,`age`,`secondname`,`count`) values ('u009','小%乔',12,'推',100);
    select * from users where firstname like '%\%%';
    #转义
    *思考:如果数据一个引号
        select * from users where firstname = ''';
    #效果:不能执行完成,需要继续输入内容。
            * 所有数据如果含有',请使用转义\'
    
4.3 聚合函数的使用 ,聚合函数:将一组数据整合成一个数据函数
  1. 有多少条记录,计数count(*|字段名称|数字)

    select count(*) from users;
    select count(id) from users;
    select count(co) from users;    
    
    结论: 如果是字段,不对null数据进行计算
    mysql> select count(1) from users;
    
  2. 平均成绩,平均avg(字段名称)

    select avg(成绩列名) from users;    
    
  3. 不含null 最高成绩,max(字段)

    select max(成绩字段) from users;
    
  4. 最小年龄,min(字段)

    select min(age) from users;
    
  5. 班级总成绩,求和sum(字段)

    select sum(count) from users;
    
  6. 平均成绩

    select sum(count)/count(*) from users;
    
  7. 查询所有的年龄数

    mysql> select age from users;
    排序格式:select .... where ... order by 排序字段 asc|desc                * asc 升序,默认可以不写
           * desc 降序
       mysql> select age from users order by age desc;
    
  8. 去重复

    mysql> select distinct age from users order by age desc;
    mysql> select distinct age,count from users order by age desc;
        * age 和count 必须一样才重复
    mysql> update users set count = 60 where id = 'u006'; # 两个18和60,将去重
    
  9. 总结: max /min/avg/sum/计算的字段类型必须是整形

    * 设置没有考试
        * update users set count = null where id = 'u006';
    
4.4 分组
  1. 添加班级字段(classes)

    mysql> alter table users add column classes varchar(3);
    mysql> update users set classes='1' where id in ('u001','u002','u003','u004');
    mysql> update users set classes='2' where id in ('u005','u006','u007');
    
  2. 查询1班和2班的平均成绩

    * 平均成绩:mysql> select sum(count)/count(*) from users;
    * 分组:select ... where .. group by 分组字段 having 分组条件
        mysql> select sum(count)/count(*) from users group by classes;
    * 注意:查询数据项select... 只能是聚合函数或分组字段
        select classes , sum(count)/count(*) from users group by classes;
        select id, classes , sum(count)/count(*) from users group by classes; #分组之后id没有意义
    
  3. 查询班级平均成绩不及格的班级详细人员信息

    * mysql> select * from users where classes = '2';
    
    • 分组的条件,过滤不及格班级
            mysql> select classes as 班级,sum(count)/count(*) as countAvg from users group by classes having countAvg < 60;

- 多表操作
            select A.* from A,B where A.id = B.id
            select a.* from ,A a,B as b where a.id = b.id
                表的别名:表名 AS 别名
- 结果

            select users.* from users,B as temp where users.classes = temp.classes;
            select users.* from users,(select classes,sum(count)/count(*) as countAvg from users group by classes having countAvg < 60) as temp where users.classes = temp.classes;
            select users.* from users,(select classes,sum(count)/count(*) as countAvg from users group by classes having countAvg < 60) as temp where users.classes = temp.classes;
  1. 总结:

    select distinct *|字段|聚合函数 from 表名
    where 查询条件
    group by 分组字段
        having 分组条件
    order by 排序字段 asc|desc
    

五.总结

5.1 DQL
select *|id from 表名
    where id='u001'
    group by classes having avg < 60
    order by age desc
5.2 DML
insert into 表名(字段) values(值)
update 表名 set 字段=值,字段=值,... where 条件
delete from  表名 where 条件
5.3 DDL
create database 数据库;
drop database 数据库;
create table 表名(字段描述);
    * 字段描述:字段名称  类型  约束
drop table 表名;

Java_JDBC

发表于 2012-09-13 | 分类于 Java

##

####

Java_Struts01

发表于 2011-09-13 | 分类于 Java

Strus概述

核心功能
  1. struts 提供处理类action可以是POJO(简单的java类)
  2. 一次请求对应一个action实例(new)
struts下载地址

下载地址

struts目录结构
  • apps: 所有应用程序(实例,案例)
    • war,jar,zip三种压缩格式相同
  1. docs: 帮助文档
  2. libs: 所有jar包
  3. src: 源码

hello world入门编写

创建web项目
导入jar包
解压 apps/struts2-blank.war 解压
拷贝WEB-INF/lib的所有jar包
遍历普通类(POJO)
1
2
3
4
5
6
public class UserAction {
public String execute() { //方法名必须是execute
System.out.println("hello execute...");
return "success";
}
}
编写核心配置文件
配置文件的名称:struts.xml
配置文件的位置:src          
配置文件的内容
配置struts过滤器
123

kmzhao

22 日志
8 分类
10 标签
© 2017 kmzhao
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.3