使浏览器能自动下载JVM的方法
<OBJECT
classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
codebase = "http://java.sun.com/products/plugin/1.4/jinstall-1_4-windows-i586.cab#Version=1,4,1,0"
WIDTH = "100%" HEIGHT = "500" >
<PARAM NAME = CODE VALUE = "nz.astarte.planwise.gantt.GanttApplet" >
<PARAM NAME = CODEBASE VALUE = "." >
<PARAM NAME = ARCHIVE VALUE = "pwgantt.jar" >
<PARAM NAME = "type" VALUE = "application/x-java-applet;version=1.4">
<PARAM NAME = "scriptable" VALUE = "false">
<PARAM NAME = "projectId" VALUE="<%=theForm.getProjectId().toString()%>" >
<PARAM NAME = "userId" VALUE="<%=userId%>" >
<PARAM NAME = "logLevel" VALUE="INFO" >
<COMMENT>
<EMBED
type="application/x-java-applet;jpi-version=1.4.1"
CODE="nz.astarte.planwise.gantt.GanttApplet"
CODEBASE="."
ARCHIVE="pwgantt.jar"
WIDTH="100%"
HEIGHT="500"
projectId="<%=theForm.getProjectId().toString()%>"
userId="<%=userId%>"
logLevel="INFO"
scriptable=false
pluginspage="http://java.sun.com/j2se/1.4.1/download.html">
<NOEMBED>
Could not find a plugin supported by your browser. Please download Sun's Java Plugin 1.4.1
</noembed>
</EMBED>
</COMMENT>
</OBJECT>
import java.applet.Applet;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
import javax.swing.JApplet;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class AppletLifeCycle extends JApplet {
public AppletLifeCycle()throws HeadlessException {
super();
}
public void destroy() {
System.out.println("Applet start() is invoked!");
}
public String getAppletInfo() {
return "This is my default applet created by Eclipse";
}
public void init() {
getContentPane().setLayout(new FlowLayout());
getContentPane().add(new JLabel("Applet init() is invoked!"));
System.out.println("Applet init() is invoked!");
}
public void start() {
getContentPane().add(new JLabel("Applet start() is invoked!"));
System.out.println("Applet start() is invoked!");
repaint();
}
public void stop() {
System.out.println("Applet stop() is invoked!");
}
public static void main(String []args){
//Applet程序里面有了main方法后,程序就可以像Application一样运行了。
JApplet applet =new AppletLifeCycle();//实例化一个applet
JFrame frame=new JFrame("AppletLifeCycle");//实例化一个顶级窗口frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(applet);//将applet放到顶级窗口中
frame.setSize(200,100);
applet.init();
applet.start();
frame.setVisible(true);
}
}
这一部分介绍的内容适合于图形用户界面的应用(Applet和普通应用),要用到AWT或Swing。
3.1 用JAR压缩类文件
Java档案文件(JAR文件)是根据JavaBean标准压缩的文件,是发布JavaBean组件的主要方式和推荐方式。JAR档案有助于减少文件体积,缩短下载时间。例如,它有助于Applet提高启动速度。一个JAR文件可以包含一个或者多个相关的Bean以及支持文件,比如图形、声音、HTML和其他资源。
要在HTML/JSP文件中指定JAR文件,只需在Applet标记中加入ARCHIVE = "name.jar"声明。
3.2 提示Applet装入进程
你是否看到过使用Applet的网站,注意到在应该运行Applet的地方出现了一个占位符?当Applet的下载时间较长时,会发生什么事情?最大的可能就是用户掉头离去。在这种情况下,显示一个Applet正在下载的信息无疑有助于鼓励用户继续等待。
下面我们来看看一种具体的实现方法。首先创建一个很小的Applet,该Applet负责在后台下载正式的Applet:
import java.applet.Applet;
import java.applet.AppletStub;
import java.awt.Label;
import java.awt.Graphics;
import java.awt.GridLayout;
public class PreLoader extends Applet implements Runnable, AppletStub
{
String largeAppletName;
Label label;
public void init()
{
// 要求装载的正式Applet
largeAppletName = getParameter("applet");
// “请稍等”提示信息
label = new Label("请稍等..." + largeAppletName);
add(label);
}
public void run()
{
try
{
// 获得待装载Applet的类
Class largeAppletClass = Class.forName(largeAppletName);
// 创建待装载Applet的实例
Applet largeApplet = (Applet)largeAppletClass.newInstance();
// 设置该Applet的Stub程序
largeApplet.setStub(this);
// 取消“请稍等”信息
remove(label);
// 设置布局
setLayout(new GridLayout(1, 0));
add(largeApplet);
// 显示正式的Applet
largeApplet.init();
largeApplet.start();
}
catch (Exception ex)
{
// 显示错误信息
label.setText("不能装入指定的Applet");
}
// 刷新屏幕
validate();
}
public void appletResize(int width, int height)
{
// 把appletResize调用从stub程序传递到Applet
resize(width, height);
}
}
编译后的代码小于2K,下载速度很快。代码中有几个地方值得注意。首先,PreLoader实现了AppletStub接口。一般地,Applet从调用者判断自己的codebase。在本例中,我们必须调用setStub()告诉Applet到哪里提取这个信息。另一个值得注意的地方是,AppletStub接口包含许多和Applet类一样的方法,但appletResize()方法除外。这里我们把对appletResize()方法的调用传递给了resize()方法。
3.3 在画出图形之前预先装入它
ImageObserver接口可用来接收图形装入的提示信息。ImageObserver接口只有一个方法imageUpdate(),能够用一次repaint()操作在屏幕上画出图形。下面提供了一个例子。
public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h)
{
if ((flags & ALLBITS) !=0 { repaint();
}
else if (flags & (ERROR |ABORT )) != 0)
{
error = true;
// 文件没有找到,考虑显示一个占位符
repaint();
}
return (flags & (ALLBITS | ERROR| ABORT)) == 0;
}
当图形信息可用时,imageUpdate()方法被调用。如果需要进一步更新,该方法返回true;如果所需信息已经得到,该方法返回false。
3.4 覆盖update方法
update()方法的默认动作是清除屏幕,然后调用paint()方法。如果使用默认的update()方法,频繁使用图形的应用可能出现显示闪烁现象。要避免在paint()调用之前的屏幕清除操作,只需按照如下方式覆盖update()方法:
public void update(Graphics g) { paint(g);}
更理想的方案是:覆盖update(),只重画屏幕上发生变化的区域,如下所示:
public void update(Graphics g)
{
g.clipRect(x, y, w, h);
paint(g);
}
3.5 延迟重画操作
对于图形用户界面的应用来说,性能低下的主要原因往往可以归结为重画屏幕的效率低下。当用户改变窗口大小或者滚动一个窗口时,这一点通常可以很明显地观察到。改变窗口大小或者滚动屏幕之类的操作导致重画屏幕事件大量地、快速地生成,甚至超过了相关代码的执行速度。对付这个问题最好的办法是忽略所有“迟到”的事件。
建议在这里引入一个数毫秒的时差,即如果我们立即接收到了另一个重画事件,可以停止处理当前事件转而处理最后一个收到的重画事件;否则,我们继续进行当前的重画过程。
如果事件要启动一项耗时的工作,分离出一个工作线程是一种较好的处理方式;否则,一些部件可能被“冻结”,因为每次只能处理一个事件。下面提供了一个事件处理的简单例子,但经过扩展后它可以用来控制工作线程。
public static void runOnce(String id, final long milliseconds)
{
synchronized(e_queue)
{
// e_queue: 所有事件的集合
if (!e_queue.containsKey(id))
{
e_queue.put(token, new LastOne());
}
}
final LastOne lastOne = (LastOne) e_queue.get(token);
final long time = System.currentTimeMillis();
// 获得当前时间
lastOne.time = time;
(new Thread()
{
public void run()
{
if (milliseconds > 0)
{
try
{
Thread.sleep(milliseconds);
}
// 暂停线程
atch (Exception ex) {}
}
synchronized(lastOne.running)
{
// 等待上一事件结束
if (lastOne.time != time)
// 只处理最后一个事件
return;
}
}}).start();
}
private static Hashtable e_queue = new Hashtable();
private static class LastOne
{
public long time=0;
public Object running = new Object();
}
3.6 使用双缓冲区
在屏幕之外的缓冲区绘图,完成后立即把整个图形显示出来。由于有两个缓冲区,所以程序可以来回切换。这样,我们可以用一个低优先级的线程负责画图,使得程序能够利用空闲的CPU时间执行其他任务。下面的伪代码片断示范了这种技术。
Graphics myGraphics;
Image myOffscreenImage = createImage(size().width, size().height);
Graphics offscreenGraphics = myOffscreenImage.getGraphics();
offscreenGraphics.drawImage(img, 50, 50, this);
myGraphics.drawImage(myOffscreenImage, 0, 0, this);
3.7 使用BufferedImage
Java JDK 1.2使用了一个软显示设备,使得文本在不同的平台上看起来相似。为实现这个功能,Java必须直接处理构成文字的像素。由于这种技术要在内存中大量地进行位复制操作,早期的JDK在使用这种技术时性能不佳。为解决这个问题而提出的Java标准实现了一种新的图形类型,即BufferedImage。
BufferedImage子类描述的图形带有一个可访问的图形数据缓冲区。一个BufferedImage包含一个ColorModel和一组光栅图形数据。这个类一般使用RGB(红、绿、蓝)颜色模型,但也可以处理灰度级图形。它的构造函数很简单,如下所示:
public BufferedImage (int width, int height, int imageType)
ImageType允许我们指定要缓冲的是什么类型的图形,比如5-位RGB、8-位RGB、灰度级等。
3.8 使用VolatileImage
许多硬件平台和它们的操作系统都提供基本的硬件加速支持。例如,硬件加速一般提供矩形填充功能,和利用CPU完成同一任务相比,硬件加速的效率更高。由于硬件加速分离了一部分工作,允许多个工作流并发进行,从而缓解了对CPU和系统总线的压力,使得应用能够运行得更快。利用VolatileImage可以创建硬件加速的图形以及管理图形的内容。由于它直接利用低层平台的能力,性能的改善程度主要取决于系统使用的图形适配器。VolatileImage的内容随时可能丢失,也即它是“不稳定的(volatile)”。因此,在使用图形之前,最好检查一下它的内容是否丢失。VolatileImage有两个能够检查内容是否丢失的方法:
public abstract int validate(GraphicsConfiguration gc);public abstract Boolean contentsLost();
每次从VolatileImage对象复制内容或者写入VolatileImage时,应该调用validate()方法。contentsLost()方法告诉我们,自从最后一次validate()调用之后,图形的内容是否丢失。
虽然VolatileImage是一个抽象类,但不要从它这里派生子类。VolatileImage应该通过Component.createVolatileImage()或者GraphicsConfiguration.createCompatibleVolatileImage()方法创建。
3.9 使用Window Blitting
进行滚动操作时,所有可见的内容一般都要重画,从而导致大量不必要的重画工作。许多操作系统的图形子系统,包括WIN32 GDI、MacOS和X/Windows,都支持Window Blitting技术。Window Blitting技术直接在屏幕缓冲区中把图形移到新的位置,只重画新出现的区域。要在Swing应用中使用Window Blitting技术,设置方法如下:
setScrollMode(int mode);
在大多数应用中,使用这种技术能够提高滚动速度。只有在一种情形下,Window Blitting会导致性能降低,即应用在后台进行滚动操作。如果是用户在滚动一个应用,那么它总是在前台,无需担心任何负面影响。
http://blog.csdn.net/daoquan/archive/2005/03/04/310923.aspx
Applet类
Applet类是所有Applet应用的基类,所有的Java小应用程序都必须继承该类。如下所示。
import java. applet.*;
public class OurApplet extends Applet
{
......
......
}
Applet类的构造函数只有一种,即:public Applet()
Applet实现了很多基本的方法,下面列出了Applet类中常用方法和用途。
public final void setStub(AppletStub stub)
//设置Applet的stub.stub是Java和C之间转换参数并返回值的代码位,它是由系统自动设定的。
public boolean isActive();// 判断一个Applet是否处于活动状态。
public URL getDocumentBase();// 检索表示该Applet运行的文件目录的对象。
public URL getCodeBase();// 获取该Applet 代码的URL地址。
public String getParameter(String name);// 获取该Applet 由name指定参数的值。
public AppletContext getAppletContext();// 返回浏览器或小应用程序观察器。
public void resize(int width,int height);// 调整Applet运行的窗口尺寸。
public void resize(Dimension d);// 调整Applet运行的窗口尺寸。
public void showStatus(String msg);// 在浏览器的状态条中显示指定的信息。
public Image getImage(URL url); // 按url指定的地址装入图象。
public Image getImage(URL url,String name);// 按url指定的地址和文件名加载图像。
public AudioClip getAudioClip(URL url);// 按url指定的地址获取声音文件。
public AudioClip getAudioClip(URL url, String name);// 按url指定的地址和文件名获取声音。
public String getAppletInfo();// 返回Applet应用有关的作者、版本和版权方面的信息;
public String[][] getParameterInfo();
// 返回描述Applet参数的字符串数组,该数组通常包含三个字符串: 参数名、该参数所需值的类型和该参数的说明。
public void play(URL url);// 加载并播放一个url指定的音频剪辑。
public void destroy();//撤消Applet及其所占用的资源。若该Applet是活动的,则先终止该Applet的运行。
(1) Applet运行状态控制基本方法
Applet类中的四种基本方法用来控制其运行状态:init()、start()、stop()、destroy()
init()方法
这个方法主要是为Applet的正常运行做一些初始化工作。当一个Applet被系统调用时,系统首先调用的就是该方法。通常可以在该方法中完成从网页向Applet传递参数,添加用户界面的基本组件等操作。
start()方法
系统在调用完init()方法之后,将自动调用start()方法。而且,每当用户离开包含该Applet的主页后又再返回时,系统又会再执行一遍start()方法。这就意味着start()方法可以被多次执行,而不像init()方法。因此,可把只希望执行一遍的代码放在init()方法中。可以在start()方法中开始一个线程,如继续一个动画、声音等。
stop()方法
这个方法在用户离开Applet所在页面时执行,因此,它也是可以被多次执行的。它使你可以在用户并不注意Applet的时候,停止一些耗用系统资源的工作以免影响系统的运行速度,且并不需要人为地去调用该方法。如果Applet中不包含动画、声音等程序,通常也不必实现该方法。
destroy()方法
与对象的finalize()方法不同,Java在浏览器关闭的时候才调用该方法。Applet是嵌在HTML文件中的,所以destroty()方法不关心何时Applet被关闭,它在浏览器关闭的时候自动执行。在destroy()方法中一般可以要求收回占用的非内存独立资源。(如果在Applet仍在运行时浏览器被关闭,系统将先执行stop()方法,再执行destroy()方法。
(2) Applet应用的有关参数说明
利用Applet来接收从HTML中传递过来的参数,下面对这些参数作一简单说明:
* CODE标志
CODE标志指定Applet的类名;WIDTH和HEIGHT标志指定Applet窗口的像素尺寸。在APPLET语句里还可使用其他一些标志。
* CODEBASE 标志
CODEBASE标志指定Applet的URL地址。Applet的通用资源定位地址URL,它可以是绝对地址 ,如www.sun.com。也可以是相对于当前HTML所在目录的相对地址,如/AppletPath/Name。如果HTML文件不指定CODEBASE 标志,浏览器将使用和HTML文件相同的URL。
* ALT 标志
虽然Java在WWW上很受欢迎,但并非所有浏览器都对其提供支持。如果某浏览器无法运行Java Applet,那么它在遇到APPLET语句时将显示ALT标志指定的文本信息。
* ALIGN 标志
ALIGN标志可用来控制把Applet窗口显示在HTML文档窗口的什么位置。与HTML<LMG>语句一样,ALIGN标志指定的值可以是TOP、MIDDLE或BOTTOM。
* VSPACE与HSPACE 标志
VSPACE和HSPACE标志指定浏览器显示在Applet窗口周围的水平和竖直空白条的尺寸,单位为像素。如下例使用该标志在Applet窗口之上和之下各留出50像素的空白,在其左和其右各留出25像素的空白:
* NAME 标志
NAME标志把指定的名字赋予Applet的当前实例。当浏览器同时运行两个或多个Applet时,各Applet可通过名字相互引用或交换信息。如果忽略NAME标志,Applet的名字将对应于其类名。
* PARAM 标志
通用性是程序设计所追求的目标之一。使用户或者程序员能很方便地使用同一个Applet完成不同的任务是通用性的具体表现。从HTML文件获取信息是提高Applet通用性的一条有效途径。
假设编制了一个把某公司的名字在屏幕上卷动的Applet。为了使该Applet更加通用,则可以使该Applet从HTML文件获取需要卷动的文本信息。这样,若想显示另一个公司的名字,用不着修改Java Applet本身,只需修改HTML文件即可。
PARAM 标志可用来在HTML文件里指定参数,格式如下所示:
PARAM Name="name" Value="Liter"
Java Applet可调用getParameter方法获取HTML文件里设置的参数值。
进入MySQL
进入mysql时,你需要提供一个MySQL用户和此用户的口令。如果数据库运行在其它机器上,而不是你所在的这台机器上,你需要指定主机名。
命令:
mysql -h <主机名> -u <用户名> -p <数据库名>
Enter password: ********
********代表你的口令;当mysql显示Enter password:提示时输入它。
MYSQL 有缺省库mysql, 在此系统中,缺省的口令为空,打回车即可。
例如,在此机器上,你可以敲入:
# mysql -u root -p mysql
Enter password:
屏幕如下提示:
Welcome to the MySQL monitor. Commands end with ; or .
Your MySQL connection id is 459 to server version: 3.22.23a-log
Type 'help' for help.
mysql>
这就进入了mysql 的工作环境, 进入到名为mysql 的数据库中。
你可看见mysql>提示后的一些介绍信息:
提示符 mysql> 告诉你mysql准备为你输入命令。
我是通过cmd方式进入mysql的,先将目录选到..\MySQL\MySQL Server 5.0\bin>下,再在它后面敲入 mysql -hlocalhost -uroot -p<root的密码> 按回车就可以进去了
退出MySQL
在你成功地连接后,你可以在mysql>提示下打入QUIT随时断开:
mysql> QUIT
Bye
你也可以键入control-D断开。
操作MySQL
在之前要指出的是:一条操作即是一条SQL语句,注意随后要跟上一个分号,以标志此条语句的结束。而且一条SQL 语句不必全在一个单独行给出,可以写入多行,最后以分号结束此语句的输入。
在之前要指出的是:一条操作即是一条SQL语句,注意随后要跟上一个分号,以标志此条语句的结束。而且一条SQL 语句不必全在一个单独行给出,可以写入多行,最后以分号结束此语句的输入。
创建数据库
命令:CREATE DATABASE <数据库名>
例如,建立一个名为 test 的数据库
mysql> CREATE DATABASE test;
删除数据库
命令: DROP DATABASE <数据库名>
例如,删除名为 test 的数据库
mysql> DROP DATABASE test
连接数据库
命令: USE <数据库名>
例如,如果test数据库存在,尝试存取它:
mysql> USE test
屏幕提示:
Database changed
建表
命令:CREATE TABLE <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]);
例
如,建立一个名为table_1的表,此表记录班上的人员及平均成绩,那么用字段 id 代表编号,为数字类型,且编号唯一,不能为空, 缺省值为 0
; 用字段 name 代表人名,为字符型,不为空;用字段 degree 代表成绩,为数字型,可为空。编号id 为此表的关键字。建表如下:
mysql> CREATE TABLE table_1 (
> id INT(4) DEFAULT '0' NOT NULL,
> name CHAR(20) NOT NULL
> degree DOUBLE(16,2) ,
> PRIMARY KEY(id));
删除表
命令:DROP TABLE <表名>
例如,删除表名为 table_1 的表
mysql> DROP TABLE table_1;
插入数据
命令:INSERT INTO <表名> [( <字段名1>[,..<字段名n > ])]
VALUES ( 值1 )[, ( 值n )]
例如,往表 test 中插入二条记录, 这二条记录表示:编号为1的名为joan 的成绩为96.45, 编号为2 的名为jeanny 的成绩为82.99.
mysql> INSERT INTO test VALUES(1,'joan',96.45),(2,'jeanny',82.99);
查询表中的数据
命令: SELECT <字段1,字段2,...> FROM < 表名 > WHERE < 表达式 >
例如,查看表 test 中所有数据
mysql> SELECT * FROM test;
屏幕显示:
+----+-------------+----------+
| id | name | degree |
+----+-------------+----------+
| 1 | joan | 96.45 |
| 2 | jeanny | 82.99 |
+----+-------------+----------+
删除表中数据
命令: DELETE FROM < 表名 > WHERE < 表达式 >
例如,删除表 test 中编号为1 的记录
mysql> DELETE FROM test WHERE id=1;
字段类型
1.INT[(M)]
正常大小整数类型
2.DOUBLE[(M,D)] [ZEROFILL]
正常大小(双精密)浮点数字类型
3.DATE
日期类型。支持的范围是1000-01-01到9999-12-31。MySQL以YYYY-MM-DD格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列
4.CHAR(M)
定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
5.BLOB TEXT
BLOB或TEXT类型,最大长度为65535(2^16-1)个字符。
6.VARCHAR
变长字符串类型
1: 显示数据库
SHOW DATABASES,
2:当前选择的数据库,
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| test ;
+------------+
| DATABASE() |
+------------+
| test |
+------------+
3: 当前数据库包含的表信息:
mysql> SHOW TABLES;
+---------------------+
| Tables in test
mysql> SHOW TABLES;
+---------------------+
| Tables in test |
+---------------------+
| mytable1 |
| mytable2 |
+---------------------+
4: 获取表结构
mysql> desc mytable1;
+---------+-------------+------+-----+---------+-------+
| Field mysql> desc mytable1;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| s1 | varchar(20) | YES |NULL | |
+---------------------+------+-----+---------+-------+
导入数据库表
(1)创建.sql文件
(2)先产生一个库如auction.c:mysqlbin>mysqladmin -u root -p creat auction,会提示输入密码,然后成功创建。
(2)导入auction.sql文件
c:mysqlbin>mysql -u root -p auction < auction.sql。
通过以上操作,就可以创建了一个数据库auction以及其中的一个表auction。
修改数据库
(1)在mysql的表中增加字段:
alter table dbname add column userid int(11) not null primary key auto_increment;
这样,就在表dbname中添加了一个字段userid,类型为int(11)。
mysql数据库的授权
mysql>grant select,insert,delete,create,drop
on *.* (或test.*/user.*/..)
to 用户名@localhost
identified by "密码"; //还是建议使用这种!
如:新建一个用户帐号以便可以访问数据库,需要进行如下操作:
mysql> grant usage
-> ON test.*
-> TO testuser@localhost;
Query OK, 0 rows affected (0.15 sec)
此后就创建了一个新用户叫:testuser,这个用户只能从localhost连接到数据库并可以连接到test 数据库。下一步,我们必须指定testuser这个用户可以执行哪些操作:
mysql> GRANT select, insert, delete,update
-> ON test.*
-> TO testuser@localhost;
Query OK, 0 rows affected (0.00 sec)
此操作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和DELETE以及UPDATE查询操作。现在我们结束操作并退出MySQL客户程序:
mysql> exit
Bye
桌面不能显示,但进程中explorer.exe没有问题
我用的是win2003版的系统,有一次开机很莫名奇妙的桌面上的东西都没了,但是下面的工具栏还能显示出来,于是我就查看进程中的explorer是否有问题,发现进程中explorer仍在运行,将该进程结束,再运行该进程,发现还是只能显示下面的工具栏。 然后就查看了document下的用户文件夹,发现桌面文件夹并没有问题。
上网查看了一下,发现可能是中毒了。进入安全模式进行查杀病毒,发现桌面文件夹中确实有一个木马文件,删除。重启电脑进入系统,还是原来的问题,没有解决。
运行中输入sfc /scannow,会提示插入系统相应的光盘,复制dll文件。结束后重启,发现还是不行,彻底无语.....
由于我使用的是administrator用户,所以不方便把这个用户删除,于是我又创建了一个新的用户,用新用户登录就没有原来的问题了。
补充:上网查了下,好像可以通过“重启->进入最后一次正确配置”这种方法可以解决问题,但我没试过,不知道真的假的。
提问:有两支不均匀的香,每支可燃烧一小时。如果我们的考试需要45分钟,请问如何燃烧香?用这两支香一共可记录多少种时间?它们分别是多长?
回答:把两根香同时点起来,第一支香两头点着,另一支香只烧一头,等第一支香烧完的同时(这是烧完总长度的3/4),把第二支香另一头点燃,另一头从燃起到熄灭的时间就是15分!
现在有好多初学jsp的网友经常会问数据库怎么连接啊,怎么老出错啊?所以我集中的在这写篇文章供大家参考,其实这种把数据库逻辑全部放在jsp里未必是好的做法,但是有利于初学者学习,所以我就这样做了,当大家学到一定程度的时候,可以考虑用MVC的模式开发。在练习这些代码的时候,你一定将jdbc的驱动程序放到服务器的类路径里,然后要在数据库里建一个表test,有两个字段比如为test1,test2,可以用下面SQL建
create table test(test1 varchar(20),test2 varchar(20)
然后向这个表写入一条测试纪录
那么现在开始我们的jsp和数据库之旅吧。
一、jsp连接Oracle8/8i/9i数据库(用thin模式)
testoracle.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为你的数据库的SID
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
二、jsp连接Sql Server7.0/2000数据库
testsqlserver.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
三、jsp连接DB2数据库
testdb2.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
四、jsp连接Informix数据库
testinformix.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
五、jsp连接Sybase数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/tsdata";
//tsdata为你的数据库名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
六、jsp连接MySQL数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
七、jsp连接PostgreSQL数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/soft"
//soft为你的数据库名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>