MySQL "ON DUPLICATE KEY UPDATE"

MySQL “ON DUPLICATE KEY UPDATE” 如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。 例如,如果列 a 为 主键 或 拥有UNIQUE索引,并且包含值1,则以下两个语句具有相同的效果: INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1; UPDATE TABLE SET c=c+1 WHERE a=1; 如果行作为新记录被插入,则受影响行的值显示1;如果原有的记录被更新,则受影响行的值显示2。 这个语法还可以这样用: 如果INSERT多行记录(假设 a 为主键或 a 是一个 UNIQUE索引列): 1.INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=c+1; 执行后, c 的值会变为 4 (第二条与第一条重复, c 在原值上+1). 2.INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c); ...

2014-05-21 · 1 min · 85 words · -

maven setting, mirror, repository

maven setting, mirror, repository maven mirror, repository mirror和 repository 1 Repository (仓库) 1.1 Maven仓库主要有2种: remote repository: 相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository: 存放在本地磁盘的一个文件夹,例如,windows上默认是C:\Users\{用户名}.m2\repository目录 1.2 Remote Repository主要有3种: 中央仓库: http://repo1.maven.org/maven2/ 私服: 内网自建的maven repository,其URL是一个内部网址 其他公共仓库: 其他可以互联网公共访问maven repository,例如 jboss repository等 repository里存放的都是各种jar包和maven插件。当向仓库请求插件或依赖的时候,会先检查local repository,如果local repository有则直接返回,否则会向remote repository请求,并缓存到local repository。也可以把做的东西放到本地仓库,仅供本地使用;或上传到远程仓库,供大家使用。 2 Mirror mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。 2.1 没有配置mirror: 2.2 配置mirror: 此时,B Repository被称为A Repository的镜像。 如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都胡够从它的镜像中获取。 2.3 标签里面放置的是要被镜像的Repository ID。为了满足一些复杂的需求,Maven还支持更高级的镜像配置: ...

2014-05-18 · 2 min · 217 words · -

java version

java version Java class file format major version numbers Java 1.2 uses major version 46 Java 1.3 uses major version 47 Java 1.4 uses major version 48 Java 5 uses major version 49 Java 6 uses major version 50 Java 7 uses major version 51 Java 8 uses major version 52 Java 9 uses major version 53 Java 10 uses major version 54 Java 11 uses major version 55 Java 12 uses major version 56 Java 13 uses major version 57 Java 14 uses major version 58 Java 15 uses major version 59 Java 16 uses major version 60 Java 17 uses major version 61

2014-05-13 · 1 min · 105 words · -

instanceof

instanceof Java中的instanceof关键字是一个二元操作符,和==,>,<是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子: String s = "I AM an Object!"; boolean isObject = s instanceof Object; 我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。 instanceof有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类: public class Bill {//省略细节} public class PhoneBill extends Bill {//省略细节} public class GasBill extends Bill {//省略细节} 在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断: public double calculate(Bill bill) { if (bill instanceof PhoneBill) { //计算电话账单 } if (bill instanceof GasBill) { //计算燃气账单 } … } 这样就可以用一个方法处理两种子类。 然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了: public double calculate(PhoneBill bill) { //计算电话账单 } public double calculate(GasBill bill) { //计算燃气账单 } 所以,使用instanceof在绝大多数情况下并不是推荐的做法,应当好好利用多态。 http://rodney.cnblogs.com/archive/2005/08/18/instanceof.html instanceof 判断对象类型 当在程序中执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生ClassCastException异常,所以在执行向下转型之前需要养成一个良好习惯,就是判断父类对象是否为子类对象的实例。这个判断通常使用instanceof操作符来完成。可以使用instanceof操作符判断是否一个类实现了某个接口 (接口会在10.6节中进行介绍) ,也可以用它来判断一个实例对象是否属于一个类。 instanceof的语法格式如下: myobject instanceof ExampleClass ...

2014-05-09 · 1 min · 154 words · -

Thank you very much & Thanks a lot

‘Thank you very much & Thanks a lot’ Thank you is more formal than thanks.Thanks a bunch is extremely informal.

2014-05-09 · 1 min · 20 words · -

spring mvc annotation

spring mvc annotation 参数处理 (明确指定参数 匹配 自动转换类型) 普通属性和对象及属性: @RequestParam(“id”)注解,所以它将和id的URL参数绑定 @RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象。 @ResponseBody 将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。 @PathVariable @PathVariable是用来对指定请求的URL路径里面的变量 eg: Java代码 <img class="star" src="http://yeak2001.iteye.com/images/icon_star.png" alt="收藏代码" /> "form/{id}/apply", method = {RequestMethod.PUT, RequestMethod.POST}) @PathVariable和@RequestParam的区别就在于: @RequestParam用来获得静态的URL请求入参 、 @PathVariable 当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。 示例代码: ```java``` http://blog.csdn.net/walkerjong/article/details/7946109# @Controller "/owners/{ownerId}") class RelativePathUriTemplateController { "/pets/{petId}") @PathVariable String petId, Model model) { // implementation omitted } } 上面代码把URI template 中变量 ownerId的值和petId的值,绑定到方法的参数上。若方法参数名称和需要绑定的uri template中变量名称不一致,需要在@PathVariable("name")指定uri template中的名称。 http://blog.csdn.net/zshake/article/details/9716849 http://yeak2001.iteye.com/blog/465336 http://blog.sina.com.cn/s/blog_72827fb10101pl9j.html

2014-05-07 · 1 min · 70 words · -

MyBatis_当实体属性与表字段名不一致

MyBatis_当实体属性与表字段名不一致 http://m.blog.csdn.net/blog/wuqinfei_cs/12873135 映射 /*

2014-05-07 · 1 min · 4 words · -

MySQL 日志 log

MySQL 日志 log https://mariadb.com/kb/en/mariadb/general-query-log/ 查询日志: 编辑/etc/MySQL/my.cnf, 在[MySQLd]段下添加以下三行并重启MySQL(MySQL用户写权限) general-log=1 general-log-file=/data/logs/MySQL/MySQL.log log-output=file 查看配置: SHOW GLOBAL VARIABLES LIKE '%log%'; MySQL日志: 主要包含: 错误日志、查询日志、慢查询日志、事务日志、二进制日志; 日志是MySQL数据库的重要组成部分。日志文件中记录着MySQL数据库运行期间发生的变化;也就是说用来记录MySQL数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文件进行数据恢复。 错误日志 在MySQL数据库中,错误日志功能是默认开启的。并且,错误日志无法被禁止。默认情况下,错误日志存储在MySQL数据库的数据文件中。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。 错误日志信息可以自己进行配置的,错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-err是定义是否启用错误日志的功能和错误日志的存储位置,log-warnings是定义是否将警告信息也定义至错误日志中。默认情况下错误日志大概记录以下几个方面的信息: 服务器启动和关闭过程中的信息 (未必是错误信息,如MySQL如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等) 、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息。 下面我们来定义MySQL错误日志的功能: 一般而言,日志级别的定义没有回话变量都只是在全局级别下进行定义。 MySQL> SHOW GLOBAL VARIABLES LIKE ‘%log%’; +————–+————+ | Variable_name | Value | +————–+————+ | back_log | 50 | | binlog_cache_size | 32768 | | binlog_direct_non_transactional_updates | OFF | | binlog_format | MIXED | | binlog_stmt_cache_size | 32768 | | expire_logs_days | 0 | | general_log | OFF | | general_log_file | /mydata/data/stu18.log | ...

2014-05-07 · 10 min · 2093 words · -

MySQL中的datetime与timestamp

MySQL中的datetime与timestamp 相同 显示 TIMESTAMP列的显示格式与DATETIME列相同。换句话说,显示宽度固定在19字符,并且格式为YYYY-MM-DD HH:MM:SS。 不同 范围 datetime 以’YYYY-MM-DD HH:MM:SS’格式检索和显示DATETIME值。支持的范围为'1000-01-01 00:00:00’到'9999-12-31 23:59:59’TIMESTAMP值不能早于1970或晚于2037 储存 TIMESTAMP 1.4个字节储存 (Time stamp value is stored in 4 bytes) 2.值以UTC格式保存 ( it stores the number of milliseconds) 3.时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。 datetime 1.8个字节储存 (8 bytes storage) 2.实际格式储存 (Just stores what you have stored and retrieves the same thing which you have stored.) 3.与时区无关 (It has nothing to deal with the TIMEZONE and Conversion.) 实例对比 现在我来做个时区对他们的影响。 1.先插入一个数据insert into `t8` values(now(), now()); ...

2014-05-07 · 1 min · 128 words · -

spring mvc + mybatis

spring mvc + mybatis

2014-05-06 · 1 min · 4 words · -

命令行 创建多模块的Maven项目(父模块,子模块)

命令行 创建多模块的Maven项目(父模块,子模块) 我们都知道,我们常常将一个复杂的java应用拆分成多个java子应用。由于maven的出现,这种拆分就更加容易了,因为我们通过maven可以创建多个关联模块的项目 (Multiple Module Projects) 。由一个总的模块,下面包含多个子模块 (子模块还可以包含子模块) 。 一、通过在Maven命令行创建。 创建父模块 (总的POM) - cms-validator 使用命令mvn archetype:create -DgroupId=com.ebay.tools.cms.validator -DartifactId=cms-validator 创建一个maven项目,然后修改该项目的pom.xml文件,将package类型改为pom pom 并删除其中的src目录。 cd cms-validator 创建提供rest service的子模块: validator-rest 在父模块的目录下, 使用命令mvn archetype:create -DgroupId=com.ebay.tools.cms.validator.rest -DartifactId=validator-rest 创建一个maven (子) 项目。 创建一个web子模块: validator-web 在父模块的目录下, mvn archetype:create -DgroupId=com.ebay.tools.cms.validator.web -DartifactId=validator-web -DarchetypeArtifactId=maven-archetype-webapp 完成以上3步以后,会在总的pom.xml中已经自动加入: validator-rest validator-web ...

2014-05-06 · 1 min · 92 words · -

开放地址法, Open Addressing

开放地址法, Open Addressing 本文我们来探讨一个数据结构的基础话题:hash 结构中的开放地址法(Open Addressing) HashMap 无 Java 人不知无 Java 人不晓,它使用开链法处理 hash 碰撞,将碰撞的元素用链表串起来挂在第一维数组上。但是并不是所有语言的字典都使用开链法搞定的,比如 Python,它使用的是另一种形式 —— 开放地址法。相比 HashMap 是二维的结构,它只是一维的,只有一个数组。 开放地址法与开链法的不同之处在于如何处理 hash 冲突。当新来一个元素哈希到数组中的位置已经被其它元素占据了该怎么办? 开放地址法会根据当前的位置计算出下一个位置,将这个冲突的元素挪进来。如果这下一个位置也被占用了,那么就再计算下一个位置,直到找到一个空的位置。可以想像,将会有一条虚拟的链条将这些相关的位置串起来。这个虚拟的链条就好比开链法里面的第二维链表。只不过链表有显示的指针字段,而虚拟链条没有,它的这个链条完全是通过数学函数计算出来的。 root = hash(key) % m // 第一个位置,m 为数组的长度 index_i = (root + p(key, i)) % m // 链条中的第 i 个位置 index_1 = (root + p(key, 1)) % m index_2 = (root + p(key, 2)) % m … 复制代码这个数学函数就是上面代码中的 p —— probe sequence (探测序列)。寻找空位置的过程就是一步一步的探测的过程。不同的 key 会生成不一样的探测序列。 在查找的时候,如果第一个位置上保存的 key 不是目标 key,那就沿着探测路径继续寻找,直到找到或者遇到一个空位置为止。 到这里你可能会担心又没有可能探测过程会出现死循环,探来探去又回到原点了,或者是回到路径的中间。这是很有可能的,所以这里的探测函数不能随意选择,它必须保证探测序列不会出现循环,经过 m-1 次探测生成的探测序列必须正好是 1..m-1的全排列。 这样的探测函数有很多,其中最常见的一种是线性探测函数。该探测序列和输入 key 无关。最终的探测路径只和初始位置相关。 // m = 2^n,c 必须是一个奇数 p(key, i) = c i index_i = root + c i 复制代码这里我不去仔细证明这个函数为什么满足要求,我们可以写个简单的代码来验证一下。 ...

2014-05-06 · 1 min · 188 words · -

maven pom

maven pom 基本内容: POM包括了所有的项目信息。 maven 相关: pom定义了最小的maven2元素,允许groupId,artifactId,version。所有需要的元素 groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为: /org/codehaus/mojo artifactId: 项目的通用名称 version:项目的版本 packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par classifier: 分类 <project xmlns=“http://maven.apache.org/POM/4.0.0" xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 com.wiloon wechat jar 1.0-SNAPSHOT wechat ...

2014-04-30 · 1 min · 52 words · -

JPA EntityManager

JPA EntityManager 持久化上下文 (Persistence Context ) 一个持久化单元 (Persistence Unit ) 就是关于一组Entity 类的命名配置。持久化单元是一个静态的概念。 一个持久化上下文 (Persistence Context ) 就是一个受管的Entity 实例的集合。每一个持久化上下文都关联一个持久化单元,持久化上下文不可能脱离持久化单元独立存在。持久化上下文中的Entity 实例就是相关联的持久化单元中的若干Entity 的实例。持久化上下文是一个动态的概念。 一个Entity 实例处于受管状态,其实质是: 该实例存在于某个持久化上下文中,并且可能被某个EntityManager 处理,也因为这个原因,所以我们说一个EntityManager 管理一个持久化上下文。 尽管持久化上下文非常重要,但是开发者不直接与之打交道,持久化上下文在应用程序中是透明的,我们需要通过EntityManager 间接管理它。 容器管理的EntityManager(Container-Managed EntityManager) 通过将@PersistenceContext 注解标注在EntityManager 类型的字段上,这样得到的EntityManager 就是容器管理的EntityManager 。由于是容器管理的,所以我们不需要也不应该显式关闭注入的EntityManager 实例。 容器管理的EntityManager 又细分为两种类型: 事务范围 (Transaction ) 的和扩展的 (Extended ) 。 若@PersistenceContext 未指定type 属性,或者指定为PersistenContextType.TRANSACTION ,则表示该EntityManager 是事务范围的;若指定为PersistenContextType.EXTENDED 的,则表示该EntityManager 是扩展的。 事务范围: 事务范围的EntityManager 是无状态的,可用在无状态会话Bean 和有状态会话Bean 中。 事务范围的EntityManager 依赖于JTA 事务,每次调用EntityManager 实例的相关方法时,EntityManager 会查看是否有某个持久化上下文与当前事务关联,如果有,则使用该持久化上下文;如果没有,则EntityManager 将创建一个持久化上下文,并将该持久化上下文与当前事务关联。当事务结束,则持久化上下文消失。 扩展的: 扩展的EntityManager 只能用于有状态会话Bean 。 扩展的EntityManager 在有状态会话Bean 实例创建的时候创建一个持久化上下文,并且直到该有状态会话Bean 销毁,则相应的持久化上下文才被移除。 由于在扩展的EntityManager 中,每次方法调用都是使用的相同的持久化上下文,所以前一次方法调用时产生的受管实体在下一个方法访问时仍然为受管实体。 ...

2014-04-30 · 1 min · 160 words · -

spring annotation

spring annotation @Component;@Controller;@Service;@Repository @Component 在annotaion配置注解中用 @Component 来表示一个通用注释用于说明一个类是一个spring容器管理的类。即就是该类已经纳入到spring的管理中了。而@Controller, @Service, @Repository是 @Component 的细化,这三个注解比 @Component 带有更多的语义,它们分别对应了控制层、服务层、持久层的类。 @Service @Service 用于标注业务层组件,对象名默认是类名 (头字母小写), 如果想自定义,可以@Service(“foo”)这样来指定,这种bean默认是单例的,如果想改变,可以使用@Service(“foo”) @Scope(“prototype”)来改变。 @Controller用于标注控制层组件 (如struts中的action) @Repository用于标注数据访问组件,即DAO组件 @Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 @Autowired Spring自己定义的注解, JSR-250规范定义的注解 @Resource @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入 @Value 将外部的值动态注入到Bean中 @Value("normal") private String normal; // 注入普通字符串 @Value("#{systemProperties['os.name']}") private String systemPropertiesName; // 注入操作系统属性 @Value("#{ T(java.lang.Math).random() * 100.0 }") private double randomNumber; //注入表达式结果 @Value("#{beanInject.another}") private String fromAnotherBean; // 注入其他Bean属性: 注入beanInject对象的属性another,类具体定义见下面 @Value("classpath:com/hry/spring/configinject/config.txt") private Resource resourceFile; // 注入文件资源 @Value("http://www.baidu.com") private Resource testUrl; // 注入URL资源 @PostConstruct 注解在方法上,表示此方法是在Spring实例化该Bean之后马上执行此方法,之后才会去实例化其他Bean,并且一个Bean中@PostConstruct注解的方法可以有多个。 ...

2014-04-30 · 1 min · 79 words · -

spring security

spring security spring-security-jwt-guide https://github.com/Snailclimb/spring-security-jwt-guide spring-boot-starter-data-redis 基础依赖,其他依赖根据使用不同的缓存技术选择加入,默认情况下使用 ConcurrentMapCache不需要引用任何依赖 spring-boot-starter-data-redis spring-boot-starter-data-redis依赖于spring-data-redis 和 lettuce 。Spring Boot 1.0 默认使用的是 Jedis 客户端,2.0 替换成 Lettuce,但如果你从 Spring Boot 1.5.X 切换过来,几乎感受不大差异,这是因为 spring-boot-starter-data-redis 为我们隔离了其中的差异性。 spring-boot-starter-thymeleaf Thymeleaf 是新一代的模板引擎,在 Spring4.0 中推荐使用 Thymeleaf 来做前端模版引擎。 add maven dependancy HttpSessionSecurityContextRepository.loadContext spring security session serialize json redis https://github.com/spring-projects/spring-session/issues/933 https://github.com/spring-projects/spring-session/blob/2.3.1.RELEASE/spring-session-samples/spring-session-sample-boot-redis-json/src/main/java/sample/config/SessionConfig.java https://my.oschina.net/u/3669799/blog/4282404 https://blog.csdn.net/wamr_o/article/details/99634226 https://github.com/Ceruleans/ssdemo https://my.oschina.net/u/4257408/blog/3662569 <dependency> <groupId>org.springframework</groupId> spring-core</artifactId> <version>3.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> spring-context</artifactId> <version>3.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> spring-web</artifactId> <version>3.2.8.RELEASE</version> </dependency> add dispatcher servlet in web.xml ...

2014-04-29 · 1 min · 83 words · -

Maven中的DependencyManagement和Dependencies

Maven中的DependencyManagement和Dependencies 这里介绍一个在父项目中的根结点中声明dependencyManagement和dependencies的区别 dependencyManagement Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素。使用pom.xml 中的dependencyManagement 元素能让 所有在子项目中引用一个依赖而不用显式的列出版本号。Maven 会沿着父子层次向上走,直到找到一个拥有dependencyManagement 元素的项目,然后它就会使用在这个dependencyManagement 元素中指定的版本号。 例如在父项目里: Xml代码 收藏代码 MySQL MySQL-connector-java 5.1.2 … 然后在子项目里就可以添加MySQL-connector时可以不指定版本号,例如: ...

2014-04-28 · 1 min · 42 words · -

maven jvm opts

maven jvm opts Maven工程的JVM配置方式 为Maven运行配置JVM参数 这种需求比较少见,一般使用默认的JVM配置即可。如果需要,可以通过设置环境变量来满足需求,如: Windows下添加环境变量MAVEN_OPTS的value为-Xms1024m -Xmx1024m -Xss1m Linux下可修改.profile或者.bash_profile文件,并做如下设置: export MAVEN_OPTS="-Xms1024m -Xmx1024m -Xss1m" (注意: 这里需要使用双引号或者单引号)

2014-04-24 · 1 min · 16 words · -

XPath

XPath Xpath表达式 XPath(全称:XML Path Language)即 XML 路径语言,它是一门在 XML 文档中查找信息的语言,最初被用来搜寻 XML 文档,同时它也适用于搜索 HTML 文档。因此,在爬虫过程中可以使用 XPath 来提取相应的数据。 提示:XML 是一种遵守 W3C 标椎的标记语言,类似于 HTML,但两者的设计目的是不同,XML 通常被用来传输和存储数据,而 HTML 常用来显示数据。 您可以将 Xpath 理解为在XML/HTML文档中检索、匹配元素节点的工具。 Xpath 使用路径表达式来选取XML/HTML文档中的节点或者节点集。Xpath 的功能十分强大,它除了提供了简洁的路径表达式外,还提供了100 多个内建函数,包括了处理字符串、数值、日期以及时间的函数。因此 Xpath 路径表达式几乎可以匹配所有的元素节点。 Xpath基本语法 基本语法使用 Xpath 使用路径表达式在文档中选取节点,下表列出了常用的表达式规则: Xpath路径表达式 表达式 描述 node_name 选取此节点的所有子节点。 / 绝对路径匹配,从根节点选取。 // 相对路径匹配,从所有节点中查找当前选择的节点,包括子节点和后代节点,其第一个 / 表示根节点。 . 选取当前节点。 .. 选取当前节点的父节点。 @ 选取属性值,通过属性值选取数据。常用元素属性有 @id 、@name、@type、@class、@tittle、@href。 http://c.biancheng.net/python_spider/xpath.html

2014-04-24 · 1 min · 56 words · -

apk 编译,反编译,AXMLPrinter2,smali,baksmali

apk 编译,反编译,AXMLPrinter2,smali,baksmali http://blog.csdn.net/android_tutor/article/details/5724435 1.AXMLPrinter2.jar 2.baksmali.jar 3.smali.jar 三、准备工作 为了方便起见,作者把AXMLPrinter2.jar, 还有baksmali.jar,还有smali.jar(下下来为了方便重命名),放在Android SDK tools文件夹中如下图所示: 为了便于大家更容易程序比对,作者写了一个简单的应用(叫APKInstaller)目录结构如下图所示: 四、开始拿来主义 1.用 AXMLPrinter2.jar查看apk中的布局xml文件: 将ApkInstaller应用生成的ApkInstaller.apk(为了方便起见放到tools目录里)用WinRAR等 工具打开,将res/layout/main.xml解压出来(也还是放在tools目录里哦) 打开main.xml文件,内容如下(一堆天文): 这时候AXMLPrinter2.jar派上用场了,打开cmd终端,一直进入到tools目录下,输入如下命令: java -jar AXMLPrinter2.jar main.xml > main.txt. (如下图所示) 打开main.txt代码如下(是不是有个123了呵呵~): 为了比对打开源程序中的main.xml代码如下(大家比对一下吧): <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android" android:orientation=“vertical” android:layout_width=“fill_parent” android:layout_height=“fill_parent” <WebView android:id=”@+id/apk_web" android:layout_height=“wrap_content” android:layout_width=“fill_parent” /> 2.用baksmali.jar反编译classes.dex: 将ApkInstaller.apk里的classes.dex解压到tools目录里,然后baksmali.jar就派上用场了,在cmd命令行里输入如下命令: ...

2014-04-14 · 2 min · 223 words · -