Seven's profileThink吧PhotosBlogLists Tools Help

Blog


    JAVA入门1

    最近,慢慢开始着手编写一些java小程序。写代码的时间总是过得好快,今天用了几个小时研究了一下Java的IO。习惯于c++,感觉Java的IO好庞大!!有点乱,写了一个实用的小程序,能实现如下功能:
    1、从文件中一行一行的读数据
    2、将读出来的数据存放入vector中
    3、将vector中的内容在屏幕上打印出来

    package seven.test5;

    import java.io.*;
    import java.util.Vector;

    //@SuppressWarnings("unchecked")

    public class read_to_vector{
        public static void main(String[] args){
            try{
                Vector<String> vec = new Vector<String>();
               
                //input
                FileReader fileReader = new FileReader(args[0]);
                BufferedReader bufferedReader = new BufferedReader(fileReader);
               
                //output
                String s = null;
                while((s = bufferedReader.readLine()) != null)
                {
                    vec.add(s);
                }
                for(int i = 0; i< vec.size(); i++)
                {
                    System.out.print("向量位置:" + i + "\t");
                    System.out.println(vec.get(i));
                }
               
                fileReader.close();
                bufferedReader.close();
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }

    注:
    1、@SuppressWarnings("unchecked"),可以忽略掉程序在编译时出现的警告。
    2、Vector现在并不常用,习惯C++,见到这个比较亲切,应该多学学Collection类。
    3、Java 1.5中Vector形式为:Vector<> vector_Name = new Vector<>()。
    4、注意使用java.io.*使的异常捕捉。

    PS:
    1、一个从文件读内容,单个字符打印在屏幕上的程序:

    import java.io.FileReader;
    import java.io.IOException;
     
    public class readFile 
    {
      public static void readfile(String file){
        try{
           FileReader fr = new FileReader(file);
           int ch = 0;
           while((ch=fr.read())!=-1){
           System.out.println((char)ch);
           }

         }
    catch(IOException e){
            e.printStackTrace();
         }

         }

         public static void main(String[] args) {
            readfile("e:\\dd.txt");
         }

    }

    2、几个相关代码网址:
    http://coderdream.javaeye.com/blog/246936
    http://topic.csdn.net/u/20080224/19/b950e3e0-50f1-4a2c-9ac7-fd2344beae69.html
    3、中文Java API
    http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/index.html
    4、C++中上述功能的实现(对照一下,防止忘记)

    #include <fstream>
    #include <iostream>

    int main(int argc, char **argv)
    {
        string line;
        vector<string> vec;
        ifstream in(argv[1].c_str());
        while(getline(in,line))
        {
            vec.push_back(line);
        }
       
        for(int i = 0; i < vec.size(); i++)
        {
            cout << "向量位置:" << i << vec[i] << endl;
        }
        return 0;
    }



    到这里,看电影去了,希望能早日完成过渡。呵呵。


    itoa,将整型转为字符型

    该函数的头文件在c++中是"cstdlib.h"

    用 法:char *itoa(int value, char *string, int radix);

    详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写.

    参数:
    value: 待转化的整数。
    radix: 是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。
    * string: 保存转换后得到的字符串。

    返回值:
    char * : 指向生成的字符串, 同*string。

    代码:
    (实现功能:任意输入由a~z组成的字符串,对应输出这些字符串对应的字母表中的字母的位置)

    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <map>
    #include <cstdlib>
    #include <vector>

    using namespace std;

    int main()
    {
        string s, s1, s2;
        map<int, char> m;
        vector<string> n;
        int j = 'a';
        char temp[1];//注意,此处为数组。
        int t;

        for(int i = 1; i<= 26; ++i)
        {
            m[i]= (char)j;
            j++;
        }

        while(cin >> s)
        {
            for(int i =0; i< s.length(); ++i)
            {
                for(map<int, char>::iterator iter = m.begin(); iter!= m.end(); ++iter)
                {
                    if(s[i]==iter->second)
                    {
                        t= iter->first;
                       itoa(t,temp,10);
                        s2.append(temp);
                        s2.append(" ");
                    }
                }
            }
            n.push_back(s2);
            s2.clear();
        }

        for(int i=0; i<n.size(); ++i)
        {
            cout << n[i] << endl;
        }

        return 0;
    }

    结果:
    输入:abcdfed
            gfzdefg
    显示:1 2 3 4 6 5 4
            7 6 26 4 5 6 7

    [整理]SQL语言入门

    一、简介

          SQL是英文Structured Query Language的缩写,意思为结构化查询语言。

          SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。
          目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create, 以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。
      下面,我们就来详细介绍一下SQL语言的基本知识。
      一个典型的关系型数据库通常由一个或多个被称作表格的对象组成。数据库中的所有数据或信息都被保存在这些数据库表格中。数据库中的每一个表格都具有自己唯一的表格名称,都是由行和列组成,其中每一列包括了该列名称,数据类型,以及列的其它属性等信息,而行则具体包含某一列的记录或数据。以下,是一个数据库表格的实例。

    栏目 用户群
    新手上路 电脑初学者
    软件教室 一般的电脑用户
    设计教室 电脑设计爱好者
    开发教室 电脑编程人员


          该表格中“栏目”, “用户群”就是两个不同的列,而表格中的每一行则包含了具体的表格数据。

     

    二、 创建表格

          SQL语言中的create table语句被用来建立新的数据库表格。create table语句的使用格式如下:

    ----------------------------------------------
          create table tablename
          (column1 data type,
      column2 data type,
      column3 data type);
    ----------------------------------------------
      如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项:
    ----------------------------------------------
      create table tablename
      (column1 data type [constraint],
      column2 data type [constraint],
      column3 data type [constraint]);
    ----------------------------------------------
      举例如下:
    ----------------------------------------------
      create table employee
      (firstname varchar(15),
      lastname varchar(20),
      age number(3),
      address varchar(30),
      city varchar(20));
    ----------------------------------------------
      简单来说,创建新表格时,在关键词create table后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。注意,所有的SQL语句在结尾处都要使用“;”符号。
      使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在选择表格名称时不要使用SQL语言中的保留关键词,如select, create, insert等,作为表格或列的名称。
      数据类型用来设定某一个具体列中数据的类型。例如,在姓名列中只能采用varchar或char的数据类型,而不能使用number的数据类型。
      SQL语言中较为常用的数据类型为:
      char(size):固定长度字符串,其中括号中的size用来设定字符串的最大长度。Char类型的最大长度为255字节。
      varchar(size):可变长度字符串,最大长度由size设定。
      number(size):数字类型,其中数字的最大位数由size设定。
      Date:日期类型。
      number(size,d):数字类型,size决定该数字总的最大位数,而d则用于设定该数字在小数点后的位数。
    最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,unique这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件还包括 not null和primary key等。not null用来规定表格中某一列的值不能为空。primary key则为表格中的所有记录规定了唯一的标识符。

     

    三、 数据查询

          在众多的SQL命令中,select语句应该算是使用最频繁的。select语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。Select语句的语法格式如下:
    ----------------------------------------------
          select column1 [, column2,etc] from tablename
       [where condition];
          ([] 表示可选项)
    ----------------------------------------------
          select语句中位于select关键词之后的列名用来决定那些列将作为查询结果返回。用户可以按照自己的需要选择任意列,还可以使用通配符“*”来设定返回表格中的所有列。
          select语句中位于from关键词之后的表格名称用来决定将要进行查询操作的目标表格。
          Select语句中的where可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。
          在where条件从句中可以使用以下一些运算符来设定查询标准:

         = 等于
      > 大于
      < 小于
      >= 大于等于
      <= 小于等于
      <> 不等于

          除了上面所提到的运算符外,LIKE运算符在where条件从句中也非常重要。LIKE运算符的功能非常强大,通过使用LIKE运算符可以设定只选择与用户规定格式相同的记录。此外,我们还可以使用通配符“%”用来代替任何字符串。举例如下:
    ----------------------------------------------
      select firstname, lastname, city
      from employee
      where firstname LIKE ‘E%’;
    ----------------------------------------------
          (注意,字符串必须被包含在单括号内)
          上述SQL语句将会查询所有名称以E开头的姓名。或者,通过如下语句:
    ----------------------------------------------
          select * from employee
          where firstname = ‘May’;
    ----------------------------------------------
      查询所有名称为May的行。

     

    四、向表格中添加、更新、删除记录

          添加新记录:
          SQL语言使用insert语句向数据库表格中插入或添加新的数据行。Insert语句的使用格式如下:
    ----------------------------------------------
          insert into tablename
          (first_column,...last_column)
          values (first_value,...last_value);
    ----------------------------------------------
      例如:
    ----------------------------------------------
          insert into employee
          (firstname, lastname, age, address, city)
          values (‘Li’, ‘Ming’, 45, ‘No.77 Changan Road’, ‘Beijing”);
    ----------------------------------------------
          简单来说,当向数据库表格中添加新记录时,在关键词insert into后面输入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。

          更新记录:
          SQL语言使用update语句更新或修改满足规定条件的现有记录。update语句的格式为:
    ----------------------------------------------
          update tablename
          set columnname = newvalue [, nextcolumn = newvalue2...]
          where columnname OPERATOR value [and|or column OPERATOR value];
    ----------------------------------------------
      例如:
    ----------------------------------------------
          update employee
          set age = age+1
          where first_name= ‘Mary’and last_name= ‘Williams’;
    ----------------------------------------------
          使用update语句时,关键一点就是要设定好用于进行判断的where条件从句。

          删除记录:
          SQL语言使用delete语句删除数据库表格中的行或记录。Delete语句的格式为:
    ----------------------------------------------
          delete from tablename
          where columnname OPERATOR value [and|or column OPERATOR value];
    ----------------------------------------------
          例如:
    ----------------------------------------------
          delete from employee
          where lastname = May;
    ----------------------------------------------
          简单来说,当需要删除某一行或某个记录时,在delete from关键词之后输入表格名称,然后在where从句中设定删除记录的判断条件。注意,如果用户在使用delete语句时不设定where从句,则表格中的所有记录将全部被删除。

     

    五、删除数据库表格

          删除表employee
    ----------------------------------------------
          drop table employee;
    ----------------------------------------------
       

    解决jsp与sql server2005连接时com.microsoft.jdbc.sqlserver.SQLServerDriver错误

    昨天为了这个事情纠结了一天,后来在百度知道上找到了答案,调试通过。发上来记录一下:

    在SQL Server 2000 中加载驱动和URL路径的语句是
    
    String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
    String dbURL = "jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sample";
    
    而SQL Server 2005 中加载驱动和url的语句则为
    
    String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=sample";
    
    可以看出版本不同连接方法也是不同的。SQL Server有许多不同版本,看你用的是哪个了。 

    [PHP]mysql+apache2.2+PHP5 在vista下配置成功

    配置成功,显示了PHP在windows下的测试页面。

    测试成功 

    1、mysql的安装
    出现1045错误,解决方法请见文章解决mysql 安装出现1045错误的方法

    2、Apache2.2的安装与配置
    安装过程比较顺利,但是安装完成后,在任务栏图标显示stop的状态,后发现迅雷的bt使用了80端口,与apache安装时配置的端口冲突,将迅雷中bt端口更改后,Apache可以正常运行。
    http://127.0.0.1可以正常打开,而http://localhost/打不开,在C:\Windows\System32\drivers\etc目录下找到hosts文件,用记事本打开,见多出一行
    ::1             localhost
    上网查看,原来是因为ipv6的原因。删除这一行,就可以顺利运行了。

    3、PHP5的安装与配置
    (1)下载的直接解压版,解压后,放在C盘PHP5目录下,找到php.ini-dist文件,改名问php.ini,然后用任意文本编辑器打开,查找“extension_dir”,该选项用于指定PHP扩展模块的动态文件所在的目录,将PHP解压缩后,这些动态文件在\ext目录下,故将extension_dir=”./”改为extension_dir=”./ext”。

    (2)查找“Windows Extensions”,下边列出了一大串已经被注释掉的扩展模块,其中有两行为“;extension = php_mysql.dll”,“;extension = php_mysqli.dll”。这是mysql在php中的两种使用方式,前者是旧的面向过程的使用方式,后者是新的面向对象的使用方式。使用后者,将前面的分号去掉。

    (3)将解压缩到的php5目录下的libmysql.dll文件拷贝到windows的system32目录中。

    (4)添加PHP安装路径到windows系统的的环境变量PATH中。在控制面板中打开“系统”图标,选择高级系统设置,点击环境变量,在系统变量中找到PATH,双击,在最后处输入“;c:\php5;c:\php5\ext”,点击确定保存。注意,php5是将php文件解压缩到的文件夹

    (5)修改Apache的配置文件httpd.conf,方法如下:
    查找“LoadModule”,在最后一个含有该词的行的下边插入:
    LoadModule php5_module “c:/php5/php5apache2.2.dll”    加载php5动态库文件php5apache2.2.dll(根据apache版本不同进行选择)
    AddType application/x-http-php .php    让Apache识别.php文件
    PHPIniDir “C:/php5”     制定PHP配置文件,即之前打开的php.ini。(注意斜杠不用弄错)
    查找“DocumentRoot”,将#DocumentRoot “C:/Program Files/Apache Group/Apache2/htdocs”改成自己的站点的根目录,假如所做的网站存在c:\mywebsite下,则改成DocumentRoot “C:/mywebsite”。保存文件。
    查找“deny”,找到
    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
    </Directory>
    将其修改为:
    <Directory />
        Options Indexes FollowSymLinks
        AllowOverride None
        Order deny,allow
        allow from all
    </Directory>

    4、最后在网站的根目录中建立一个test.php文件,内容:
    <?
        phpinfo();
    ?>
    在浏览器中输入“http"://localhost/test.php”,如果出现最开始的页面,就代表配置成功了。


    [PHP]开始学习PHP

    下决心将PHP的学习开始,会陆续把一些体会放上来。加油!

    建立文件时动态分配文件名

    见代码:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>

    using namespace std;

    int main()
    {
        string name;
        vector<int> v(5,200); //建立一个vector名为v,内容为5个200
        while(cin >> name) //输入想命名的文件名
        {
            ofstream outfile(name.c_str()); //使用name.c_str()将文件名命名成name的内容
            for(size_t i = 0; i < v.size(); ++i)
            {
                outfile << v[i] << endl;
            }
        }
        return 0;
    }

    在循环中使用cin需要注意的问题

    先看一段错误的伪代码:

    void A()
    {
        int i;
        while(cin >> i)
        {
         …
        };
    }

    int main()
    {
        int j;
        while(cin >> j)
        {
          A();
          …
         };
    return 0;
    }

    本应该当运行到主程序中的函数A()时,需要不断的输入i,当键盘键入ctrl+z时,循环结束,然后继续循环,要j的值。可是这段程序的结果是在运行了一次循环之后,程序就结束了。所以,问题就在于,当这样嵌套循环时,当键入ctrl+z,系统就认为整个循环结束了。
    更改方法:
    int main()
    {
        int j;
        while(cin >> j)
        {
          A();
          …
          fflush(stdin);
          cin.clear();
         };
    return 0;
    }

    问题解决。