分类:JavaSE

JAVA: 抓取需要登录的页面, curl page with auth, How do I connect to a URL using Basic authentication?

ConnectToUrlUsingBasicAuthentication.java package test; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import org.apache.commons.codec.binary.Base64; public class ConnectToUrlUsingBasicAuthentication… Read More

JAVA: JDBC-Mysql操作类

package com.yunti.utils; import java.lang.reflect.Field; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap;… Read More

JAVA:JDBC入门教程(三) PreparedStatement的使用

前两章我们写了一个 DBTools 工具类,可以进行简单的数据库操作,但是有很大的局限性,今天就来改善一下这个类,学习一个新的对象 PreparedStatement 为什么要使用PreparedStatement 前面我们建立了一个store数据库,并且建立了一个user数据表,表里包含字段 id ,account ,password ,role。而且还向里面加入了一条数据 sql 语句是这样写的 INSERT INTO store.user (account,password,role) VALUES ('admin','123',1) 我直接把字段的值直接写在了sql语句里,不过通常情况下,(‘admin’,’123’,1) 这里面都是一些变量,为了方便,我们会建立一个实体类,来对应相应的数据库表,现在新建一个… Read More

JAVA: JDBC入门教程(二) 通过JDBC进行简单的增删改查

对数据库的更新操作 数据库的更新包括:INSERT UPDATE DELETE 执行数据库更新操作需要用到 Statement类,该类通过Connection的createStatement()方法来获得,写好sql语句然后调用Statement对象的executeUpdate(sql) 方法来实现更新操作,很简单。 比如说我想在user表里加入一条记录,可以分为一下几个步骤 获取数据库连接 创建Statement对象 写sql语句 执行更新操作代码如下 @Test public void insertUser(){ Connection conn = null;… Read More

JAVA: JDBC入门教程(一): 连接数据库

1. JDBC的环境搭建 JDBC的环境搭建很简单,需要下面的配置好 安装Java 安装数据库 安装数据库驱动程序 以上两点都很容易,若果有疑问的自行百度解决吧,主要说一下第三个,现在以mysql为例 配置JDBC的环境。 新建java项目,自行命名,我这里的项目叫JDBCTest 下载驱动包,名字叫 mysql-connector-java-5.1.38-bin.jar 可以自行去网上下载,链接http://dev.mysql.com/downloads/connector/j/5.0.html 在项目的根目录下新建一个lib文件夹并且把刚刚下载的 驱动文件(.jar)拷贝到lib文件夹下,然后在这个文件上右键 Build Path–Add to Bulid Path. 这样JDBC的环境就已经搭建完成了。下面就开始尝试着把自己的java程序与数据库相连接。… Read More

Java: 精确数字运算, 加减乘除运算, 解决浮点数的计算失去精度问题, BigDecimal的用法(加减乘除)

今天在数值计算时碰到一个问题.程序如下: double a = (3.3-2.4)/0.1; System.out.println(a); 你可能认为结果很简单,不就是9嘛,是事实上,结果为:8.999999998,为什么呢?我翻阅了一些资料,终于找出了原因. 为什么浮点数会丢失精度?   十进制数的二进制表示可能不够精确浮点数或是双精度浮点数无法精确表示的情况并不少见。浮点数值没办法用十进制来精确表示的原因要归咎于CPU表示浮点数的方法。这样的话您就可能会牺牲一些精度,有些浮点数运算也会引入误差。以上面提到的情况为例,2.4的二进制表示并非就是精确的2.4。反而最为接近的二进制表示是 2.3999999999999999。原因在于浮点数由两部分组成:指数和尾数。浮点数的值实际上是由一个特定的数学公式计算得到的。您所遇到的精度损失会在任何操作系统和编程环境中遇到。 注意: 您可以使用Binary Coded Decimal (BCD)库来保持精度。BCD数字编码方法会把每一个十进制数字位单独编码。 类型失配 您可能混合了浮点数和双精度浮点数类型。请确定您在进行数学运算的时候所有的数据类型全部相同。 注意:float类型的变量只有7位的精度,而double类型的变量有15位的精度。 如何进行浮点数精度计算?     Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上面的错误。现在终于理解为什么要有BCD码了。… Read More

JAVA:Apache Commons工具集简介, BeanUtils, FileUpload, IO, Validator, Compress

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。下面是我这几年做开发过程中自己用过的工具类做简单介绍。   组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES、SHA1、MD5、Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. Configuration 一个java应用程序的配置管理类库. DBCP… Read More

Java 数组详解 – 用法、遍历、排序、实用API

概要: 数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。 组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。 数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。 初始化数组 动态初始化 int array = new int[3]; // 两种方式都可以 // int array = new int[3];… Read More

JAVA: 多线程并发 CountDownLatch、CyclicBarrier和Semaphore

在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Semaphore用法 一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。 CountDownLatch类只提供了一个构造器: public CountDownLatch(int count) { }; //参数count为计数值 然后下面这3个方法是CountDownLatch类中最重要的方法: public void await() throws… Read More

JAVA: 多线程并发 CountDownLatch的介绍和使用

什么是CountDownLatch? CountDownLatch 是Java的concurrent包里面的一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器, 也就是同时只能有一个线程去减这个计数器里面的值。 关键词:计数器原子操作 一个 主要看他的构造器参数和await()方法和countdown() 方法和count()方法。 await():如果调用当前方法,当前的线程处于阻塞状态,其他线程执行完任务后调用countdown() 直到count()数减少到0  的时候,才会执行await() 以后的代码。 1、类介绍 java.util.concurrent 类 CountDownLatch java.lang.Object java.util.concurrent.CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 用给定的计数… Read More

2017年你不能错过的Java类库

各位读者好, 这篇文章是在我看过 Andres Almiray 的一篇介绍文后,整理出来的。 因为内容非常好,我便将它整理成参考列表分享给大家, 同时附上各个库的特性简介和示例。 请欣赏! Guice Guice (发音同 ‘juice’) ,是一个 Google 开发的轻量级依赖性注入框架,适合 Java 6 以上的版本。 # Typical… Read More

Java(Android)线程池详解

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用。本文是基础篇,后面会分享下线程池一些高级功能。 1、new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub… Read More

Java: set和list集合类的使用方法

集合概述 由于Set集合和List集合都继承于Collection,都用于管理多个对象,所以统称为集合类。如下图所示: 数组与集合类都可以用于管理多个对象,有何不同? 数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。 集合类的特点? 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。 Java集合框架实际上是java对各种数据结构的实现。比如,线性表,链表,队列,堆,栈,二叉树等,不像C语言,需要全部自己实现。   共性方法 由于大部分集合类都继承了Collection接口,所以Collection接口的方法就是集合类的共性方法,演示代码如下: 首先演示操作一个元素的方法,主要用于添加、删除和判断。一共6个: public static void demo1(){ Collection col1=new ArrayList(); col1.add("java01"); col1.add("java02");… Read More

Java遍历HashMap,Set, List, ArraryList 删除(remove)或者修改

遍历list的时候为什么不能修改呢? 具体语言实现不同,这里是一些语言无关的点 如果你在遍历时往数组增加数据,会导致遍历不完整(因为增加了新成员长度变了),或者死循环(因为总是有新的进去) 如果在遍历时删除数据,则会导致数组访问越界(因为长度缩短了,指针指向了一个已经标示为空的区域) 如果你只是在遍历时修改这个节点本身的数据,一般来说是安全的(当然需要看具体场景) 以下默认修改为 list 的 add/remove 操作 首先, java 里面有很多种 list :   java.util.ArrayList;   java.util.LinkedList;   java.util.Stack;   java.util.Vector;   java.util.concurrent.CopyOnWriteArrayList;… Read More