安装一个myeclipse我忙了整整俩天,很简单点问题,却由于各种原因而不得不绕道而行。
    系统现有的条件是:linux系统、ero版的eclipse、resin服务器。
    一开始只是想装个插件,能够在eclipse下编译jsp/servlet而已,于是就下了个resin的插件,结果安装都没问题,也进行了相应的设置,只是一运行就报错,following system property must bu set:-Djava.util.logging.manager=com.caucho.log.LogManagerlmpl The JDK 1.4Logging manager must be set to Resin's Log manager.查了很多资料,都不知道这个是什么错误。于是又下了个好像叫helloworld版本的插件,仍然是这个问题,要是有哪位高人,知道这个是什么错误,一定要留言告诉我哦。
     一看装插件是没什么希望了,一天也快过去了,正好问了个同事,他就建议我去装myeclipse,可以装个all in one的,还省事。找到了网址,进去后发现所有的all in one 版本的我都下不了,都提示说在我的系统上不可用,那我也就不怕麻烦拉,下个插件的吧,单位的破机器,总是让我连恨的力气都没有。
       无线上网,让我无可..
2008-05-08 14:27:45
一、数据流的基本概念

       流一般分为输入流(Input Stream)和输出流(Output Stream)两类,但这种划分并不是绝对的。比如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。当然,键盘只是一个数人流,而屏幕则只是一个输出流。
      java的标准数据流:标准输入输出指在字符方式下(如DOS),程序与系统进行交互的方式,分为三种:
       标准输入studin,对象是键盘。
       标准输出stdout,对象是屏幕。
       标准错误输出stderr,对象也是屏幕。

二、java.io包中的数据流和文件类

       字节流:从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。
          InputStream、OutputStream
          FileInputStream、FileOutputStream
          PipedInputStream、PipedOutputStream
&..







    JDBC是由一系列连接(Connection)、SQL语句(Statement)和结果集(ResultSet)构成的,其主要作用概括起来有如下3个方面:
    建立与数据库的连接。
    向数据库发起查询请求。
    处理数据库返回结果。

    这些作用是通过一系列API实现的,其中的几个重要接口如表13-1所示。





表13-1 JDBC API中的重要接口
接 口
作 用
java.sql.DriverManager
处理驱动程序的加载和建立新数据库连接
java.sql.Connection
处理与特定数据库的连接
java.sql.Statement
在指定连接中处理SQL语句
java.sql.ResultSet
处理数据库操作结果集

    这些JDBC API的组成结构如图13-2所示。



图13-2 JDBC API的组成结构

     DriverManager

    DriverManager
类是Java.sql包中用于数据库驱动程序管理的类,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接,也处理
诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。DriverManager
类直接继承自java.lang.object,其主要成员方法如表13-2所示。


表13-2 DriverManager的主要成员方法及其含义


    
对于简单的应用程序,程序开发人员需要在此类中直接使用的惟一方法是
DriverManager.getConnection。该方法是用来建立与数据库的连接的。JDBC 允许用户调用 DriverManager
的方法 getDriver、getDrivers 和 registerDriver 及 Driver 的方法
connect。但多数情况下,最好让 DriverManager 类管理建立连接的细节。

    Connection

    Connection是用来表示数据库连接的对象,对数据库的一切操作都是在这个连接的基础上进行的。Connection类的主要成员方法如表13-3所示。





表13-3 Connection类的主要成员方法及其含义
方 法
含 义
void clearWarnings
清除连接的所有警告信息
Statement createStatement()
创建一个statement对象
Statement createStatement(int resultSetType, int resultSetConcurrency)
创建一个statement对象,它将生成具有特定类型和并发性的结果集
void commit()
提交对数据库的改动并释放当前连接持有的数据库的锁
void rollback()
回滚当前事务中的所有改动并释放当前连接持有的数据库的锁
String getCatalog()
获取连接对象的当前目录名
boolean isClosed()
判断连接是否已关闭
boolean isReadOnly()
判断连接是否为只读模式
void setReadOnly()
设置连接的只读模式
void close()
立即释放连接对象的数据库和JDBC资源

    Statement

    Statement
用于在已经建立的连接的基础上向数据库发送SQL语句的对象。它只是一个接口的定义,其中包括了执行SQL语句和获取返回结果的方法。实际上有3种
Statement 对象:Statement、PreparedStatement(继承自Statement )和
CallableStatement(继承自PreparedStatement)。它们都作为在给定连接上执行 SQL
语句的容器,每个都专用于发送特定类型的 SQL 语句: Statement 对象用于执行不带参数的简单 SQL
语句;PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句;CallableStatement
对象用于执行对数据库已存储过程的调用。Statement 接口提供了执行语句和获取结果的基本方法;PreparedStatement
接口添加了处理 IN 参数的方法;而 CallableStatement 添加了处理 OUT 参数的方法。

    创建statement对象的方法如下:
    Statement stmt = con.createStatement();

    Statement接口定义中包括的方法如表13-4所示。





表13-4 Statement接口的主要成员方法及其含义
方 法
含 义
void addBatch(String sql)
在Statement语句中增加用于数据库操作的SQL批处理语句
void cancel()
取消Statement中的SQL语句指定的数据库操作命令
void clearBatch()
清除Statement中的SQL批处理语句
void clearWarnings()
清除Statement语句中的操作引起的警告
void close()
关闭Statement语句指定的数据库连接
boolean execute(String sql)
执行SQL语句
int[] executeBatch()
执行多个SQL语句
ResultSet executeQuery(String sql)
进行数据库查询,返回结果集
int executeUpdate(String sql)
进行数据库更新
Connection getConnection()
获取对数据库的连接
int getFetchDirection()
获取从数据库表中获取行数据的方向
int getFetchSize()
获取返回的数据库结果集行数
int getMaxFieldSize()
获取返回的数据库结果集最大字段数
int getMaxRows()
获取返回的数据库结果集最大行数
boolean getMoreResults()
获取Statement的下一个结果
int getQueryTimeout()
获取查询超时设置
ResultSet getResultSet()
获取结果集
int getUpdateCount()
获取更新记录的数量
void setCursorName(String name)
设置数据库Cursor的名称
void setFetchDirection(int dir)
设置数据库表中获取行数据的方向
void setFetchSize(int rows)
设置返回的数据库结果集行数
void setMaxFieldSize(int max)
设置最大字段数
void setMaxRows(int max)
设置最大行数
void setQueryTimeout(int seconds)设置查询超时时间

    
值得注意的是,Statement
接口提供了3种执行SQL语句的方法:executeQuery、executeUpdate和execute。使用哪一个方法由SQL语句所产生的内容
决定。executeQuery方法用于产生单个结果集的SQL语句,如SELECT语句。executeUpdate方法用于执行INSERT、
UPDATE、DELETE及DDL(数据定义语言)语句,例如CREATE TABLE 和 DROP TABLE。executeUpdate
的返回值是一个整数,表示它执行的SQL语句所影响的数据库中的表的行数(更新计数)。execute
方法用于执行返回多个结果集或多个更新计数的语句。

    PreparedStatement接口继承了Statement接口,
但PreparedStatement语句中包含了经过预编译的SQL语句,因此可以获得更高的执行效率。在PreparedStatement语句中可
以包含多个用"?"代表的字段,在程序中可以利用setXXX方法设置该字段的内容,从而增强了程序设计的动态性。PreparedStatement接
口的主要成员方法及其含义如表13-5所示。





表13-5 PreparedStatement接口的主要成员方法及其含义
方 法
含 义
void addBatch(String sql)
在Statement语句中增加用于数据库操作的SQL批处理语句
void clearparameters ()
清除PreparedStatement中的设置参数
ResultSet executeQuery(String sql)
执行SQL查询语句
ResultSetMetaData getMetaData()
进行数据库查询,获取数据库元数据
void setArray(int index,Array x)
设置为数组类型
void setAsciiStream(int index,InputStream stream,int length)设置为ASCII输入流
void setBigDecimal(int index,BigDecimal x)
设置为十进制长类型
void setBinaryStream
(int index,InputStream stream,int length)
设置为二进制输入流
void setCharacterStream
(int index,InputStream stream,int length)
设置为字符输入流
void setBoolean(int index, boolean x)
设置为逻辑类型
void setByte(int index,byte b)
设置为字节类型
void setBytes(int byte[] b)
设置为字节数组类型
void setDate(int index,Date x)
设置为日期类型
void setFloat(int index,float x)
设置为浮点类型
void setInt(int index,int x)
设置为整数类型
void setLong(int index,long x)
设置为长整数类型
void setRef(int index,int ref)
设置为引用类型
void setShort(int index,short x)
设置为短整数类型
void setString(int index,String x)
设置为字符串类型
void setTime(int index,Time x)
设置为时间类型

    PreparedStatement
与Statement的区别在于它构造的SQL语句不是完整的语句,而需要在程序中进行动态设置。这一方面增强了程序设计的灵活性;另一方面,由于
PreparedStatement语句是经过预编译的,因此它构造的SQL语句的执行效率比较高。所以对于某些使用频繁的SQL语句,用
PreparedStatement语句比用Statement具有明显的优势。

    PreparedStatement对象的创建方法如下:
    PreparedStatement pstmt = con.prepareStatement("update tbl_User set reward = ? where userId = ?");

    在该语句中,包括两个可以进行动态设置的字段:reward和userId。

    例如,我们想给第一个注册的用户5000点奖励,则可以用下面的方法设置空字段的内容:





pstmt.setInt(1, 5000);
pstmt. setInt (2, 1);

    如果我们想给前50个注册的用户每人5000点奖励,则可以用循环语句对空字段进行设置:





pstmt.setInt(1, 5000);
for (int i = 0; i < 50; i++)
{
pstmt.setInt(2,i);
int rowCount = pstmt.executeUpdate();
}

    
如果传递的数据量很大,则可以通过将 IN 参数设置为 Java
输入流来完成。当语句执行时,JDBC驱动程序将重复调用该输入流,读取其内容并将它们当做实际参数数据传输。JDBC
提供了3种将IN参数设置为输入流的方法:setBinaryStream用于含有未说明字节的流;setAsciiStream用于含有ASCII字符
的流;setUnicodeStream用于含有Unicode字符的流。这些方法比其他的setXXX方法要多一个用于指定流的总长度的参数,因为一些
数据库在发送数据之前需要知道它传送的数据的大小。

    下面是一个使用流作为 IN 参数发送文件内容的例子:





java.io.File file = new java.io.File("/tmp/data");
int fileLength = file.length();
java.io.InputStream fin = new java.io.FileInputStream(file);
java.sql.PreparedStatement pstmt = con.prepareStatement(
"update table set stuff = ? where index = 4");
pstmt.setBinaryStream (1, fin, fileLength);
pstmt.executeUpdate();

    当语句执行时,将反复调用输入流 fin 以传递其数据。

    CallableStatement
对象用于执行对数据库已存储过程的调用。在CallableStatement对象中,有一个通用的成员方法call,这个方法用于以名称的方式调用数据
库中的存储过程。在数据库调用过程中,可以通过设置IN参数向调用的存储过程提供执行所需的参数。另外,在存储过程的调用中,通过OUT参数获取存储过程
的执行结果。

    CallableStatement 接口的主要成员方法及其含义如表13-6所示。





表13-6 CallableStatement 接口的主要成员方法及其含义
方 法
含 义
Array getArray(int I)
获取数组
BigDecimal getBigDecimal(int index)
BigDecimal getBigDecimal(int index,int scale)
获取十进制小数
boolean getBoolean(int index)
获取逻辑类型
byte getByte(int index)
获取字节类型
Date getDate(int index)Date getDate
(int index,Calendar cal)
获取日期类型
double getDouble(int index)
获取日期类型双精度类型
float getFloat(int index)
获取日期类型浮点类型
int getint(int index)
获取日期类型整数类型
long getLong(int index)
获取日期类型长整数类型
Object getObject(int index)
Object getObject(int index,Map map)
获取对象类型
Ref getRef(int I)
获取日期类型Ref类型
short getShort(int index)
获取日期类型短整数类型
String getString(int index)
获取日期类型字符串类型
Time getTime(int index) Time
getTime(int index,Calendar cal)
获取时间类型
void registerOutputParameter(int index)
void registerOutputParameter(int index,int type)
void registerOutputParameter
(int index,int type,int scale) 注册输出参数
&nbsp;&nbsp;&nbsp;&nbsp;调用存储过程的语法为:
{call procedure_name} // 过程不需要参数
{call procedure_name[(?,?,?,…)]} // 过程需要若干个参数
{? = call procedure_name[(?,?,?,…)]} //过程需要若干个参数并返回一个参数

    其中procedure_name为存储过程的名字,方括号中的内容是可选的多个用于存储过程执行的参数。CallableStatement 对象的创建方法如下:
    CallableStatement cstmt = con.prepareCall("{call getData(?, ?)}");

    向存储过程传递执行需要参数的方法是通过setXXX语句完成的。例如,我们可以将两个参数设置如下:





cstmt.setByte(1, 25);
cstmt.setInt(2,64.85);

    如果需要存储过程返回运行结果,则需要调用registerOutParameter方法设置存储过程的输出参数,然后调用getXXX方法来获取存储过程的执行结果。例如:





cstmt.registerOutParameter(1, java.sql.Types.TINYINT);
cstmt.registerOutParameter(1, java.sql.Types. INTEGER);
cstmt.executeUpdate();
byte a = cstmt.getByte(1);
int b = cstmt.getInt(2);

    从上面的程序可以看出,Java的基本数据类型和SQL中支持的数据类型有一定的对应关系。这种对应关系如表13-7所示。





表13-7 SQL的数据类型与Java数据类型的对应关系
SQL数据类型
Java数据类型
CHAR
String
VARCHAR
String
LONGVARCHAR String
NUMERIC
java.math.BigDecimal
DECIMAL
java.math.BigDecimal
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

    ResultSet

    结果集(ResultSet)用来暂时存放数据库查询操作获得的结果。它包含了符合 SQL 语句中条件的所有行,并且它提供了一套 get 方法对这些行中的数据进行访问。ResultSet类的主要成员方法及其含义如表13-8所示。





表13-8 ResultSet类的主要成员方法及其含义
方 法
含 义
boolean absolute(int row)
将指针移动到结果集对象的某一行
void afterLast()
将指针移动到结果集对象的末尾
void beforeFirst()
将指针移动到结果集对象的头部
boolean first()
将指针移动到结果集对象的第一行
Array getArray(int row)
获取结果集中的某一行并将其存入一个数组
boolean getBoolean(int columnIndex)
获取当前行中某一列的值,返回一个布尔型值
byte getByte(int columnIndex)
获取当前行中某一列的值,返回一个字节型值
short getShort(int columnIndex)
获取当前行中某一列的值,返回一个短整型值
int getInt(int columnIndex)
获取当前行中某一列的值,返回一个整型值
long getLong(int columnIndex)
获取当前行中某一列的值,返回一个长整型值
double getDouble(int columnIndex)
获取当前行中某一列的值,返回一个双精度型值
float getFloat(int columnIndex)
获取当前行中某一列的值,返回一个浮点型值
String getString(int columnIndex)
获取当前行中某一列的值,返回一个字符串
Date getDate(int columnIndex)
获取当前行中某一列的值,返回一个日期型值
Object getObject(int columnIndex)
获取当前行中某一列的值,返回一个对象
Statement getStatement()
获得产生该结果集的Statement对象
URL getURL(int columnIndex)
获取当前行中某一列的值,返回一个java.net.URL型值
boolean isBeforeFirst()
判断指针是否在结果集的头部
boolean isAfterLast()
判断指针是否在结果集的末尾
boolean isFirst()
判断指针是否在结果集的第一行
boolean isLast()
判断指针是否在结果集的最后一行
boolean last()
将指针移动到结果集的最后一行
boolean next()
将指针移动到当前行的下一行
boolean previous()
将指针移动到当前行的前一行

    
从表13-8中可以看出,ResultSet类不仅提供了一套用于访问数据的get方法,还提供了很多移动指针(cursor,有时也译为光标)的方法。
cursor是ResultSet 维护的指向当前数据行的指针。最初它位于第一行之前,因此第一次访问结果集时通常调用
next方法将指针置于第一行上,使它成为当前行。随后每次调用 next 指针向下移动一行。

[/img]..
DriverManager类
此类用于装载驱动程序,它所有的成员都是静态成员,所以在程序中无须对它进行实例化,直接通过类名就可以访问它。
DriverManager类是JDBC的管理层,作用于用户和驱动程序间加载驱动程序
Class.forName("公司名.数据库名.驱动程序名")
如:Class.forName("sun.jdbc.odbc.jdbcOdbcDriver")
建立连接
加载Driver类并在DriverManager类注册后,就可用来与数据库建立连接。当调用Driver.Manager.getConnection()发出连连接请求时,DriverManager将检查每个驱动程序,看它是否可以建立连接。
方法:Connection getConnection(String url,String user,String password)
其中user和password是登录数据库的用户和密码
第一个参数是指向数据库的url,它的格式如下:
jdbc:(subprotocol):(subname)
subprotocol:子协议,指定连接何种数据库或用什么方式连接数据库
subname:确立一个连接,可以是一个数据源名,也可以是指向一个网上数据库
如:以下是通常用驱动程序(JDBC-ODBC桥驱动程序),并连一个student数据源,用匿名登录的的示例:
Class.forName("sun.jdbc.odbc.jdbcOdbcDriver");//加载驱动程序
String url="jdbc:odbc:stude..
第一,談談final, finally, finalize的區別。
第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其他類,是否可以implements(實現)interface(介面)?
第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
第四,&和&&的區別。
第五,HashMap和Hashtable的區別。
第六,Collection 和 Collections的區別。
第七,什麼時候用assert。
第八,GC是什麼? 為什麼要有GC?
第九,String s = new String("xyz");創建了幾個String Object?
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
第十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
第十二,sleep() 和 wait() 有什麼區別?
第十三,Java有沒有goto?
第十四,陣列有沒有length()這個方法? String有沒有length()這個方法?
第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
第十六,Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?
第十七,給我一個你最常見到的runtime exception。
第十八,error和exception有什麼區別?
第十九,List, Se..
      方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现。
 
      如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
 
      如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同的参数次序,则称为方法的重载(Overloading)。不能通过访问权限、返回类型、抛出的异常进行重载.

注:overloading是可以改变返回值类型的。
          
每个servlet的init()方法都必须使用super.init(config)语句。
       原因是:一个servlet在它的init()方法中传递它的ServletConfig实例,在其他的方法中却不可以。当一个servlet在init()方法外需要调用config对象时就会产生问题。使用super.init(config)语句就解决了这个问题,该语句通过唤醒GenericServlet的init()方法, 该方法保存了这个config对象的一个引用,以备将来使用。那么,一个servlet是怎样利用这个保存的引用的呢?是通过自身唤醒方法。在执行中,GenericServlet类通过使用保存的引用,自身执行ServletConfig接口。换个说法,就是在调用super.init(config)语句后,一个servlet可以直接唤醒它自己的getInitParameter()方法。
        如果没有调用super.init(config)语句,任何使用GenericServlet的getInitParameter()方法的行为或者是调用ServletConfig的方法都将会抛出NullPointerException的异常。所以每一个servlet的init ()方法的第一个语句都应该是super.init(config)。只有在一种情况下可以不这样做,如果这个serv..
一、assertion的意义和用法
J2SE 1.4在语言上提供了一个新特性,就是assertion功能,它是该版本在Java语言方面最大的革新。
从理论上来说,通过
assertion方式可以证明程序的正确性,但是这是一项相当复杂的工作,目前还没有太多的实践意义。
在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。
一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。
1、语法表示
在语法上,为了支持assertion,Java增加了一个关键字assert。它包括两种表达式,分别如下:
        assert  expression1;
        assert  expression1:expression2;

在两种表达式中,expression1表示一个boolean表达式,
expression2表示一个基本类型或者是一个对象(Object),基本类型包括boolean,char,double,float,int和
long。由于所有类都为Object..
        instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
    
用法:
result = object instanceof class
参数:
result
必选项。任意变量。
object
必选项。任意对象表达式。
class
必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
 例如:
 Boolean b; 
String str = "foo"; 
b = ( str instanceof String );   // true
b = ( str instanceof Object );   // also true
b = ( str instanceof Date );     // false, not a Date or subclass

注意:
1)null值不是任何对象的实例,所以下面这个例子返回了false,无论这个变量声明的是什么类型。
String s = null;
if ( s instanceof String )
    // false, won't happen
2)instanceof也可以正确的报告一个对象是否是数组..
java编译器把unreachable statement标记为运行时错误,一个unreachable statement就是编译器决定永远不会执行它。

下面的几种情况会出现 unreachable statement:



(1)在reutrn语句后写语句。



(2)在throw语句后写语句。



(3)break、continue语句之后定义语句。



(4)“\u10100”//合法,相当于‘\u1010’和字符串“0”。



(5)移位运算符可以用于long int char short byte。



(6)类的访问控制符可以是public或什么都不加。



(7)goto是保留字但不是关键字。then什么都不是。



(8)把超类的类型强制转换后赋给子类的对象时,编译无异常,但运行时会出现异常。

例如:
        一个方法,在它的中间出现了一个无条件返回语句,将会引起一个便宜错误:
if (1 < 2)
return;
// unreachable statements
类别:未分类|阅读(1075)|回复(0)|(0)阅读全文>>
 <<   1   2   >>   页数 ( 1/2 )

公告

博客统计信息

用户名:arthennala
文章数:12
评论数:21
访问量:63317
无忧币:20
博客积分:508
博客等级:1
注册日期:2007-12-10

我最近发表的评论

linux下安装Myecl.. 回复
不好意思,我现在用的机器里没有了
Overload和Overri.. 回复
呵呵,高人!学习了
instanceof 运算.. 回复
呵呵,加油学,加油写!
java的线程同步机.. 回复
可能还算不上是程序员呢,分享一下..
java的线程同步机.. 回复
呵呵 就是记录点学习中遇到的不理解..

背景音乐

我的音乐

00:00 | 00:00