一、问答题
1.(1)添加数据源,(2)选择驱动程序,(3)命名数据源名称。
2.不必使用数据名称。
3.减轻数据库内部SQL语句解释器的负担。
4.事务由一组SQL语句组成,所谓事务处理是指:应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。
5.(1)用setAutoCommit()方法关闭自动提交模式,(2)用commit()方法处理事务,(3)用rollback()方法处理事务失败。
四、编程题
1. import java.sql.*;
import java.util.*;
public class E {
public static void main(String args[]) {
Query query=new Query();
String dataSource="myData";
String tableName="goods";
Scanner read=new Scanner(System.in);
System.out.print("输入数据源名:");
dataSource = read.nextLine();
System.out.print("输入表名:");
tableName = read.nextLine();
query.setDatasourceName(dataSource);
query.setTableName(tableName);
query.setSQL("SELECT * FROM "+tableName);
query.inputQueryResult();
}
}
class Query {
String datasourceName=""; //数据源名
String tableName=""; //表名
String SQL; //SQL语句
public Query() {
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e) {
System.out.print(e);
}
}
public void setDatasourceName(String s) {
datasourceName = s.trim();
}
public void setTableName(String s) {
tableName = s.trim();
}
public void setSQL(String SQL) {
this.SQL = SQL.trim();
}
public void inputQueryResult() {
Connection con;
Statement sql;
ResultSet rs;
try {
String uri = "jdbc:odbc:"+datasourceName;
String id = "";
String password = "";
con = DriverManager.getConnection(uri,id,password);
DatabaseMetaData metadata = con.getMetaData();
ResultSet rs1 = metadata.getColumns(null,null,tableName,null);
int 字段个数 = 0;
while(rs1.next()) {
字段个数++;
}
sql = con.createStatement();
rs = sql.executeQuery(SQL);
while(rs.next()) {
for(int k=1;k<=字段个数;k++) {
System.out.print(" "+rs.getString(k)+" ");
}
System.out.println("");
}
con.close();
}
catch(SQLException e) {
System.out.println("请输入正确的表名"+e);
}
}
}
2. import java.sql.*;
import java.util.*;
public class E {
public static void main(String args[]) {
Query query = new Query();
String dataSource = "myData";
String tableName = "goods";
query.setDatasourceName(dataSource);
query.setTableName(tableName);
String name = "";
Scanner read=new Scanner(System.in);
System.out.print("商品名:");
name = read.nextLine();
String str="'%["+name+"]%'";
String SQL = "SELECT * FROM "+tableName+" WHERE name LIKE "+str;
query.setSQL(SQL);
System.out.println(tableName+"表中商品名是"+name+"的记录");
query.inputQueryResult();
}
}
class Query {
String datasourceName=""; //数据源名
String tableName=""; //表名
String SQL; //SQL语句
public Query() {
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e) {
System.out.print(e);
}
}
public void setDatasourceName(String s) {
datasourceName = s.trim();
}
public void setTableName(String s) {
tableName = s.trim();
}
public void setSQL(String SQL) {
this.SQL = SQL.trim();
}
public void inputQueryResult() {
Connection con;
Statement sql;
ResultSet rs;
try {
String uri = "jdbc:odbc:"+datasourceName;
String id = "";
String password = "";
con = DriverManager.getConnection(uri,id,password);
DatabaseMetaData metadata = con.getMetaData();
ResultSet rs1 = metadata.getColumns(null,null,tableName,null);
int 字段个数 = 0;
while(rs1.next()) {
字段个数++;
}
sql = con.createStatement();
rs = sql.executeQuery(SQL);
while(rs.next()) {
for(int k=1;k<=字段个数;k++) {
System.out.print(" "+rs.getString(k)+" ");
}
System.out.println("");
}
con.close();
}
catch(SQLException e) {
System.out.println("请输入正确的表名"+e);
}
}
}
3.将例子5中的代码:
String SQL = "SELECT * FROM "+tableName+" ORDER BY name";
更改为:
String SQL = "SELECT * FROM "+tableName+" ORDER BY madeTime";
可达题目要求。
一、问答题
1.4种状态:新建、运行、中断和死亡。
2.有4种原因的中断:(1)JVM将CPU资源从当前线程切换给其他线程,使本线程让出CPU的使用权处于中断状态。(2)线程使用CPU资源期间,执行了sleep(int millsecond)方法,使当前线程进入休眠状态。(3)线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态。(4)线程使用CPU资源期间,执行某个操作进入阻塞状态,比如执行读/写操作引起阻塞。
3.死亡状态,不能再调用start()方法。
4.新建和死亡状态。
5.两种方法:用Thread类或其子类。
6.使用 setPrority(int grade)方法。
7.Java使我们可以创建多个线程,在处理多线程问题时,我们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的问题作出处理,否则可能发生混乱。
8.当一个线程使用的同步方法中用到某个变量,而此变量又需要其它线程修改后才能符合本线程的需要,那么可以在同步方法中使用wait()方法。使用wait方法可以中断方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法。其它线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待。
9.不合理。
10.“吵醒”休眠的线程。一个占有CPU资源的线程可以让休眠的线程调用interrupt 方法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠,重新排队等待CPU资源。
二、选择题
1.A。2.A。3.B。
三、阅读程序
1.属于上机调试题目,解答略。
2.属于上机调试题目,解答略。
3.属于上机调试题目,解答略。
4.属于上机调试题目,解答略。
5.属于上机调试题目,解答略。
6.属于上机调试题目,解答略
7.【代码】:BA。
8.属于上机调试题目,解答略
四、编写程序
1. public class E {
public static void main(String args[]) {
Cinema a=new Cinema();
a.zhang.start();
a.sun.start();
a.zhao.start();
}
}
class TicketSeller //负责卖票的类。
{ int fiveNumber=3,tenNumber=0,twentyNumber=0;
public synchronized void sellTicket(int receiveMoney)
{ if(receiveMoney==5)
{ fiveNumber=fiveNumber+1;
System.out.println(Thread.currentThread().getName()+
"给我5元钱,这是您的1张入场卷");
}
else if(receiveMoney==10)
{ while(fiveNumber<1)
{ try { System.out.println(Thread.currentThread().getName()+"靠边等");
wait();
System.out.println(Thread.currentThread().getName()+"结束等待");
}
catch(InterruptedException e) {}
}
fiveNumber=fiveNumber-1;
tenNumber=tenNumber+1;
System.out.println(Thread.currentThread().getName()+
"给我10元钱,找您5元,这是您的1张入场卷");
}
else if(receiveMoney==20)
{ while(fiveNumber<1||tenNumber<1)
{ try { System.out.println(Thread.currentThread().getName()+"靠边等");
wait();
System.out.println(Thread.currentThread().getName()+"结束等待");
}
catch(InterruptedException e) {}
}
fiveNumber=fiveNumber-1;
tenNumber=tenNumber-1;
twentyNumber=twentyNumber+1;
System.out.println(Thread.currentThread().getName()+
"给20元钱,找您一张5元和一张10元,这是您的1张入场卷");
}
notifyAll();
}
}
class Cinema implements Runnable
{ Thread zhang,sun,zhao;
TicketSeller seller;
Cinema()
{ zhang=new Thread(this);
sun=new Thread(this);
zhao=new Thread(this);
zhang.setName("张小有");
sun.setName("孙大名");
zhao.setName("赵中堂");
seller=new TicketSeller();
}
public void run()
{ if(Thread.currentThread()==zhang)
{ seller.sellTicket(20);
}
else if(Thread.currentThread()==sun)
{ seller.sellTicket(10);
}
else if(Thread.currentThread()==zhao)
{ seller.sellTicket(5);
}
}
}
2. 参照本章例子6
3.参照本章例子9