知ing

Java2实用教程(第4版)

耿祥义、张跃平 / 清华大学出版社

頑張って! 上传

查看本书

习题十一(第11章)

一、问答题

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";

可达题目要求。

习题十二(第12章)

一、问答题

14状态:新建、运行、中断和死亡。

24种原因的中断:(1JVMCPU资源从当前线程切换给其他线程,使本线程让出CPU的使用权处于中断状态。(2)线程使用CPU资源期间,执行了sleep(int millsecond)方法,使当前线程进入休眠状态。(3)线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态。(4)线程使用CPU资源期间,执行某个操作进入阻塞状态,比如执行读/写操作引起阻塞。

3死亡状态,不能再调用start()方法。

4.新建和死亡状态

5两种方法:用Thread类或其子类

6.使用 setPrority(int grade)方法

7Java使我们可以创建多个线程,在处理多线程问题时,我们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的问题作出处理,否则可能发生混乱

8当一个线程使用的同步方法中用到某个变量,而此变量又需要其它线程修改后才能符合本线程的需要,那么可以在同步方法中使用wait()方法。使用wait方法可以中断方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法。其它线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待。

9.不合理。

10“吵醒”休眠的线程。一个占有CPU资源的线程可以让休眠的线程调用interrupt 方法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠,重新排队等待CPU资源。

二、选择题

1A2A3B

三、阅读程序

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


查看更多