📄 java入门(13).htm
字号:
<BR><BR> 在这个while循环中,首先将执行rs.next(),这样,就指向了第一条记录。(如果没有第一条记录,就会返回false,使得循环结束)。然后我们就可以使用getString(字段号)来获取这条记录中的字段。
<BR><BR> 当5个字段都取出来后,在程序中将它们组合在一起,然后将其打印出来。
接下来,就会再次执行rs.next()获取下一条记录,直到没有记录为止。 <BR><BR> 好了,到此你应该能够理解这个程序了吧!
<BR><BR> JDBC是一个十分强大、有用的工具,而且也内容很多,足以成册,因此本书无法面面俱到说明,有兴趣的话可以再去看一些Java的高级参考书。
<BR><BR> 自测练习 <BR><BR> 1) 使用JDBC,可分为四个步骤,请按顺序将它们排列出来:
<BR><BR> ________、________、________、________。 <BR><BR> a.释放对象 b.语句处理
c.结果处理 d.创建连接 <BR><BR> 2) 在使用JDBC中,可能会用到许多方法,请将下列方法按照调用顺序排列出来:
<BR><BR> ________、________、________、________。 <BR><BR> a.getString()
b.executeQuery() <BR><BR> c.getConnection() d.createStatement()
<BR><BR> 3) 在JDBC中,使用________说明JDBC数据源。 <BR><BR> a.数据库名 b.数据源名 c.JDBC
URL d.JDBC对象名 <BR><BR> 4) 在jdbc:odbc:student中,odbc是___________。
<BR><BR> a.协议名 b.驱动程序名 c.子协议名 d.桥接器 <BR><BR> 5)
在示例程序testjdbc.java中,我们选择出了所有的五个部分,如果我不想选择出Chinese、Maths字段,你认为程序应该做些什么修改?
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> 6) SQL语句SELECT的语法格式是: <BR><BR> SELECT 字段名 FROM 表名 WHERE 条件语名
<BR><BR> 其中WHERE子句可以使SELECT只选择符合WHERE中说明的条件的记录。
<BR><BR> 请您编写一个程序,输出年纪为9岁的所有学生的Name、Sex、Chinese。
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> 练习答案 <BR><BR> 1)d b c a <BR><BR> 2)c d b a <BR><BR> 3)c
在JDBC中,我们应该使用JDBC URL来说明数据源; <BR><BR> 4)c 在这里odbc是子协议名;
<BR><BR> 5)共需要修改3处: <BR><BR> 将 <BR><BR><BR>ResultSet rs=sta.executeQuery
<BR>("SELECT Name,Sex,Age,Chinese,Maths FROM student");
<BR>System.out.println("Name Sex Age Chinese Maths");
<BR><BR><BR><BR> 改为: <BR><BR><BR>ResultSet rs=sta.executeQuery
<BR>("SELECT Name,Sex,Age FROM student"); <BR>System.out.println("Name Sex
Age"); <BR><BR><BR><BR> 将以下两行删掉: <BR><BR><BR>chinese=rs.getString(4);
<BR>maths=rs.getString(5); <BR><BR><BR><BR> 将output=name+" "+sex+"
"+age+" "+chinese+" "+maths; <BR><BR> 改为:output=name+" "+sex+" "+age;
<BR><BR> 7) 以下是一个程序实例: <BR><BR> 源程序:lianxi1301.java <BR><BR><BR>import
java.sql.*; <BR>public class lianxi1301 <BR>{ <BR>public static void
main(String args[]) throws SQLException <BR>{ <BR>try <BR>{ <BR>String
name,sex,chinese,output;
<BR>Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); <BR>Connection
con=DriverManager.getConnection <BR>("jdbc:odbc:student"); <BR>Statement
sta=con.createStatement(); <BR>ResultSet rs=sta.executeQuery("SELECT
<BR>Name,Sex,Chinese FROM student Where Age=9");
<BR>System.out.println("Name Sex Chinese"); <BR>while(rs.next()) <BR>{
<BR>name=rs.getString(1); <BR>sex=rs.getString(2);
<BR>chinese=rs.getString(3); <BR>output=name+" "+sex+" "+chinese;
<BR>System.out.println(output); <BR>} <BR>} catch(java.lang.Exception ex)
{ <BR>ex.printStackTrace(); <BR>} <BR>} <BR>}
<BR><BR><BR><BR> 程序的输出如下图所示: <BR><BR><BR> 图13-13 lianxi1301的输出
<BR><BR> 13.3 编写多线程Java程序 <BR><BR> 传授新知
<BR><BR> 在今天,是否支持编写多线程的程序,已经成为一个程序设计语言的重要方面。那么什么是多线程,什么又是线程呢?
<BR><BR> 要搞懂什么是线程,其实就是要能够清楚地区分三个概念:“程序”、“进程”、“线程”。程序嘛,大家可能够很容易理解。比如说,“写字板”、“Word”,还有我们前面写过的程序。那么什么是“进程”呢?
<BR><BR> 在许多计算机理论书籍中的定义十分拗口,对于您来说,只需记住:“进程就是一个运行着的程序”。看到这里,可能有人会说:“唉,说了半天,进程就是程序呀!一回事嘛!很简单,我懂了”。很遗憾,我得告诉你,这样的理解是错误的。请看下图:
<BR><BR><BR> 图13-14 进程示意图
<BR><BR> 我们启动了两次notepad,就出现了两个记事本!而且,我们还可以在这两个记事本上写上不同的内容!
<BR><BR> 它们不是一个程序?它们可都是notepad呀,我们把这两个运行中的程序称为“进程”,不同的进程是完全不相关的。它们都有各地的内存块,用来存放运行时的临时数据(例如,在两个记事本上的写的字都是存放在各自进程的内存块中的)。
<BR><BR> 不知大家是否有过使用DOS操作系统的经验,在DOS中一次只允许执行一个程序,用刚学会的术语来说,就是只有一个进程。这种操作系统被称为“单任务系统”。
<BR><BR> 而在Windows中,我们可以允许执行多个程序,也可以将一个程序执行多次,这种操作系统就是“多任务系统”。操作系统负责协调这些运行着的程序---进程。
<BR><BR> 正如下图所示,在这种情况下,存在着互相不干拢的多个进程: <BR><BR><BR> 图13-15进程示意图
<BR><BR> 每一个圈代表一个进程,圆圈是这个进程的地址空间、寄存器……,中间的长方形是进程中的程序段,而黑色箭头则是程序计数器。
<BR><BR> 这个进程获得执行权时(CPU时间分片,轮到它),就从程序计数器开始执行。在程序时所有的数据都存放在自己的地址空间里(圆圈中)。
<BR><BR> 一些提示:
<BR><BR> 操作系统其中一个职责就是管理进程,为它们分配不同的存储区域,如果让这些“圆圈”相交,程序就会崩溃,Windows就蓝屏了!!
<BR><BR> 这个机制看起来十分的合理,不过遇到有些问题时,就会感觉到它并不是那么尽善尽美了。例如,我们有一个程序用来完成从远方接收信息,然后将其打印出来!
<BR><BR> 这个程序在工作时发现有这样的问题:当打印机忙的时候,这个程序无法打印,它就被“阻塞”了,一直在等待打印机空闲。在这个等待的时间里,也无法接收信息了。
<BR><BR> 这时,我们就可以使用“线程”来解决。 <BR><BR><BR> 图13-16 线程示意图
<BR><BR> 上图中,圆圈仍然代表一个进程,但我们在这个进程中有两个不同的代码段,它们共享进程的地址空间、寄存器……,一个负责接收远方的信息,另一个负责打印出来!
<BR><BR> 这样,如果遇到打印机忙的时候,也只会将负责打印的那个部分“阻塞”,接收信息还是照常运行的。
<BR><BR> 这两个不同的代码段,就是线程,也称之为轻量进程。我们发现在一个程序中使用多个线程将会使我们的程序更Power!
<BR><BR> 注意:
<BR><BR> 线程的实现是要操作系统支持的,要写多线程的程序则需要编程语言的支持。Window操作系统是支持多线程的。因此我们只要使用能够支持多线程的编程语言就可以写多线程的程序。Java就是一种能够支持多线程编程的程序语言。
<BR><BR> 多线程的程序设计是比较高级的内容,而本书是一本Java的入门书籍,因此我们只对其做一个简单的介绍,使得大家通过本书的学习具备自学编写多线程的Java程序的能力。
<BR><BR> 在Java语言中,可以采用两种方法来实现多线程: <BR><BR> 1.继承Thread类
<BR><BR> 也就是说,创建一个Thread类的子类,如: <BR><BR><BR>public class testThread
extends Thread <BR><BR><BR><BR> 由于这种方法显得较为死板,所以我们一般很少使用这种方法。
<BR><BR> 2.使用Runnable接口
<BR><BR> 正如前面所说的,通常我们希望我们的类扩展其它类,而在Java中又不支持多重继承(也就是同时继承A、B两个类)。我们必须解决这个问题:
<BR><BR> 一些提示: <BR><BR> 例如,我们想在一个Java的Applet程序中使用多线程,但我们要编写Applet
<BR><BR> 程序就必须继承java的Applet或Japplet类,那我们就无法再继承Thread类。因
为Java是不允许一个类同时继承两个类的。 <BR><BR> Java提供了一个Runnable接口来实现这个问题。 <BR><BR> 1)
使用Runnable接口,首先在类的定义后面加上implements Runnable,如: <BR><BR><BR>public class
testThread extends Applet implements Runnable <BR><BR><BR><BR> 2)
然后,再重写定义一个run()方法,定义线程要做的事情。 <BR><BR> 实例说明
<BR><BR> 下面,我们就来编写一个多线程的程序。首先创建两个源程序:testThread.java和Threader.java。
<BR><BR> 源程序:testThread.java <BR><BR><BR>import java.awt.*; <BR>import
java.applet.*; <BR>import Threader; <BR>public class testThread extends
Applet implements Runnable <BR>{ <BR>Threader theRacers[]; <BR>static int
racerCount = 3; <BR>Thread theThreads[]; <BR>Thread thisThread; <BR>static
boolean inApplet=true; <BR>int numberofThreadsAtStart; <BR>public void
init() <BR>{ <BR>numberofThreadsAtStart = Thread.activeCount();
<BR>setLayout(new GridLayout(racerCount,1)); <BR>theRacers = new Threader
[racerCount]; <BR>theThreads = new Thread[racerCount]; <BR>for (int
x=0;xnumberofThreadsAtStart+2) <BR>{ <BR>try <BR>{
<BR>thisThread.sleep(100); <BR>} <BR>catch (InterruptedException e) <BR>{
<BR>System.out.println("thisThread was interrupted"); <BR>} <BR>} <BR>if
(inApplet) <BR>{ <BR>stop(); <BR>destroy(); <BR>} <BR>else
<BR>System.exit(0); <BR>} <BR>public static void main (String argv[])
<BR>{ <BR>inApplet=false; <BR>if (argv.length>0) <BR>racerCount =
Integer.parseInt(argv[0]); <BR>Frame theFrame = new Frame("The Great
Thread Race"); <BR>testThread theRace = new testThread();
<BR>theFrame.setSize(400,200); <BR>theFrame.add ("Center",theRace);
<BR>theFrame.show(); <BR>theRace.init(); <BR>theFrame.pack();
<BR>theRace.start(); <BR>} <BR>} <BR><BR><BR><BR> 源程序:Threader.java
<BR><BR><BR>import java.awt.*; <BR>public class Threader extends Canvas
implements Runnable <BR>{ <BR>int myPosition =0; <BR>String myName;
<BR>int numberofSteps=600; <BR>boolean keepRunning = true; <BR>public
Threader (String inName) <BR>{ <BR>myName=new String (inName); <BR>}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -