楼主: lastwinner

[转载] JAVA应用程序设计开发

[复制链接]
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
91#
 楼主| 发表于 2006-6-30 17:36 | 只看该作者
16.3.2 Statement类及其子类
例16.2 Insert.java及程序说明

1: import java.net.URL;
2: import java.sql.*;
3:
4: class Insert{
5: public static void main(String args[]){
6: String url="jdbcdbc:demo";
7: try{
  //下载jdbc-odbc bridge 驱动器
8: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver";//参见例16.1的第11句的注释
9: //与驱动器建立连接
10: Connection con=DriverManager.getConnection(url,"user","password";
  //创建一个Statement对象
11: Statement stmt=con.createStatement();
12: //执行SQL声明
13: int count1=stmt.executeUpdate("INSERT INTO testTable(id,name) VALUES(1,'wu')";
14: int count2=stmt.executeUpdate("INSERT INTO testTable(id,name) VALUES(2,'wang')";
15: //打印执行结果
16: System.out.println("Insert successfully!";
17: System.out.println("Updated rows is"+(count1+count2)+".";
  //关闭连接
18: stmt.close();
19: con.close();
20: }catch(SQLException ex){
  //SQL异常信息
21: System.out.println("\n***SQLException caught ***\n";
22: while(ex!=null){
23: System.out.println("SQLState:"+ex.getSQLState());
24: System.out.println("Message:"+ex.getMessage());
25: System.out.println("Vendor:"+ex.getErrorCode());
26: ex=ex.getNextException();
27: System.out.println("";}
28: }catch(java.lang.Exception ex){
29: ex.printStackTrace();
30: }
31: }
32: }

-----

-------

例16.3 Insert2.java及程序说明

1:import java.net.URL;
2:import java.sql.*;
3:
4:class Insert2{
5: public static void main(String args[]){
6: String url="jdbcdbc:demo";
7: String data[][]={{"5","xu"},{"6","yan"}};
8: try{
  //下载jdbc-odbc bridge 驱动器
9: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver";//关于此句请参见例16.1的11句注释
10: //与驱动器建立连接
11: Connection con=DriverManager.getConnection(url,"user","password";
12: //创建一个ParepareStatement对象
13: PreparedStatement pstmt=con.prepareStatement(
14: "INSERT INTO testTable (id,name) VALUES(?,?)");
15: //参数赋值,执行SQL声明
16: for (int i=0;i<data.length;i++){
17: pstmt.setInt(1,Integer.parseInt(data[0]));
18: pstmt.setString(2,data[1]);
19: pstmt.executeUpdate();
20: }
21: System.out.println("Insert successfully!");
22: //关闭连接
23: pstmt.close();
24: con.close();
25: }catch(SQLException ex){
  //打印SQL异常信息
26: System.out.println("\n***SQLException caught ***\n");
27:while(ex!=null){
28:System.out.println("SQLState:"+ex.getSQLState());
29:System.out.println("Message:"+ex.getMessage());
30:System.out.println("Vendor:"+ex.getErrorCode());
31:ex=ex.getNextException();
32:System.out.println("");}
33:}catch(java.lang.Exception ex){
34:ex.printStackTrace();
35:}
36:}
37:}


----------

------------

例16.4 Callable.java。

import java.net.URL;
import java.sql.*;
class Callable{
public static void main(String args[]){
String url="jdbcdbc:test";//注意这里不再是demo数据源
try{
//下载jdbc-odbc bridge 驱动器
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//关于此句请参见例16.1的11句注释
//建立连接
Connection con=DriverManager.getConnection(url,"my-user","my-password");
//创建一个CallableStatement用于执行储存过程
CallableStatement cstmt=con.prepareCall("{call Search(?)}");
//参数赋值
cstmt.setInt(1,934678);
//执行储存过程。
cstmt.execute();
//处理执行结果
display(cstmt,"Search");
CallableStatement stmt=con.prepareCall("{call Delete(?)}");
stmt.setInt(1,934655);
stmt.execute();
display(stmt,"Delete");
//关闭连接
stmt.close();
cstmt.close();
con.close();
}
catch(SQLException ex){
//打印SQL异常信息
System.out.println("\n***SQLException caught ***\n");
while(ex!=null){
System.out.println("SQLState:"+ex.getSQLState());
System.out.println("Message:"+ex.getMessage());
System.out.println("Vendor:"+ex.getErrorCode());
ex=ex.getNextException();
System.out.println("");
}
}
catch(java.lang.Exception ex){
ex.printStackTrace();
}
}
//处理执行储存过程的结果
private static void display(CallableStatement cstmt,String name)
throws SQLException{
System.out.println("Excute procedure"+name);
while(true){
//处理情况为:执行结果影响了记录
int rowCount=cstmt.getUpdateCount();
if(rowCount>0){
System.out.println("Updated rows is"+rowCount+".");
//判断是否还有等待处理的结果
if(!cstmt.getMoreResults())break;
continue;
}
//处理情况为:执行结果为ResultSet
ResultSet rs=cstmt.getResultSet();
if(rs!=null){
ResultSetMetaData rsmd=rs.getMetaData();
//打印结果集的标题
int numCols=rsmd.getColumnCount();
for(int i=1;i<=numCols;i++)
System.out.println("\t\t"+rsmd.getColumnLabel(i)+"  ");
System.out.println();
//打印结果集的内容
boolean more = rs.next();
if(!more) System.out.println("\t\t0 \t\t\t0 \t\t0");
while(more){
for(int i=1;i<=numCols;i++)
System.out.print("\t\t"+rs.getString(i)+"  ");
more=rs.next();
System.out.println();
}
//判断是否还有等待处理的结果
if(!cstmt.getMoreResults()) break;
continue;
}
//处理情况为:执行结果影响了0条记录
if(rowCount==0)
System.out.println("No row is updated!");
if(!cstmt.getMoreResults()) break;
}
}
}

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
92#
 楼主| 发表于 2006-6-30 17:36 | 只看该作者
16.3.3 结果集ResultSet
import java.net.URL;
import java.sql.*;
public class Select
{
public static void main(String args[])
String url = "jdbcdbc:demo";
String query = "SELECT * FROM testTable";
try
{
//装入驱动器jdbc-odbc bridge driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver";
//建立连接
Connection con=DriverManager.getConnection(url,"user","passwd";
//创建声明对象
Statement stmt=con.createStatement();
//发出查询要求,获得结果集
ResultSet rs=stmt.executeQuery(query);
//显示结果集各行各列
System.out.println("The detail of testTable is:";
ResultSetMetaData rsmd=rs.getMetaData();
//获得结果集列数
in numCols=rsmd.getColumnCount();
//显示列标题
for(int i=1;i<=numCols;i++)
{
if(i>1) System.out.print(",";
System.out.print(rsmd.getColumnLabel(i));
}
System.out.println("";
//显示结果集信息
while(rs.next())
{
//显示一行
for(int i=1;i<=numCols;i++)
{
if(i>1) System.out.print(",";
System.out.print(rs.getString(i));
}
System.out.print("";
}
//关闭结果集
rs.close();
//关闭声明
stmt.close();
//关闭连接
con.close();
}
catch(SQLException ex)
{
//处理异常
System.out.print("\n * * * SQLException caught * * *\n";
while(ex != null)
{
System.out.println("SQLState:"+ex.getSQLState());
System.out.println("Message:"+ex.getMessage());
System.out.println("Vendor:"+ex.getErrorCode());
ex = ex.getNextException());
System.out.println("";
}
}
catch(java.lang.Exception ex)
{
ex.printstackTrace();
}
}

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
93#
 楼主| 发表于 2006-6-30 17:36 | 只看该作者
16.3.4 DatabaseMetaData
import java.net.URL;
import java.sql.*;
public class DBMeta
{
public static void main(String args[])
String url = "jdbcdbc:demo";
try
{
//装入驱动器jdbc-odbc bridge driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver";
//建立连接
Connection con=DriverManager.getConnection(url,"user","passwd";
//获取DatabaseMetaData对象
DatabaseMetaData dma = con.getMetaData();
//驱动器和URL信息
System.out.println("\nConnected to" + dma.getURL());
System.out.println("Driver" + dma.getDriverName());
System.out.println("Version" + dma.getDriverVersion());
//数据库信息
System.out.println("\nDataBase name:" + dma.getDatabaseProductName()+dma.getDatabaseProductVersion());
System.out.println("DataBase supports SQL keywords:\n\t" + dma.getSQLKeywords());
//数据库功能信息
System.out.print("\nDataBase supports ANSI92 Entry Level SQL:";
if(dma.supportsANSI92EntryLevelSQL())
System.out.println("YES";
else
System.out.println("NO";

System.out.print("DataBase supports ANSI92 Full SQL SQL:";
if(dma.supportsANSI92FullSQL())
System.out.println("YES";
else
System.out.println("NO";


System.out.print("DataBase supports Stored Procedure:";
if(dma.supportsStoredProcedures())
System.out.println("YES";
else
System.out.println("NO");


System.out.print("DataBase supports Outer Join: ");
if(dma.supportsOuterJoins())
System.out.println("YES");
else
System.out.println("NO");

//关闭连接
con.close();
}
catch(SQLException ex)
{
//处理异常
System.out.print("\n * * * SQLException caught * * *\n");
while(ex != null)
{
System.out.println("SQLState:"+ex.getSQLState());
System.out.println("Message:"+ex.getMessage());
System.out.println("Vendor:"+ex.getErrorCode());
ex = ex.getNextException());
System.out.println("");
}
}
catch(java.lang.Exception ex)
{
ex.printstackTrace();
}
}

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
94#
 楼主| 发表于 2006-6-30 17:37 | 只看该作者
16.3.5 JDBC数据类型及类型转换
  一、JDBC的数据类型

  JDBC的sql包中除了与数据库连接有关的抽象接口及与驱动器有关的DriverManager、DriverPropertyInfo等类型外,还定义了若干数据类,用以代表数据库中可能用到的SQL类型。下面我们就对它们逐一进行简略介绍。

  1、sql.Date

  sql包中的日期类Date是util包中Date类的子类,实际上也是util.Date类的子集。它只处理年月日,而忽略小时和分秒,用以代表SQL的DATE信息。

  Date类的构造方法为:

  public Date(int year, int mouth, int day)

其中参数格式同util.Date类的构造方法一样,年参数为所需设定的年份减去1900所得的整数值,月参数为0至11,日参数为1至31。如1998年1月23日所对应创建日期类的方法调用为:

  Date d=new Date(98,0,23);

  Date类还提供两个与String类互相转换的方法,分别是:

  public static Date valueOf(String s)

将字符串类参数转换为日期类对象。其中String类参数S的格式为“年-月-日”,加“1997-04-12”。

  public String toString()

将日期类对象转换为String类对象表示,同样采用“年-月-日”的格式。

  2、sql.Time

  该类是util.Date类的子类,也是它的一个子集。在Time类里,只处理小时和分秒,代表SQL的TIME类型。它与sql.Date合起来才表示完整的util.Date类信息。

  Time类的构造方法为:

  public Time(int hour,int minute,int second)

其中小时参数值为0至23,分秒参数取值均为0至59。

  与sql.Date一样,Time类也定义了两个与String类互相转换的函数ValueOf和String。不同的是String类对象的格式为“小时:分:秒”,如“12:26:06”。

  3、sql.Timestamp

  这个类也是util.Date类的子类,其中除了包含年月日、小时和分秒和信息之外,还加入了纳秒信息(nanosecond),1纳秒即1毫微秒。Timestamp类用来代表SQL时间戳(Timestamp)类型信息。

  Timestamp类的构造方法为:

  public Timestamp(int year, int mouth, int date, int hour, int minute, int second, int nano)其中纳秒参数的取值从0至999,999,999,其余各参数同前。

  Timestamp类特别定义了设置和获得纳秒信息的方法,分别是

  public getnanos()

  获取时间戳的纳秒部分

  public void setNanos(int n)

  以给定数值设置时间戳的纳秒部分

  4、sql.Types

  Types类是Object类的直接子类。在这个类中以静态常量的形式定义了可使用的SQL的数值类型。所有这些类型常量都以前缀

  public final static int

的形式标明是公有静态整数,且不可改动。具体的类型名和含义如表16.1所示。其中OTHER用来代表数据库定义的特殊数据,可以用getObject或setObject方法将其映射为一个Java的Object对象。

  表16.1 Types中定义的SQL类型

类型名 含义
BIGINT 长整型数
BINARY 二进制数
BIT 比特数
CHAR 字符型
DATE 日期型
DECIMAL 十进制数
DOUBLE 双精度数
FLOAT 浮点数
INTEGER 整数
LONGVARBINARY 可变长型二进制数
LONGVARCHAR 可变长型字符
NULL 空类型
NUMERIC 数值型
OTHER 其他类型
REAL 实数
SMALLINT 短整型
TIME 时间类型
TIMESTAMP 时间戳类型
TINYINT 微整型
VARBINARY 可变二进制数
VARCHAR 可变字符型

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
95#
 楼主| 发表于 2006-6-30 17:39 | 只看该作者
  二、SQL与Java

  由于SQL数据类型与Java的数据类型不一致,因而在使用Java类型的应用程序与使用SQL类型的数据库之间,需要某种读写类型转换机制。实际上我们前面介绍的ResultSet类的“get”系列方法,Statement及其子类的“set“系列方法和registerOutParameter方法,都是这一转换机制的组成部分。

  需要进行的读写转换包括三种情况:

  第一种情况是从数据库中读取数值后,存放在ResultSet对象中的是SQL类型的数据。而调用“get”系列方法时,JDBC才将SQL类型转换为指定的Java类型。在一般情形下,SQL类型相对应的Java类型如表16-2所示。


  表16.2 SQL类型一般所对应的Java类型

SQL type Java type
CHAR java.lang.String
VARCHAR java.lang.String
LONGVARCHAR java.lang.String
NUMERIC java.lang.Bignum
DECIMAL java.lang.Bignum
BIT boolean
TINYINT byte
SMALLINT short
INTEGER int
BIGINT long
REAL float
FLOAT double
DOUBLE double
BINARY byte[]
VARBINARY byte[]
LONGVARBINARY byte[]
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp

  当然,在使用时用户可以指定将SQL类型转换为某个需要的特定类型而不遵循表16.2。例如在结果集中的某个FLOAT型数值,依标准转换应用使用getDouble方法获取,但实际上按用户的不同需求也可以使用getFloat,getInt,甚至gefByte方法获取,但只是有可能影响数值精确度。表16.3列出了对每一SQL类型可用以获取“get”方法的清单,其中“+”表示可以使用该方法,“*”表示最好使用该方法。

  表16.3 获取SQL类型使用的“get”方法

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
96#
 楼主| 发表于 2006-6-30 17:39 | 只看该作者
注: “+”表示允许使用;“*”表示推荐使用

  第二种情形是当用户发出的SQL操作通过PrepareStatement和CallableStatement执行,带有向数据库输入的参数时,需使用这些声明类的“set”系列方法。例如对PrepareStatement类对象pstmt ,调用方法

  pstmt.setLong(1,2222222)

驱动器将自动把2222222转换为SQL的BIGINT类型数据,发往数据库。表16-4给出在这一情形下Java数据转换为SQL数据的标准。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
97#
 楼主| 发表于 2006-6-30 17:40 | 只看该作者
  表16.4 Java类型所对应转换的SQL类型

Java type SQL type
java.lang.String VARCHAR or LONGVARCHAR
java.lang.Bignum NUMERIC
boolean BIT
byte TINYINT
short SMALLINT
int INTEGER
long BIGINT
float REAL
double DOUBLE
byte[] VARBINARY or LONGVARBINARY
java.sql.Date DATE
java.sql.Time TIME
java.sql.Timestamp TIMESTAMP

  最后一种情形是在使用CallableStatement时,用户可能用到INOUT参数。这时的转换过程最为复杂。首先,使用“set”系列方法给这些参数赋值,驱动器使用表16.4所示的标准映射将Java类型数据换为SQL类型,再发往数据库。其次,使用CallableStatement的registerOutParameter方法,为每一个参数登记其作为返回值时的SQL类型。这一登记类型必须是在sql.Types中定义的名称,如表16.1所示。最后在执行完毕后使用“get”方法取回参数的结果值。

  下面的程序片段给出了一次INOUT参数从赋值到取值的完整转换过程,其中cstmt是CallableStatement的实例对象,有两个INOUT参数:

  cstmt.setByte(1,25);//参数赋值

  cstmt.setLong(2,4678935);

  cstmt.registerOutParameter(1,java.sql.Types.TINYINT);

  cstmt.registerOutParameter(2,java.sql.Type.BIGINT);//返回类型类型登记

  ResultSet rs=cstmt.executeUpdate();

  while(rs.next()){...//处理结果}

  byte x=cstmt.getByte(1);//取回参数输出值;

  long l=cstmt.getLong(2);

  我们可以写出这两个INOUT参数的类型转换流程如下所示:

       setByte   executeUpdate   getByte
        ↓       ↓        ↓
  参数1 byte———→TINYINT————→TINYINT———→byte

       setLong   executeUpdate   getLong
        ↓       ↓         ↓
  参数2 long———→BIGINT————→BIGINT———→long

      图16.12参数转换流程图

  最后要提醒用户注意的是,INOUT参数的“get”方法和“set”方法的类型应当是一致的,如例中参数1的setByte和getByte方法。

  本章小结
  这一章我们介绍了Java的数据库接口JDBC,说明了建立数据库连接、执行SQL声明以及获取执行结果的完整过程,还列出了Java数据类型与数据库数据类型的对应和转换。通过这一章的学习,读者可以掌握如何使用JDBC和java.sql包括进行各种SQL操作,对网络数据库的用户尤为有用。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
98#
 楼主| 发表于 2006-6-30 17:40 | 只看该作者
附录
附录A Unicode简介
  Unicode与ISO-10646有着密切的关系。ISO-10646提供了一套32位的编码标准。它可以看成是各种国家标准的组合,将已存在的字符编码标准简单地相加在一起。Unicode是一个16位的标准,它把各种语言字符编进一个统一的码表,即使字符分属于一种语言文字的不同变体(如汉字的简体和繁体),也只有一种表示。Unicode与ISO-10646在某种程度上是统一的。1993年ISO-10646被分成两种形式:UCS-2(UCS是Universal Character Set的简称)和UCS-4。前者是16位的,后者是32位的。前者ISO-10646编码标准中第0段第0组的字符集,是后者的子集。UCS-2与Unicode1.1版的字符一一对应,只是Unicode1.1版为某些字符提供了另外的语义。这个编码标准基本上包括了所有广泛应用的语言文字。
  Unicode字符集大致包括以下几部分:
  0000-1FFF 字母表
  2000-2FFF 符号和标点
  3000-4DFF CJK辅助符号(CJK指中、日、韩汉字)
  4E00-9FFF CJK统一的表意文字,即广义的汉字。
  A000-DFFF 保留部分
  E000-FFFD 限制使用
EEEE和FFFF不包括在字符集内。
  Unicode字符集与ASCII字符集也有对应关系。如Unicode的0020-007E为基本拉丁字母,对应于ASCII中的0x20-0x7E。另外大多数符号与现行国际标准又致对应。如:
  0370-03CF 基本希腊字母   基于ISO 8859-7
  0400-04FF 斯拉夫语字母   基于ISO 8859-5
  05D0-05EA 基本希伯来语字母 基于ISO 8859-8
等等。
  在Java1.02版本中,字节流的输入输出忽略了Unicode字符的高八位,因而实际上只支持ASCII字符。在1.1版本中增加了字符流的输入输出,可以支持真正Unicode字符集。
  在纯英文Java环境中想使用其它文字时,需要做两步工作:一是要安装字体,二是要修改JDK的字体设置文件font-properties。比如,要使用亚洲语言的字体,在安装相应字体后,还要把font.properties文件替换为相应的font.properties.<语言代号>文件。如在Win32平台的JDK1.1.1中已包含了4个文件(在\lib目录下),分别对应不同的广义汉字:
  font.properties.ja  日文
  font.properties.ko  韩文
  font.properties.zh  简体汉字
  font.properties.zh_TW 繁体汉字
  如果使用其它文字,还需自己编写相应的font.properties.<语言代号>文件。另外还可通过编辑font.properties文件实现同时使用多种语言文字。上述的扩充字体步骤在今后的Java版本中很可能会改变,有兴趣的读者可以参考Sun公司在网上发布的JDK文档中关于国际化的部分。
  Unicode字符集的实现与平台有关,其可用的字体受到平台限制。如Windows平台就只提供了部分的Unicode字符。因此,目前应用Unicode还有一定的障碍。但Java的国际化是必然趋势,今后Java开发工具一定会很好地解决这个问题。


附录B 类库一览(JDK1.1)
附录C Java及相关资源网址

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
99#
 楼主| 发表于 2006-6-30 17:41 | 只看该作者
全文转完,谢谢浏览

使用道具 举报

回复
论坛徽章:
104
开发板块每日发贴之星
日期:2005-04-10 01:02:10ITPUB元老
日期:2005-04-12 09:30:45开发板块每日发贴之星
日期:2005-04-26 01:02:05操作系统板块每日发贴之星
日期:2005-04-27 01:01:42开发板块每日发贴之星
日期:2005-05-02 01:02:03开发板块每日发贴之星
日期:2005-05-27 01:02:08开发板块每日发贴之星
日期:2005-06-10 01:02:10开发板块每日发贴之星
日期:2005-06-16 01:02:20开发板块每日发贴之星
日期:2005-06-17 01:02:16行业板块每日发贴之星
日期:2005-06-25 01:02:28
100#
发表于 2006-6-30 18:14 | 只看该作者
支持啊

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表