JAVA网络程序设计实验报告_第1页
JAVA网络程序设计实验报告_第2页
JAVA网络程序设计实验报告_第3页
JAVA网络程序设计实验报告_第4页
JAVA网络程序设计实验报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java网络程序设计实验五:JDBC班级:姓名:学号:日期:2010-实验五:JDBC一.实验目的1.掌握SQL语句和MYSQL数据库操作命令;2.掌握关系型数据库设计规则;3.掌握JDBC类库包使用规则。二.实验内容1.学习SQL语言基本语法,了解MYSQL数据库,掌握JDBC相关知识;2.利用MYSQL设计个人信息数据库,使用JDBC进行连接和操作;3.完成以下各内容程序,截存运行结果图,并提交实验报告。三.基础知识:1.基础概念SQL(StructQueryLanguage,结构化查询语句)是标准的数据库操作命令集合,它允许可以对数据库中的多个对象进行操作,对于表对象存在Insert,Update,Delete,Select,Modify,Truncate,Create,Drop等操作。基础语法如下:Select字段1[,字段2,字段3]from数据表A[,数据表B]where条件1and(or)条件2orderbyInsertinto数据表(字段列表)values(值)Update数据表set字段1=值1[,字段2=值2]where条件1and(or)条件2Deletefrom数据表where条件1and(or)条件2关系型数据库关系型数据库以行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。表与表之间的数据记录有关系。用户用查询(Query)来检索数据库中的数据。一个Query是一个用于指定数据库中行和列的SELECT语句。关系型数据库通常包含下列组件:客户端应用程序(Client),数据库服务器(Server),数据库(Database)。SQL(StructuredQueryLanguage)Client端和Server端的桥梁,Client用SQL来象Server端发送请求,Server返回Client端要求的结果。现在流行的大型关系型数据库有IBMDB2、Oracle、SQLServer、SyBase、Informix等。关系型数据库管理系统中储存与管理数据的基本形式是二维表MYSQL数据库MYSQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL关系型数据库于1998年1月发行第一个版本。它使用系统核心提供的多线程机制提供完全的多线程运行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等编程语言的编程接口(APIs),支持多种字段类型并且提供了完整的操作符支持查询中的SELECT和WHERE操作。MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。MySQL开发组于2001年中期公布MySQL4.0版本。在这个版本中将有以下新的特性被提供:新的表定义文件格式、高性能的数据复制功能、更加强大的全文搜索功能。在此之后,MySQL开发着希望提供安全的数据复制机制、在BeOS操作系统上的MySQL实现以及对延时关键字的定期刷新选项。随着时间的推进,MySQL对ANSI92/ANSI99标准完全兼容。由于MySQL是开放源代码的,因此任何人都可以在GeneralPublicLicense的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。JDBCJDBC(JavaDataBaseConnectivity,Java数据库连接)是由一组Java类和接口组成的API,相关类包括在java.sql类库包中。JDBC架构如图5-1所示。图5-1JBDC架构图JDBC是由一系列连接(Connection)\SQL语言(Statement)和结果集(ResultSet)构成。通过JDBCURL提供一种标识数据库的方法,可以使相应的驱动程序识别该数据库并与之建立连接,JDBCURL由三个部分组成,之间用”:”间隔。 jdbc:<驱动程序连接机制>:<数据ODBC名>连接时,首先通过DriverManager类加载数据库设备驱动程序,该类负责选取数据库驱动程序和建立新的数据库连接。注意,驱动管理器只能击活系统已登录的驱动程序。你可以通过自注册方法,添加需要的数据库驱动程序。利用驱动程序列表设置系统属性jdbc.drivers,Jdbc.drivers=com.pointbase.jdbc.jdbcDriver:com.foo.aDriver当驱动程序注册成功后,就可以用来装入驱动程序类来调用驱动程序,Class.forName(“com.pointbase.jdbc.jdbcDriver”)当数据库驱动程序已注册,就可以连接指定的数据库设备了,如果要访问一个在WIN32系统中已注册的数据库设备时,步骤如下:加载驱动程序Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);2)创建指定数据库的URLStringurl=“jdbc:odbc:fred”;3)建立数据库连接DriverManager.getConnection(url,“userID”,“password”);当数据库连接成功后可执行操作,在Java语言中提供了两种操作方法:分别为根据SQL语句提供查询,并返回一个结果集的executeQuery(StringSQL);以及根据SQL语言进行对数据对象的增加、删除和修改等操作,并返回一个操作成功的行好或者行数的executeUpdate(StringSQL);ResultSetexecuteQuery(Stringsql)throwsSQLExceptionIntexecuteUpdate(Stringsql)throwsSQLException在对数据库进行操作时,可能出现的异常有:SQLException,SQL语句有错误;BatchUpdateException,批量修改数据对象异常;SQLWarning,SQL语句警告;DataTruncation,数据清空异常。查询结果集resultset接口,JAVA的接口定义如图5-2所示。图5-2结果集接口一个数据表代表一个数据结果集合,它通常是一个对数据库查询申明(statement)的执行结果。一个ResultSet对象维护一个指向数据纪录行的指针,初始情况下是指向第一行之前。ResultSet的next()方法是将结果集指针移动到下一条纪录,当已经是最后移行了,将返回一个false值,这个值可以用来作为判断循环结束的条件,在一般情况下使用while循环来依次列出结果集中所有的纪录,如Statementstmt=newStatement();ResultSetrs=stmt.executeQuery();While(rs.next()){……}AdefaultResultSetobjectisnotupdatableandhasacursorthatmovesforwardonly.Thus,youcaniteratethroughitonlyonceandonlyfromthefirstrowtothelastrow.ItispossibletoproduceResultSetobjectsthatarescrollableand/orupdatable.Thefollowingcodefragment,inwhichconisavalidConnectionobject,illustrateshowtomakearesultsetthatisscrollableandinsensitivetoupdatesbyothers,andthatisupdatable.SeeResultSetfieldsforotheroptions.一个默认的ResultSet对象是不可以修改的,它有一个单方向,向前移动的游标。所以,你可以在数据集中从前到后浏览一遍数据四.主要方法:1.resultSetMethodSummary

booleanabsolute(int

row)移动游标到指定的纪录行上

voidafterLast()将游标移动到最后行之后

voidbeforeFirst()将游标移动到最前行之前

voidcancelRowUpdates()取消行修改

voidclose()关闭当前纪录结果集

voiddeleteRow()删除行

intfindColumn(\o"classinjava.lang"String

columnName)根据列名称定位列

booleanfirst()将游标移动到第一行

\o"interfaceinjava.sql"ArraygetArray(int

i)获得指定列号的数据存储在数组中

\o"interfaceinjava.sql"ArraygetArray(\o"classinjava.lang"String

colName)获得指定列名的数据存储在数组中

\o"classinjava.io"InputStreamgetAsciiStream(\o"classinjava.lang"String

columnName)获得ASCII流数据

\o"classinjava.math"BigDecimalgetBigDecimal(\o"classinjava.lang"String

columnName)获得大数值数据

\o"classinjava.io"InputStreamgetBinaryStream(\o"classinjava.lang"String

columnName)获得2进制流数据

\o"interfaceinjava.sql"BlobgetBlob(\o"classinjava.lang"String

colName)获得大数据量数据

booleangetBoolean(\o"classinjava.lang"String

columnName)获得boolean数据

bytegetByte(\o"classinjava.lang"String

columnName)获得字节数据

byte[]getBytes(\o"classinjava.lang"String

columnName)获得字节数组数据.

\o"classinjava.io"ReadergetCharacterStream(\o"classinjava.lang"String

columnName)获得字符流数据

\o"interfaceinjava.sql"ClobgetClob(\o"classinjava.lang"String

colName)获得大字符数据

intgetConcurrency()获得金额数据

\o"classinjava.lang"StringgetCursorName()获得游标名称

\o"classinjava.sql"DategetDate(\o"classinjava.lang"String

columnName)获得日期数据

\o"classinjava.sql"DategetDate(\o"classinjava.lang"String

columnName,\o"classinjava.util"Calendar

cal)获得某种格式的日期

doublegetDouble(\o"classinjava.lang"String

columnName)获得双精度数据

intgetFetchDirection()获得取数据的方向

intgetFetchSize()获得取数据的容量

floatgetFloat(\o"classinjava.lang"String

columnName)获得单精度数据

intgetInt(\o"classinjava.lang"String

columnName)获得整形数据

longgetLong(\o"classinjava.lang"String

columnName)获得长整形数据

intgetRow()获得纪录集行数

shortgetShort(\o"classinjava.lang"String

columnName)获得短整形Short类型数据

\o"interfaceinjava.sql"StatementgetStatement()获得SQL申明语句

\o"classinjava.lang"StringgetString(\o"classinjava.lang"String

columnName)获得字符串String类型数据

\o"classinjava.sql"TimegetTime(\o"classinjava.lang"String

columnName)获得时间Time类型数据

\o"classinjava.sql"TimestampgetTimestamp(\o"classinjava.lang"String

columnName)获得时间戳TimeStamp类型数据

RetrievesthevalueofthedesignatedcolumninthecurrentrowofthisResultSetobjectasajava.sql.Timestampobject.

\o"classinjava.sql"TimestampgetTimestamp(\o"classinjava.lang"String

columnName,\o"classinjava.util"Calendar

cal)

Retrievesthevalueofthedesignatedcolumninthecurrentrowof

\o"classin"URLgetURL(\o"classinjava.lang"String

columnName)获得URL类型数据

voidinsertRow()插入行纪录

booleanisAfterLast()判断是否是纪录集后

booleanisBeforeFirst()判断是否是纪录集前

booleanisFirst()判断是否是起始行尾

booleanisLast()判断是否是纪录尾行

booleanlast()将游标移到最后行

voidmoveToCurrentRow()将游标移当前行

voidmoveToInsertRow()将游标移插入行

booleannext()将游标后移一行

booleanprevious()将游标前移一行

voidrefreshRow()刷新行纪录

booleanrowDeleted()判断单前是否有删除

booleanrowInserted()判断当前行是否有插入

booleanrowUpdated()判断当前行是否有修改

voidsetFetchDirection(int

direction)设置提取数据纪录的方向

voidsetFetchSize(int

rows)设置每次提取纪录集的行数

booleanwasNull()返回获得的纪录集是否为空四.实验实例://数据库访问BEANimportjava.sql.*;importjava.util.*;importjava.io.*;publicclassaccessDBtest{ StringDBDriver="com.mysql.jdbc.Driver"; StringConnStr="jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=GBK"; Connectionconn=null; ResultSetrs=null; publicaccessDBtest(){ try{Class.forName(DBDriver); }catch(Exceptione){ System.err.println("DBconn():"+e.getMessage()); e.printStackTrace();}} publicResultSetexecuteQuery(Stringsql){ rs=null; try{conn=DriverManager.getConnection(ConnStr,"root","chengzhen1987"); Statementstmt=conn.createStatement(); rs=stmt.executeQuery(sql); }catch(SQLExceptionex){System.err.println("aq.executeQuery:"+ex.getMessage());} returnrs;} publicStringexecuteUpdate(Stringsql){ try{ conn=DriverManager.getConnection(ConnStr,"root","chengzhen1987"); Statementstmt=conn.createStatement(); stmt.executeUpdate(sql); rs=stmt.executeQuery("selectlast_insert_id()asrowId"); introwId=0; while(rs.next()){ rowId=rs.getInt("rowId");} returnString.valueOf(rowId); }catch(SQLExceptionex){ System.err.println("aq.executeUpdate:"+ex.getMessage()); returnex.toString();}} publicvoidclose(){ rs=null; try{mit(); conn.close(); }catch(Exceptione){}}//服务器端import.*;importjava.io.*;importjava.sql.*;publicclassserver{ ServerSockets=null; Socketc=null; accessDBtestadbt=newaccessDBtest(); publicserver(intport){ try{ ServerSockets=newServerSocket(port); System.out.println("StartListeningonport:"+port); while(true){ c=s.accept(); PrintStreamout=newPrintStream(newBufferedOutputStream(c.getOutputStream(),1024),false); DataInputStreamin=newDataInputStream(newBufferedInputStream(c.getInputStream())); out.println("WelcometoMyChatServer,PleasesendyourIDtome"); out.flush(); Stringstr=in.readLine(); System.out.println(str); out.println("PleaseWaitforLoginCheck"); out.flush(); String[]temp=str.split(":"); ResultSetrs=adbt.executeQuery("selectcount(*)asafromchengwherename='"+temp[0]+"'andpwd='"+temp[1]+"'"); rs.next(); if(rs.getInt("a")==1){ System.out.println("CorrectUserLogin"); out.println("LoginOK"); out.flush(); }else{ System.out.println("ErrorUsercan'tLogin"); out.println("ErrorLogin"); out.flush();} out.close(); in.close();} }catch(Exceptione){ e.printStackTrace(); System.err.println("Startcan'tListeningonport:"+port);}} publicstaticvoidmain(String[]args){ newserver(10000);}}//客户端importjava.awt.*;importjava.awt.event.*;import.*;importjava.io.*;publicclassclient{ TextFieldname=newTextField("MyName",20); TextFieldpwd=newTextField("MyPWD",20); Labelnt=newLabel("UserName"); Labelnw=newLabel("UserPWD"); Labelproc=newLabel(""); Buttonok=newButton("Login"); Framef=newFrame("登录客户端"); Socketc=null; Fontfont=newFont("Serif",Font.BOLD,30); publicclient(){ f.setLayout(newGridLayout(3,2)); f.add(nt); f.add(name); f.add(nw); f.add(pwd); f.add(proc); f.add(ok); nt.setFont(font);name.setFont(font);nw.setFont(font); pwd.setFont(font);proc.setFont(font);ok.setFont(font); f.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ f.dispose(); System.exit(0);}}); ok.addActionListener(newListener()); f.pack(); Toolkittk=Toolkit.getDefaultToolkit(); DimensionscreenSize=tk.getScreenSize(); intheight=screenSize.height; intwidth=screenSize.width; f.setLocation((width-f.getWidth())/2,(height-f.getHeight())/2); f.show(); } publicstaticvoidmain(String[]args){ newclient();} publicclassListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ if(e.getSource()==ok){ try{ changeProccp=newchangeProc(f,proc); cp.start(); Stringna=name.getText().trim(); Stringpw=pwd.getText().trim(); ok.setLabel("Waiting...."); ok.setEnabled(false); Thread.sleep(5000); c=newSocket("localhost",10000); DataInputStreamin=newDataInputStream(c.getInputStream());//分别对应服务器端的O/I流 PrintStreamout=newPrintStream(c.getOutputStream()); Stringstr=in.readLine(); if(str.startsWith("Welcome")){ out.println(name.getText().trim()+":"+pwd.getText().trim()); out.flush(); Thread.sleep(500); str=in.readLine(); System.out.println(str); Thread.sleep(500); str=in.readLine(); System.out.println(str); cp.stop(); if(str.startsWith("Error")){ ok.setLabel("LoginError"); }else{ ok.setLabel("LoginOK"); Framenf=newFrame("新开启的用户窗口"); nf.setSize(400,300); nf.show(); f.hide();} ok.setEnabled(true);} }catch(Exceptione1){}}}} classchangeProcextendsThread{ Framef; Labell; publicchangeProc(Framef,Labell){ this.f=f; this.l=l;} publicvoidrun(){ inti=0; Stringpr=newString(""); while(true){ pr=""; for(intk=0;k<i;k++) pr+="■"; l.setText(pr); i++; if(i>10)i=0; try{Thread.sleep(500); }catch(Exceptione){}}} }}Test数据库中cheng表中存储数据客户端登陆界面登陆成功五.实验题目:1)管理员管理用户注册信息(增、删、改、查询)//数据库访问BEANimportjava.sql.*;importjava.util.*;importjava.io.*;publicclassaccessDB{ StringDBDriver="com.mysql.jdbc.Driver"; StringConnStr="jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=GBK"; Connectionconn=null; ResultSetrs=null; publicaccessDB(){ try{Class.forName(DBDriver); }catch(Exceptione){ System.err.println("DBconn():"+e.getMessage()); e.printStackTrace();}} publicResultSetexecuteQuery(Stringsql){ rs=null; try{conn=DriverManager.getConnection(ConnStr,"root","chengzhen1987"); Statementstmt=conn.createStatement(); rs=stmt.executeQuery(sql); }catch(SQLExceptionex){ System.err.println("aq.executeQuery:"+ex.getMessage());} returnrs;} publicStringexecuteUpdate(Stringsql){ try{conn=DriverManager.getConnection(ConnStr,"root","chengzhen1987"); Statementstmt=conn.createStatement(); stmt.executeUpdate(sql); rs=stmt.executeQuery("selectlast_insert_id()asrowId"); introwId=0; while(rs.next()){ rowId=rs.getInt("rowId");} //mit(); returnString.valueOf(rowId); }catch(SQLExceptionex){ System.err.println("aq.executeUpdate:"+ex.getMessage()); returnex.toString();}} publicvoidclose(){ rs=null; try{mit(); conn.close(); }catch(Exceptione){}}//SQL程序importjava.io.*;importjava.awt.*;importjava.awt.event.*;importjava.sql.*;publicclasssqlQueryextendsFrame{ TextAreasqlStr=newTextArea(4,40); ListlItems=newList(25); Buttonbadd=newButton("增加"); Buttonbdelete=newButton("删除");ButtonbQuery=newButton("查询"); ButtonbOk=newButton("更新"); Fontf=newFont("Serif",Font.BOLD,25); publicsqlQuery(){ this.setLayout(newBorderLayout()); this.add(sqlStr,BorderLayout.NORTH); this.add(lItems,BorderLayout.CENTER); PanelbuttonPane=newPanel(); buttonPane.add(bdelete); buttonPane.add(badd); buttonPane.add(bOk); buttonPane.add(bQuery); this.add(buttonPane,BorderLayout.SOUTH); badd.setFont(f); bdelete.setFont(f); sqlStr.set

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论