Seven 的个人资料Think吧照片日志列表 工具 帮助

Z Seven

 
follow 7_bao at http://twitter.com
作者 
作者 
作者 
作者 
作者 
作者 
作者 
作者 

参加Ophone巡讲所感

    昨天参加了中国移动与csdn合办的的Ophone巡讲会,详见 http://ophone.csdn.net/。谈一下对此次会议的想法:
    


1、移动的哥们们一直在强调Ophone与Android的不同,他讲的有如下几个方面:
   a、传感器不同,说他们有各种各样的传感器。
   b、Ophone上有跟沃达丰和软银一起做的widget开发平台jil,而且可以轻松移植到symbian和wm系统。
   c、SDK更加开放,但是虽然基于Android,什么时候开源还未知,说涉及到一些法律问题。

   但是,具体有多少不同,比较一下下面的系统架构图就很清楚了。

这是Android的系统构架

这是Ophone的系统构架

    所以,区别显而易见了吧,呵呵。
    


2、在Widget处,着重讲了一下。那么到底中国移动的Widget与别的Widget有什么不同呢?大家都知道Widget是怎么回事,简单的说,就是使用网络编程方法编写的基于浏览器的小程序。移动非常聪明的对其归纳总结之后提出了一个BAE平台,移动对于BAE的解释如下BAE(Browser based Application Engine,基于浏览器技术的应用引擎)是部署在移动终端上的移动互联网应用运行环境,它支持移动Widget的跨平台运行。
    a、BAE除了具备基本的浏览器功能,还支持新的移动互联网应用形式——移动widget的运行,移动Widget具有小巧轻便、易于开发部署、用户体验出众等特点。
          b、中国移动在BAE项目基础上与沃达丰、软银一道在联合创新实验室(JIL,Joint Innovation Lab)当中开展了Mobile Widget系统的研究开发,定义统一的JIL Mobile Widget标准,开发软件参考实现,并进行着在全球范围内构建移动Widget生态环境的尝试。
        c、中国移动的BAE完全支持JIL Widget格式,也能兼容部分互联网上流行的Widget,如Apple Dashboard Widget等。
        从以上来看,移动的BAE确实是一个一劳永逸的东西,移动还推出了在线转换工具,可以把Ophone平台上的Widget进行转换而适应各种平台,还可以放到jil的统一平台上来供三大运营商挑选。而且Widget开发门槛比较低,只要会HTML+CSS+Javascript就能进行开发。但是只能开发一些轻量级的软件,就像PALM的web OS那样,整个系统就像是一个浏览器,软件就像一个有一个Widget,虽然时髦又超时代,但是,也意味着如果要进行大型3D游戏这样的项目是非常的困难。可是大部分时候,我们就是需要一些实用小巧的工具来记录和管理我们的生活,需要一些简单有创意的小游戏来kill time。所以,系统中加入Widget还是很明智的。


3、有Android这么好的基础,又加入了Widget这样的流行元素。再加上主事的是移动这个要经验有经验要金钱有金钱的主,而且还有扎根于各各大高校这么美好的策略,移动在3G时代还会稳操胜券吗?答案是:前途未卜。
    a、网通现在手里有Iphone。由于错误的估计了市场,导致Iphone一周才卖出去5000台,而且各种不利的花边新闻满天飞,但是网通拥有最成熟和终端数最多的3G技术。而且中国一不缺有钱人,二不缺好奇的人。只要调整好市场战略,把wifi加上,把那个难用的网通store好好弄弄,网通还是很有希望的。
    b、电信的资费目前是最为灵活的,适应于各个阶层。据说电信现在这在着手引进blackberry,话说此机在中国也有相当大的粉丝群,但是机虽好机,放到中国的大环境下,放到不同运营商不同的营销手法下,会产生什么效果,就拭目以待了。
    c、Ophone整合了很多东西,首先他兼容Android的大部分软件,其次他有自己的SDK和API,再次他有Widget,然后他有各大终端商支持,最后他诞生于中国这个从来不缺乏人才的过度。但是,我认为最致命的一点,他没有统一的硬件平台。在昨天的机型演示中,不同的机型有着不同的屏幕材质和屏幕分辨率,这个就很糟糕。用户看重的是什么,并不是分辨率能有多高,而是手机能用的有多舒服。电容屏跟电阻屏的使用体验就是不同的,适用于电容屏的游戏软件不一定适用于电阻屏,移动虽然在SDK中提出多分辨率的概念来解决这个问题,但是如果再出现一些非标准的分辨率,程序员岂不是很累?而用户喜欢一个软件,发现在他的机器上也并不合适,用户岂非不爽?所以,苹果之所以成功,自然有他的道理。移动把困难留给了开发人员和使用人员,必定要吃亏。
    这场大战才慢慢的拉开序幕,我也觉得在中国这片神奇的土地上,没有什么不可能,所以慢慢看看,一定会非常有趣。但不论怎么便,我相信,最终受益的还是开发人员和消费者。

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有许多不同版本,看你用的是哪个了。