毕业设计论文基于嵌入式SQL技术数据检索功能的实现.doc
皖西学院本科毕业论文(设计)皖 西 学 院本科毕业论文(设计)论 文 题 目基于嵌入式SQL技术数据检索功能的实现 姓名(学号) 系 别 信息工程学院 专 业 计算机科学与技术0701 导 师 姓 名 二 一一年 六 月基于嵌入式SQL技术数据检索功能的实现作 者 指导教师 摘要:SQL是面向集合的描述性语言,具有功能强、效率高、使用灵活等特点,而单纯的SQL语言是一种独立的、非过程性语言,很难实现具有过程性控制的完整应用系统。嵌入式SQL语言就是将SQL语句直接嵌入到程序的源代码中,与其他高级程序设计语言相结合,使SQL语句负责控制数据库,高级语言负责控制程序流程,从而实现各种复杂应用的处理。 本文在基于SQL技术的基础上,介绍了嵌入式SQL技术的发展、嵌入式SQL语言以及嵌入式SQL工作原理及流程,以JAVA作为宿主语言,以 “图书馆管理系统”的设计为例,描述了嵌入式SQL技术的具体应用,重点设计并实现了数据的检索功能。 关键词: 嵌入式SQL;宿主语言;JAVA ;JDBC The Implementation of Data Retrieval Based on Embedded SQL TechnologyAbstract: SQL is a descriptive language which facing the set, it has strong function, high efficiency, agile using and so on. While pure SQL language is independent and not the process of language, it hard to achieve application systems which with process sexual control, Embedded SQL language embedded the SQL statement to program source code directly, then combined other high-level programming language, Making the SQL statement responsible for controlling the database and Senior language is responsible for control processes, So as to realize the processing various complex applications. In this paper, on the basis of SQL technology, Introduced the development of embedded SQL technology, embedded SQL language and embedded SQL working principle and process, As the host language in JAVA, With "library management system" the design as an example, Describes the application of the embedded SQL technology, key design and realized data retrieval functions. Key words: Embedded SQL ; Host Language ; JAVA ;JDBC目 录1绪论11.1课题背景11.2国内外的发展及现状11.3 课题研究的主要内容22嵌入式SQL技术22.1 SQL和嵌入式SQL简介22.2 SQL语句32.2.1基本SQL语句32.2.2复杂SQL语句42.3嵌入式SQL语句62.4嵌入式SQL工作原理及流程62.5嵌入式SQL应用72.5.1宿主语言JAVA简介72.5.2宿主语言JAVA DB引擎驱动72.5.3宿主语言JAVA应用程序接口JDBC92.5.4嵌入式SQL应用示例143数据检索功能的实现173.1图书管理系统183.2数据检索功能的设计183.2.1 系统结构设计183.2.2 数据库设计193.3数据检索功能的实现21总 结26致 谢27参考文献:281绪论1.1 课题背景 数据库技术是现代信息科学与技术的重要组成部分,是计算机数据处理与信息管理系统的核心。数据库技术研究和解决了计算机信息处理过程中大量数据有效地组织和存储的问题,在数据库系统中减少数据存储冗余、实现数据共享、保障数据安全以及高效地检索数据和处理数据。随着嵌入式系统软件的发展,编程语言从10多年以前的汇编为主流发展到现在C、C+、Java为主流。另外,面向对象设计技术、组件技术等在嵌入式系统软件设计中的应用也日益引起人们的重视。嵌入式SQL(英文: Embedded SQL)是一种将SQL语句直接写入C语言,JAVAL,FORTRAN, Ada等编程语言的源代码中的方法。借此方法,可使得应用程序拥有了访问数据以及处理数据的能力。在这一方法中,将SQL文嵌入的目标源码的语言称为宿主语言。1.2 国内外的发展及现状随着嵌入式SQL技术的普遍使用,支持嵌入式SQL的数据库产品也大量出现:Oracle DatabaseAda Pro*Ada在Oracle 7.3的版本中被加入产品族,并且在Oracle 8中被替换为SQL*Module。但在此之后就一直没有更新2。SQL*Module支持Ada 83.C/C+ Pro*C 在Oracle 8 时被替换成了Pro*C/C+。之后Pro*C/C+ 到Oracle Database 11g仍都在被支持。COBOL Pro*COBOL到Oracle Database 11g仍都在被支持。Fortran Pro*FORTRAN 在Oracle 8之后的Oracle版本中就不再被更新,但Bug修正仍在维护中3。Pascal Pro*Pascal在Oracle 8之后的Oracle版本中就不再被更新3。PI/L Pro*PL/I 自Oracle 8之后就不再被更新,但文档中仍然有记述3。IBM DB2IBM DB2的版本9中提供了对于C/C+,COBOL,Java等宿主语言的嵌入式SQL的支持。PostgreSQLC/C+ PostgreSQL 自版本6.3起就提供了对于C/C+的嵌入式SQL的支持,以ECPG组件的形式存在。1.3课题研究的主要内容首先,本文简要的叙述了嵌入式SQL的定义以及发展现状,并详细介绍了嵌入式SQL的数据检索语句:基本嵌入式SQL数据检索功能语句和复杂嵌入式SQL数据检索语句;然后,本文以JAVA为宿主语言,重点分析嵌入式SQL在宿主语言JAVA中的工作原理和处理流程 ,以及对JDBC驱动和JDBC API做了详细介绍;最后,针对嵌入式SQL和宿主语言JAVA,以实例“图书馆管理系统”演示嵌入式SQL的具体应用。2嵌入式SQL技术2.1 SQL和嵌入式SQL简介SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的接口。它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使他具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。SQL语言包含4个部分: 数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。 数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。 数据查询语言(DQL),例如:SELECT语句。 数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。 SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。嵌入式SQL(英文: Embedded SQL)是一种将SQL语句直接写入C语言,COBOL,FORTRAN, JAVA等编程语言的源代码中的方法。借此方法,可使得应用程序拥有了访问数据以及处理数据的能力。在这一方法中,将SQL文嵌入的目标源码的语言称为宿主语言。在SQL标准的SQL86(1986年发布)中定义了对于COBOL, FORTRAN, PI/L等语言的嵌入式SQL的规范。在SQL89(1989年发布)规范中,定义了对于C语言的嵌入式SQL的规范。一些大型的数据库厂商发布的数据库产品中,都提供了对于嵌入式SQL的支持。比如Oracle, DB2等。2.2 SQL语句 2.2.1基本SQL语句 简单嵌入式SQL数据检索功能语句表示只是对单表的数据检索,其基本语句为:“select <检索内容> from <表> where <检索条件>group by <分类字段> having <检索条件> order by <排序字段>“例如:查询学号为“S040901106”学生的姓名表2-1,studentInfo表相关数据StuIdStuNameDeptIdSexS040201101任非02MS040901102王情02FS040901103戴丽08FS040901106郑治08MSQL语句: SELECT StuName FROM studentInfo WHERE StuId = S040901106; 2.2.1复杂SQL语句 然而现实数据库项目中,对于数据库的数据检索可能设计有多个表,或要求更复杂的数据检索SQL语句,所以有必要介绍几种复杂的嵌入式SQL数据检索语句。3.2.1联接查询 (一)内联接内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:SELECT *FROM authors AS a INNER JOIN publishers AS pON a.city=p.city 又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):SELECT a.*,p.pub_id,p.pub_name,p.countryFROM authors AS a INNER JOIN publishers AS pON a.city=p.city(二)外连接内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来:SELECT a.*,b.* FROM luntan LEFT JOIN usertable as bON a.username=b.username以及他们所在的城市:SELECT a.*,b.* FROM city as a FULL OUTER JOIN user as bON a.username=b.username(三)交叉连接交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。SELECT type,pub_nameFROM titles CROSS JOIN publishersORDER BY type2.3嵌入式SQL语句 (1)宿主变量宿主变量就是在嵌入式SQL语句中引用主语言说明的程序变量如:在JAVA语句中对程序变量:username、password的进行数据库插入操作String sql = "insert into reader(username,password) values('"+ username+ "','"+ password+ "')"在嵌入式SQL语句中使用宿主变量前,必须采用 “+username + ” 的形式给宿主变量说明。2.4嵌入式SQL工作原理及流程图2.1 数据库产品中嵌入式SQL操作流程图为了解决嵌入式SQL源码的处理流程问题,数据库厂商需要提供一个嵌入式SQL的预编译器,把包含有嵌入式SQL文的宿主语言源码转换成纯宿主语言的代码。这样一来,源码即可使用宿主语言对应的编译器进行编译。通常情况下,经过嵌入式SQL的预编译之后,原有的嵌入式SQL会被转换成一系列函数调用。因此,数据库厂商还需要提供一些列函数库(图2.1),以确保链接器能够把代码中的函数调用与对应的实现链接起来。2.5嵌入式SQL应用 2.5.1宿主语言JAVA简介 Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。JAVA项目运行环境平台(图2.2):应用组件应用组件应用组件 DB组件.CLASS文件库 JVM图2.2JAVA程序运行环境平台图 2.5.2宿主语言JAVA DB引擎驱动 众所周知,在台式机领域,DB是一个十分关键的基础软件。以往嵌入式系统的软件可能更侧重于与硬件的交互与控制,但随着对嵌入式系统功能需求的日益复杂化,嵌入式系统软件中,信息、数据的保存与管理的比重也日益增加。在这样的背景下,嵌入式系统软件开发中,通过引入DB组件,对实现软件整体框架结构的组件化与简单化,有着十分明显而重要的意义。DB引擎驱动的总体框架(如图2.3):整个DB组件设计为3层结构,分别为JDBC接口层、SQL解释层和动作执行层。这3层之间呈单向依赖关系。也就是说,SQL解释层依赖于动作执行层,但动作执行层不依赖于其上面的两层,可以单独存在而直接被使用。如果用户以使用方便为主要目的,可采用完全配置方式,应用程序通过JDBC接口层存取数据。反之,如果用户对空间和效率要求较高,可仅配置动作执行层组件,应用程序直接调用动作执行层的API进行数据的检过和更新等操作。JDBC接口层 SQL解释层 动作执行层 JVM图2.3 DB引擎驱动的总体框架图(1)JDBC接口层如前文所述是可选组件,旨在为应用程序提供一个标准的DB调用接口。(2)SQL解释层本DB组件实现的SQL解释层,只实现了标准SQL的一个小子集,主要完成select、delete、insert、update、create table、drop table等功能。其中数据操作语句(select、delete、insert、update)的解释要点之一是where条件子句的解释执行,类似于数学表达式求值算法。(3)动作执行层动作执行层是整个DB组件的核心和关键,因为所有的DB操作最终都由该层完成,同时用户也可以跳过上面的两层,直接调用该层的API,以实现相同的数据操作功能。 2.5.3宿主语言JAVA应用程序接口JDBC (1) JDBC介绍 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API(如图2.6、图2.7),可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序。Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法(如图2.4)。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。 Java 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是 Java应用程序与各种不同数据库之间进行对话的方法。而 JDBC 正是作为此种用途的机制。 JDBC 扩展了 Java 的功能。例如,用 Java 和 JDBC API 可以发布含有 applet 的网页,而该 applet 使用的信息可能来自远程数据库。企业也可以用 JDBC 通过 Intranet 将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有 Windows、 Macintosh 和UNIX 等各种不同的操作系统)。随着越来越多的程序员开始使用Java 编程语言,对从 Java 中便捷地访问数据库的要求也在日益增加。图2.4.JDBC框架图(2) JDBC驱动类型 图2.5JDBC驱动类型说明图u JDBC-ODBC桥(JDBC-ODBC bridge)(图2.5) JDBC调用®ODBC 调用。要求ODBC代码、client端代码 都要在客户机上安装。 u本地API部分JAVA驱动(Native-API partly-Java driver) JDBC调用 ® 数据库的Client 端API,也需要在客户机上 安装代码。u网络协议完全JAVA驱动(JDBC-Net pure Java driver) JDBC调用 ® 独立于任何DBMS的网络协议,该协议 将由另外一个服务器转换为某种DBMS协议。u本地协议完全JAVA驱动(Native-protocol pure Java driver) JDBC调用 ®特定DBMS的网络协议。(3) JDBC APIJDBC API 功能:u建立与数据库的连接u发送SQL语句u处理结果(1)JDBC API 类:图2.6 JDBC API所涉及的类图 (2)JDBC 类层次: 图2.7 JDBC API类层次图(3)建立数据库的连接:u JDBC的DriverManager查找到相应的数据库Driver并装载。从系统属性java.sql中读取Driver的类名,并一一注册。在程序中使用Class.forName( )方法动态装载并注册Driver。 如Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”), 注册JDBC-ODBC桥。 u通过DriverManager.getConnection( )与数据库建立连接数据库连接串URL,指定数据源以及使用的数据库访问协议。语法格式:jdbc:<subprotocol>:<subname>例:通过JDBC-ODBC桥接驱动与wombat数据源建立连接。Connection con = DriverManager.getConnection(“jdbc:odbc: wombat”,”username”,”password”);(4)传送SQL语句:u在数据库连接上创建Statement对象,将各种SQL语句发送到所连接的数据库。/* 传送SQL语句并得到结果集rs */Statement stmt = con.createStatement( );ResultSet rs = stmt.executeQuery(“ SELECT a, b, c FROM Table1”); u对于多次执行但参数不同的SQL语句,可以使用PreparedStatement 对象。u使用CallableStatement对象调用数据库上的存储过程。(5)处理结果集:u结果集是查询语句返回的数据库记录的集合。u在结果集中通过游标(Cursor)控制具体记录的访问。u SQL数据类型与JAVA数据类型的转换 根据SQL 数据类型的不同,使用不同的方法读取数据。 /*处理结果集 rs*/while (rs.next( )int x = rs.getInt(“a”);String s = rs.getString(“b”);float f = getFloat(“c”);stmt.close( );con.close( ) 2.5.4嵌入式SQL应用示例 本节以图书馆管理系统的部分功能模块为例,演示说明JAVA语言中嵌入SQL的处理流程。 图2.8用户登陆界面 图2.9用户登陆后操作界面 系统以用户登陆界面的初始界面,根据用户输入的用户名和密码,使用getText()方法获取用户输入的值,并赋值给java定义变量“user”、“pass”,利用SQL语句结合变量对数据库中的表USER进行数据匹配,用户只有在输入与数据库相匹配的用户名和密码时,才能登陆系统,进如图2.9 用户操作界面具体sql语句:"select * from user where name=" + "'" + user+ "' and pass=" + "'" + pass + "'"部分代码展示:登陆时对数据库的操作:private void btn_okActionPerformed(ActionEvent e) String user = tf_user.getText(); / 获得用户名String pass = pf_pass.getText(); / 获得密码String username = ""int is_admin;/ 未输入用户名if (user.equals("") JOptionPane.showMessageDialog(this, "用户名不允许为空!");return;try / 在数据库中查询String sqlStr = "select * from user where name=" + "'" + user+ "' and pass=" + "'" + pass + "'"ResultSet result = BaseDao.executeQuery(sqlStr);if (result.next() username = result.getString("name");is_admin = result.getInt("is_admin");BaseDao.close(); else JOptionPane.showMessageDialog(this, "用户名或密码不正确!");BaseDao.close();return;GlobalVar.login_user = username; / 记录当前用户/ 进入主界面Main main = new Main();main.setPurView(byte) is_admin);this.dispose(); catch (Exception ex) ex.printStackTrace();连接数据库部分:/ 构造方法,创建数据库连接private BaseDao() try if (conn = null) Class.forName(driver); / 加载数据库驱动conn = DriverManager.getConnection(url, dbUser, dbPwd); / 建立数据库连接 elsereturn; catch (Exception ee) ee.printStackTrace();实际查询操作部分:/ 执行数据库查询操作public static ResultSet executeQuery(String sql) try if (conn = null)new BaseDao();return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE).executeQuery(sql); / 执行数据库查询 catch (SQLException e) e.printStackTrace();return null;3数据检索功能的实现 本章以“图书馆管理系统”为例,介绍图书馆系统结构设计和数据库设计,重点针对系统的“查询管理”模块的“图书信息查询”进行说明分析。3.1图书管理系统图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。数据处理手工操作,工作量大,出错率高,出错后不易更改。图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的图书进行更改就更加困难了。本系统以研究java嵌入SQL为目的实现图书馆的基本功能:用户登陆、图书管理、用户管理、用户借书还书管理。3.2数据检索功能的设计 3.2.1 系统结构设计 本系统使用对象为图书馆管理员。其中包括基本的信息维护、用户的借还书管理、数据检索和系统管理四大模块。管理员登陆 登陆登陆失败 错误用户名或密码系统主页面 系统维护 查询管理借还管理基础维护菜单退出系统密码修改图书查询用户查询 还书借书图书维护用户信息 新增用户信息 删除用户信息 修改用户信息 新增图书信息 删除图书信息修改图书信息图3.1 总体设计架构 3.2.2 数据库设计本系统数据库使用的是MySQL数据库,使用该数据库是因为本数据库的使用方便性。首先建立一个数据库名为library,在其中建立四个信息表,通过输入数据建立表或者直接建立空表并设置字段名和数据类型。建立的四个表分别为用户信息表、图书信息表、借还书信息表、管理员信息表。数据库具体设计如表3-1,3-2,3-3,3-4所示:表3-1 用户信息表(user)字段名数据类型可否为空说明idint(100)不可自动编号nameVarchar(20)不可用户名typeVarchar(20)不可用户角色sexVarchar(20)不可性别max_numVarchar(20)不可最大借书数days_numVarchar(20)不可结束天数 表3-2 图书息表(book)字段名数据类型可否为空说明idint(100)不可图书编号nameVarchar(20)不可图书名typeVarchar(20)不可种类authorVarchar(20)不可作者translatorVarchar(20)不可翻译者publisherVarchar(20)不可出版社Publish_timeVarchar(20)不可出版时间priceVarchar(20)不可价格stockVarchar(20)不可状态 表3-3 借还书信息表(borrow)字段名数据类型可否为空说明book_idVarchar(20)不可图书编号reader_idVarchar(20)不可读者IDborrow_dateVarchar(20)不可借书时间back_dateVarchar(20)不可还书时间is_backint(10)不可是否归还idint(100)不可自动编号表3-4 管理员信息表(user)字段名数据类型可否为空说明idint(100)不可自动编号nameVarchar(20)不可管理员用户名passVarchar(20)不可借用户密码is_adminint(10)不可是否为管理员3.3数据检索功能的实现该部分以系统查询图书信息模块为例,重点演示说明在宿主语言JAVA中嵌入SQL实现对书籍数据的检索。 图3.2 图书信息查询操作界面(1) 图3.3 图书信息查询操作界面(2) 用户以正确匹配的用户名和密码登陆系统后,点击“查询管理”进入“图书查询”,可出现图3.3,。 该部分图书检索功能以图书编号为检索条件,输入“图书编号”,点击查询即可查找相应的图书信息,程序实现中,在查询图书的方法BookQuery内设置“图书编号”变量“id”,通过String id = tf_id.getText();获取用户输入的图书编号 ,最后通过对sql语句的执行,获取所要检索的图书信息SQL语句:String sql = "select * from book"if (id != null && id.length() > 0) sql = "select * from book where id ='" + id + "'"部分代码展示: 连接数据库部分:/ 构造方法,创建数据库连接private BaseDao() try if (conn = null) Class.forName(driver); / 加载数据库驱动conn = DriverManager.getConnection(url, dbUser, dbPwd); / 建立数据库连接 elsereturn; catch (Exception ee) ee.printStackTrace();前台实现数据检索的方法:private void btn_cxActionPerformed(ActionEvent e) String id = tf_id.getText(); / 获取图书编号/ 根据查询条件构建sqlString sql = "select *