linux系统安装mysql

linux安装mysql服务分两种安装方法:

①源码安装,优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错;

②使用官方编译好的二进制文件安装,优点是安装速度快,安装步骤简单,缺点是安装包很大,300M左右。以下介绍linux使用官方编译好的二进制包安装mysql。

工具/原料

  • mysql-5.6.17-linux-glibc2.5-i686.tar.gz
  • mysql-5.6.17-linux-glibc2.5-x86_64.tar.gz
  • linux系统,32位、64位均可

方法/步骤

  1. 到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux – Generic (glibc 2.5) (x86, 64-bit),32位系统下载Linux – Generic (glibc 2.5) (x86, 32-bit)

    1

    2

     

  2. 解压32位安装包:

    进入安装包所在目录,执行命令:tar mysql-5.6.17-linux-glibc2.5-i686.tar.gz

    3

     

  3. 复制解压后的mysql目录到系统的本地软件目录:

    执行命令:cp mysql-5.6.17-linux-glibc2.5-i686 /usr/local/mysql -r

    注意:目录结尾不要加/

    4

     

  4. 添加系统mysql组和mysql用户:

    执行命令:groupadd mysql和useradd -r -g mysql mysql

    5

    6

     

  5. 安装数据库:

    进入安装mysql软件目录:执行命令 cd /usr/local/mysql

    修改当前目录拥有者为mysql用户:执行命令 chown -R mysql:mysql ./

    安装数据库:执行命令 ./scripts/mysql_install_db –user=mysql

    修改当前目录拥有者为root用户:执行命令 chown -R root:root ./

    修改当前data目录拥有者为mysql用户:执行命令 chown -R mysql:mysql data

    到此数据库安装完毕

    7

     

  6. 启动mysql服务和添加开机启动mysql服务:

    添加开机启动:执行命令cp support-files/mysql.server /etc/init.d/mysql,把启动脚本放到开机初始化目录

    启动mysql服务:执行命令service mysql start

    执行命令:ps -ef|grep mysql 看到mysql服务说明启动成功,如图

    8

     

  7. 修改mysql的root用户密码,root初始密码为空的:

    执行命令:./bin/mysqladmin -u root password ‘密码’

    9

     

  8. 把mysql客户端放到默认路径:

    ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql

    注意:建议使用软链过去,不要直接包文件复制,便于系统安装多个版本的mysql

    10

Andorid中打开Activity获取返回值

在开发App中经常遇到在一个页面上打开另一个页面用户操作之后返回,第一个页面获取第二页面用户的操作和输入内容等。这种场景就会用到Activity的返回值。

第一个Activity中的代码有两个部分要注意

1.打开第二个activity的方法和参数

context.startActivityForResult(intent, 123);

使用的是startActivityForResult方法,这个方法里的第二个参数是自定义的requestCode,这个参数是为了区分打开多个页面返回的时候可以区分开来。

2.接收第二个页面返回值

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
		if(requestCode == 123){
			//...
			if(resultCode == 1){
				//第一种返回
			}else if(resultCode ==2){
				//第二种返回
			}
		}
	}

重写方法onActivityResult ,其中requestCode参数跟打开第二页面传入的参数是一样的。第二个参数resultCode是第二页面返回的状态吗,有可能有多重可能的返回,这样就可以根据不同的状态做不同的操作。

下面看看第二页面返回

1.在按钮的事件里面返回

Button okButton = (Button) findViewById(R.id.ok_button);
okButton.setOnClickListener(new View.OnClickListener() {
	public void onClick(View view){
		Intent intent = new Intent();
		//...
		setResult(1, intent);
		finish();
	}
});

这里的setResult里的第一个参数就是第一个acitivty里面的onActivityResult的第二个参数resultCode,可以根据这个进行判断是哪个事件返回的。

2.在按下手机返回按键的时候返回

    @Override
    public void onBackPressed() {
		Intent intent = new Intent();
		//...
		setResult(2, intent);
		finish();
	}

这里需要重写方法onBackPressed ,注意不能调用父类的方法,否则第一个activity接收不到状态和intent数据,因为父类里面自动返回RESULT_CANCEL这个状态和空的数据。

 

基本上了解了这些,绝大部分的App就已经满足要求了,一个页面有可能打开多个第二页面,某个第二页面可能有多重可能返回,这些都能满足要求。

PHP:Fatal error: Class ‘COM’ not found in … 的处理办法

PHP:Fatal error: Class ‘COM’ not found in … 的处理办法
1、首先在windows的“服务”里面检查COM+服务是否已经启动。如果未启动,请启动它。
大概是该服务:Windows Management Instrumentation

2、检查php目录ext文件夹下面php_com_dotnet.dll是否存在。(顺便说一下,ext通常作为php程序的扩展目录,在安装php的时候一般已经设置好。否则就应该不仅仅报主题所说的错咯。)

3、如果没问题,在php.ini里面加入以下语句:

[PHP_COM_DOTNET]
extension=php_com_dotnet.dll

4、php.ini中设置
com.allow_dcom = true

5.PHP版本
PHP 5.4.5以前的版本,只需要在php.ini中把com.allow_dcom = true打开就可以了,但是5.4.5版本以后,PHP把com/dotnet 模块集成到了一个单独的扩展中,所以需要在php.ini中加一行扩展extension=php_com_dotnet.dll,是加一行,不是打开,默认配置文件中没有这一行的,然后重启IIS或Apache,再次运行就正常了!

PHP字符编码问题

一,php编码转换

        1.通过iconv()函数实现编码转换
语法:iconv(string in_charset,string out_charset,string str)
将指定字符串str由in_charset编码格式转换成out_charset编码格式,返回bool值。
2.通过mb_convert_encoding()函数实现编码转换
语法:mb_convert_encoding(string str,string to_encoding[,mixed from_encoding])
将字符串str的编码由from_encoding转换为to_encoding。
二,检测php字符串的编码
通过mb_detect_encoding()函数来检测字符串使用的是何种字符编码。
三,字符编码优先级
由高—>低
1.http消息报头的Content-Type字段中的charset参数。
2.通过meta元素声明,将http-equiv设置成Content-Type。
3.一些元素的charset属性设置。
四,解决页面中的php乱码问题
数据库中数据的输入和输出产生的乱码,可以通过PHP的mysql_query()函数设置来解决,而页面中如果出现乱码,则可以使用下面的两种方法解决。
(1)使用meta标签设置页面编码

meta标签的作用是声明客户端的浏览器用什么字符编码显示该页面。
(2)通过header()函数设置页面的编码格式
header(“content-type;text/html;charset=gb2312”);
header()函数的作用是把括号内的信息发到HTTP标头。

五、如果浏览器不能选择你在页面中默认的字符编码来显示页面

可以设置php中的php.ini文件中的default_charset = “编码”, 例如:default_charset = “gb2312”

这里决定了浏览器选择的默认编码。

java调用linux命令(续)

之前文章有讲到使用方法Runtime.getRuntime().exec(command)执行操作系统的命令,在很多情况下是没有问题的,但是在某些环境下可能会导致执行的进程假死也就是挂起了,一直停在那里,其根本原因是命令行的输出流在某些情况下没有地方输出,导致命令一直等待输出,下面写个方法把命令的输出流读出来就解决了问题。

@SuppressWarnings("static-access")
public static int doWaitFor(Process process) {
  InputStream in = null;
  InputStream err = null;
  int exitValue = -1; // returned to caller when p is finished
  try {
    in = process.getInputStream();
    err = process.getErrorStream();
    boolean finished = false; // Set to true when p is finished
    while (!finished) {
      try {
        while (in.available() > 0) {
          // Print the output of our system call
          Character c = new Character((char) in.read());
          System.out.print(c);
        }
        while (err.available() > 0) {
          // Print the output of our system call
          Character c = new Character((char) err.read());
          System.out.print(c);
        }
        // Ask the process for its exitValue. If the process
        // is not finished, an IllegalThreadStateException
        // is thrown. If it is finished, we fall through and
        // the variable finished is set to true.
        exitValue = process.exitValue();
        finished = true;
      } catch (IllegalThreadStateException e) {
        // Process is not finished yet;
        // Sleep a little to save on CPU cycles
        Thread.currentThread().sleep(500);
      }
    }
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    try {
      if (in != null) {
        in.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    if (err != null) {
      try {
        err.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
  return exitValue;
}

 

在执行命令之后调用上面的方法获取命令行输出流:

Process process = Runtime.getRuntime().exec (“ls”);
doWaitFor(process);

ORACLE存储过程中使用游标

游标的使用方式相当之多,可以作为参数返回,也可以在存储过程内部使用当做局部的变量,存储过程里面使用的时候也是多种多样,这里记录一下最简单的一种使用方式,如下所示:

    DECLARE
  	      --类型定义
        CURSOR C_CUST_INFO IS
            SELECT  
            A.BUREAU_NO,
            B.YHBH AS YHBH,
            B.YHMC AS YHMC,
            B.YDDZ AS YDDZ,
            B.CBQDBH AS CBQDBH,
            B.YHMC AS YHMC2,
            B.LXDH AS LXDH
            FROM YX_READING_TASK A , YX_READING_TASK_DATA B 
            WHERE A.TASKID = B.TASKID 
            ORDER BY B.YHBH;
        --定义一个游标变量
        C_ROW C_CUST_INFO%ROWTYPE;
        --V_CUST_ID VARCHAR2(32);
    BEGIN
        FOR C_ROW IN C_CUST_INFO LOOP
            
            INSERT INTO CUST_INFO
            (
              BUREAU_NO,
              CUST_ID,
              CUST_NAME,
              CUST_ADDR,POWERZONE,LINK_MAN,LINK_PHONE
            )VALUES(
              C_ROW.BUREAU_NO,
              C_ROW.YHBH,
              C_ROW.YHMC,
              C_ROW.YDDZ,
              C_ROW.CBQDBH,
              C_ROW.YHMC2,
              C_ROW.LXDH
            );
            
            --V_CUST_ID := C_ROW.YHBH;
            
        END LOOP;
    END;

注意游标的select语句里面不能有相同列名,要不然会报错,可以用别名来处理相同列名。在declare块里面可以定义很多变量,然后在loop里面可以使用,这样就能够处理很多复杂的业务逻辑了。