少年阿宾

那些青春的岁月

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

#

1、
#!/bin/bash
mysql -u* -h* -p* <<EOF
    Your SQL script.
EOF
2、准备一个sql脚本,如update.sql,然后执行如下命令:

mysql -uroot -ppassword < update.sql
3、
mysql -Dftp -uroot -proot -e"select user FROM users" >users.txt
catfilename="users.txt"

for i in `cat $catfilename`;
do
  
        echo "$i"
   
done
4、
echo "select user FROM ftp.users" | mysql -u root -proot

5、使用mysql参数的方法
mysql -u$user -p$pass -D $db -e "select host from user;"
6、忽略mysql列名
  #!/bin/bash
MYSQL=mysql #选用mysql程序
USER=root #设定用户名
PASSWORD="123456" #设定数据库的用户密码
DB=eucalyptus_auth #选定需要的数据库

COMMAND="select auth_user_query_id, auth_user_secretkey from auth_users where auth_user_name=\"admin\" " #查找需要的数据sql语句
declare count=`$MYSQL -u${USER} -p${PASSWORD} -D ${DB} -e "${COMMAND}" --skip-column-name` #执行mysql的查询,并将其记录到count中
for list in $count
do
echo " the item is $list"
done #读取得到的数据
7、取出数据表里面的一行的第一列
#!/bin/sh
HOST="192.168.111.11"
PORT="3306"
USERNAME="root"
PWD="root"
DBNAME="abin"
TNAME="city"
select_sql="select * from ${TNAME}"
mysql -h${HOST} -P${PORT} -u${USERNAME} -p${PWD} ${DBNAME} -e "set names utf8; ${select_sql}" --skip-column-name| while read line;
do
        midd=`echo "$line" | awk '{print $1}'`;
        echo ${midd};
done;
~              
8、
 mysql database -u $user -p $password -e "SELECT A, B, C FROM table_a"|while read a b c
do
echo $a $b $c
don 
9、
 exec 8<>file
mysql database -u $user -p $password -e "SELECT A, B, C FROM table_a"
while read a b c
do
echo $a $b $c
done<&8 

10、
#!/bin/sh
HOST="localhost"
PORT="3306"
USERNAME="root"
PWD=""
DBNAME="abin"
CITYNAME="city"
BNAME="bussiness"
HNAME="height"
parameter=$1
type=$2
echo "parameter=${parameter},type=${type}"
select_sql="select * from ${CITYNAME} t where t.code='${parameter}'"
mysql -h${HOST} -P${PORT} -u${USERNAME} -p${PWD} ${DBNAME} -e "set names utf8; ${select_sql}" --skip-column-name| while read a b c;
do
        id=${a};
        echo "id=${id}"
        if [ $type = 1 ];then
                echo "type=${type},id=${id}"
                bus_sql="select * from ${BNAME} t where t.ccode=${id}"
                mysql -h${HOST} -P${PORT} -u${USERNAME} -p${PWD} ${DBNAME} -e "set names utf8; ${bus_sql}" --skip-column-name | while read d e f g;
                do
                        echo "bussiness=${e},city_code=${g},bussiness_code=${f}"
                done
        elif [ $type = 2 ];then
                echo "type=${type},id=${id}"
                hei_sql="select * from ${HNAME} t where t.ccode=${id}"
                mysql -h${HOST} -P${PORT} -u${USERNAME} -p${PWD} ${DBNAME} -e "set names utf8; ${hei_sql}" --skip-column-name | while read h i j k;
                do
                        echo "sex=${i},height=${j},city_code=${k}"
                done
        else
                echo "others"
        fi;
done


















posted @ 2015-01-10 22:04 abin 阅读(847) | 评论 (0)编辑 收藏

以 MySQL 为例:
mysql -e "select * from tbl" while read line ; do echo "$line" done


posted @ 2015-01-10 21:08 abin 阅读(962) | 评论 (0)编辑 收藏

在linux下用shell脚本读取mysql结果集中值的二种方法,按行读取sql结果,将sql执行结果读取到shell变量中,然后读取。

shell脚本读取mysql结果集的值

按行读取sql结果:

while read -a row

do

 echo "..${row[0]}..${row[1]}..${row[2]}.."

done < <(echo "SELECT A, B, C FROM table_a"

 mysql database -u $user -p $password)

将sql执行结果读取到shell变量中:

while read a b c

do

 echo "..${a}..${b}..${c}.."

done < <(echo "SELECT A, B, C FROM table_a"

 mysql database -u $user -p $password)





posted @ 2015-01-10 21:06 abin 阅读(3659) | 评论 (0)编辑 收藏

经常要在shell下查询数据库的东西,数据库有中文,shell显示就是乱码,有几个方法看看结果
首先linux中文字体要安装,这个自己装,数据库的字符集要支持中文,我的支持啊,然后就是在写shell的时候的问题了
mysql -u root -p  --default-character-set=utf8 db -e "select * from tb where A=10;"
这个显示的就是乱码
mysql -u root -p db -e "set names utf8 ;select * from tb where A=10;"
这个还是乱码
mysql -u root -p db -e "set names Latin1 ;select * from tb where A=10;"
这个也是乱码
mysql -u root -p db -e "set names gbk ;select * from tb where A=10;"
最后这个却显示中文了!!!!





http://wdegang.blog.51cto.com/134120/1137929
posted @ 2015-01-10 20:58 abin 阅读(618) | 评论 (0)编辑 收藏

1、接收linuxshell控制台输入的字符串参数:
#!/bash/bin
parameter=$1
if [ $parameter = "a" ];then
        echo "equals"
elif [ $parameter = "b" ];then
        echo "not"
else
        echo "kong"
fi
2、接收linuxshell控制台输入的数字参数:
#!/bash/bin
parameter=$1
if [ $parameter = 1 ];then
        echo "input is $parameter"
elif [ $parameter = 2 ];then
        echo "input is $parameter"
else
        echo "input is other: $parameter"
fi


3、接收linuxshell控制台输入的时间参数:











posted @ 2015-01-10 19:19 abin 阅读(597) | 评论 (0)编辑 收藏

为什么ImmutableMap是不可变集合,是线程安全的?
首先介绍一下基本概念,什么事immutable

何为Immutable对象?

简单地说,如果一个对象实例不能被更改就是一个Immutable的对象,Java SDK提供的大量值对象,比如String等都是Immutable的对象。

如何使对象Immutable?

按照Effective Java的说明,需要满足下面几条规则:

  • 保证类不能被继承 - 为了避免其继承的类进行mutable的操作
  • 移调所有setter/update等修改对象实例的操作
  • 保证所有的field是private和final的

不可变对象(immutable objects),后面文章我将使用immutable objects来代替不可变对象!

那么什么是immutable objects?什么又是mutable Objects呢?

immutable Objects就是那些一旦被创建,它们的状态就不能被改变的Objects,每次对他们的改变都是产生了新的immutable的对象,而mutable Objects就是那些创建后,状态可以被改变的Objects.

举个例子:String和StringBuilder,String是immutable的,每次对于String对象的修改都将产生一个新的String对象,而原来的对象保持不变,而StringBuilder是mutable,因为每次对于它的对象的修改都作用于该对象本身,并没有产生新的对象。

但有的时候String的immutable特性也会引起安全问题,这就是密码应该存放在字符数组中而不是String中的原因!

immutable objects 比传统的mutable对象在多线程应用中更具有优势,它不仅能够保证对象的状态不被改变,而且还可以不使用锁机制就能被其他线程共享。

实际上JDK本身就自带了一些immutable类,比如String,Integer以及其他包装类。为什么说String是immutable的呢?比如:java.lang.String 的trim,uppercase,substring等方法,它们返回的都是新的String对象,而并不是直接修改原来的对象。

如何在Java中写出Immutable的类?

要写出这样的类,需要遵循以下几个原则:

1)immutable对象的状态在创建之后就不能发生改变,任何对它的改变都应该产生一个新的对象。

2)Immutable类的所有的属性都应该是final的。

3)对象必须被正确的创建,比如:对象引用在对象创建过程中不能泄露(leak)。

4)对象应该是final的,以此来限制子类继承父类,以避免子类改变了父类的immutable特性。

5)如果类中包含mutable类对象,那么返回给客户端的时候,返回该对象的一个拷贝,而不是该对象本身(该条可以归为第一条中的一个特例)

当然不完全遵守上面的原则也能够创建immutable的类,比如String的hashcode就不是final的,但它能保证每次调用它的值都是一致的,无论你多少次计算这个值,它都是一致的,因为这些值的是通过计算final的属性得来的!


有时候你要实现的immutable类中可能包含mutable的类,比如java.util.Date,尽管你将其设置成了final的,但是它的值还是可以被修改的,为了避免这个问题,我们建议返回给用户该对象的一个拷贝,这也是Java的最佳实践之一。
使用Immutable类的好处:
1)Immutable对象是线程安全的,可以不用被synchronize就在并发环境中共享

2)Immutable对象简化了程序开发,因为它无需使用额外的锁机制就可以在线程间共享

3)Immutable对象提高了程序的性能,因为它减少了synchroinzed的使用

4)Immutable对象是可以被重复使用的,你可以将它们缓存起来重复使用,就像字符串字面量和整型数字一样。你可以使用静态工厂方法来提供类似于valueOf()这样的方法,它可以从缓存中返回一个已经存在的Immutable对象,而不是重新创建一个。

immutable也有一个缺点就是会制造大量垃圾,由于他们不能被重用而且对于它们的使用就是”用“然后”扔“,字符串就是一个典型的例子,它会创造很多的垃圾,给垃圾收集带来很大的麻烦。当然这只是个极端的例子,合理的使用immutable对象会创造很大的价值。



Guava提供的ImmutableMap是一个支持多线程环境下面的安全的Map,同时效率也是很高的Key-Value集合,为什么他就是安全的呢。
    先看下面例子:
        ImmutableMap.Builder<String, Object> request = ImmutableMap.builder();
        request.put("one","1");
        request.put("two","2");
        request.put("three","3");
        Map<String, Object> map = request.build();
        
        让我们首先从Builder<T,T>入手进行分析

 public static class Builder<K, V> {
    TerminalEntry<K, V>[] entries;
    int size;


 public ImmutableMap<K, V> build() {
      switch (size) {
        case 0:
          return of();
        case 1:
          return of(entries[0].getKey(), entries[0].getValue());
        default:
          return new RegularImmutableMap<K, V>(size, entries);
      }
    }

}

上面的
 ImmutableMap.Builder<String, Object> request = ImmutableMap.builder();
这个实例创建的时候,只是创建了一个空的对象。
那么实际效用的是build()
  @SuppressWarnings("unchecked")
    Builder(int initialCapacity) {
      this.entries = new TerminalEntry[initialCapacity];
      this.size = 0;
    }


























         


posted @ 2015-01-08 19:47 abin 阅读(5077) | 评论 (0)编辑 收藏

没事干,写点小东西,练练手(Java <T> T):

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class GenericsTest {
public static void main(String[] args) {
String[] arr = new String[]{"1","2","3","4"};
List<String> list = get(arr);
System.out.println("list= "+list);
String result = transfer(true, "abin", "lee");
System.out.println("result= "+result);
}
public static <T> List<T> get(T... t){
List<T> list = new CopyOnWriteArrayList<T>();
for(T s:t){
list.add(s);
}
return list;
}
public static <T> T transfer(boolean flag,T first,T second){
T t = flag ? first : second;
return t;
}
}
posted @ 2015-01-08 16:59 abin 阅读(408) | 评论 (0)编辑 收藏

在windows下 :

    启动:

        1.cd c:/mysql/bin

        2.mysqld --console

    关闭:

        1.cd c:/mysql/bin

        2.mysqladmin -uroot shutdown

 

   还可以:

        启动:

        1.cd c:/mysql/bin

        2.net start mysql5

    关闭:

        1.cd c:/mysql/bin

        2.net stop mysql5

 

 

在linux下:

    采用netstat -nlp查看mysql服务的状态

 

    命令行方式:

        开启  ./mysqld_safe &

        关闭  mysqladmin -uroot shutdown

 

    rpm方式安装的

        开启  service mysql start

        关闭  service mysql stop

 

  在命令行启动mysql时,如不加"--console",启动、关闭信息不在界面中显示,而是记录在安装目录下的data目录里,文件名一般是hostname.err,通过此文件查看mysql的控制台信息。

posted @ 2015-01-07 13:13 abin 阅读(384) | 评论 (0)编辑 收藏

innodb作为事务型数据库的首选引擎,支持ACID事务,支持行级锁定,支持外键。并且InnoDB默认地被包含在MySQL二进制分发中,已经成为绝大多数OLTP系统的直选存储引擎。

索引作为数据库开发的一个重要方面,对于访问性能以及能否支持高并发,高tps的应用,起着决定性作用。Innodb存储引擎支持B+树索引以及自适应哈希索引,其中后者是由innodb引擎根据表的使用情况自动生成,无法进行人为创建。

B+树索引是目前关系型数据库中最常见最有效的索引,是基于二分查找而形成的一棵平衡术结构。我们来逐步了解。
MySQL就普遍使用B+Tree实现其索引结构

索引的主要作用:
1、快速定位记录
2、避免排序和使用临时表
3、可以将随机IO变为顺序IO




posted @ 2015-01-06 22:58 abin 阅读(358) | 评论 (0)编辑 收藏

分布式领域CAP理论,
Consistency(一致性), 数据一致更新,所有数据变动都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容错性) 可靠性
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。
关系数据库的ACID模型拥有 高一致性 + 可用性 很难进行分区:
Atomicity原子性:一个事务中所有操作都必须全部完成,要么全部不完成。
Consistency一致性. 在事务开始或结束时,数据库应该在一致状态。
Isolation隔离层. 事务将假定只有它自己在操作数据库,彼此不知晓。
Durability. 一旦事务完成,就不能返回。
跨数据库事务:2PC (two-phase commit), 2PC is the anti-scalability pattern (Pat Helland) 是反可伸缩模式的,JavaEE中的JTA事务可以支持2PC。因为2PC是反模式,尽量不要使用2PC,使用BASE来回避。
BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性:
Basically Available基本可用。支持分区失败(e.g. sharding碎片划分数据库)
Soft state软状态 状态可以有一段时间不同步,异步。
Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时高一致。
BASE思想的主要实现有
1.按功能划分数据库
2.sharding碎片 
BASE思想主要强调基本的可用性,如果你需要High 可用性,也就是纯粹的高性能,那么就要以一致性或容错性为牺牲,BASE思想的方案在性能上还是有潜力可挖的。
现在NoSQL运动丰富了拓展了BASE思想,可按照具体情况定制特别方案,比如忽视一致性,获得高可用性等等,NOSQL应该有下面两个流派:
1. Key-Value存储,如Amaze Dynamo等,可根据CAP三原则灵活选择不同倾向的数据库产品。
2. 领域模型 + 分布式缓存 + 存储 (Qi4j和NoSQL运动),可根据CAP三原则结合自己项目定制灵活的分布式方案,难度高。
这两者共同点:都是关系数据库SQL以外的可选方案,逻辑随着数据分布,任何模型都可以自己持久化,将数据处理和数据存储分离,将读和写分离,存储可以是异步或同步,取决于对一致性的要求程度。
不同点:NOSQL之类的Key-Value存储产品是和关系数据库头碰头的产品BOX,可以适合非Java如PHP RUBY等领域,是一种可以拿来就用的产品,而领域模型 + 分布式缓存 + 存储是一种复杂的架构解决方案,不是产品,但这种方式更灵活,更应该是架构师必须掌握的。 



http://www.jdon.com/37625
posted @ 2014-12-28 22:51 abin 阅读(357) | 评论 (0)编辑 收藏

仅列出标题
共50页: First 上一页 6 7 8 9 10 11 12 13 14 下一页 Last