JAVA网络程序设计实验报告

Java 网络程序设计

实验五:JDBC

班级:  

姓名:  

学号:   

日期:20##-6-8

实验五:JDBC

一.实验目的

1.掌握SQL语句和MYSQL数据库操作命令;

2.掌握关系型数据库设计规则;

3.掌握JDBC类库包使用规则。

二.实验内容

1.学习SQL语言基本语法,了解MYSQL数据库,掌握JDBC相关知识;

2.利用MYSQL设计个人信息数据库,使用JDBC进行连接和操作;

3.完成以下各内容程序,截存运行结果图,并提交实验报告。

三.基础知识:

1.基础概念

l  SQL(Struct Query Language, 结构化查询语句)

是标准的数据库操作命令集合,它允许可以对数据库中的多个对象进行操作,对于表对象存在Insert, Update, Delete, Select, Modify, Truncate, Create, Drop等操作。基础语法如下:

l  关系型数据库

关系型数据库以行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。表与表之间的数据记录有关系。用户用查询(Query)来检索数据库中的数据。一个Query是一个用于指定数据库中行和列的SELECT语句。关系型数据库通常包含下列组件:客户端应用程序(Client),数据库服务器(Server),数据库(Database)。

SQL(Structured Query Language)Client端和Server端的桥梁,Client用SQL来象Server端发送请求,Server返回Client端要求的结果。现在流行的大型关系型数据库有IBM DB2、Oracle、SQL Server、SyBase、Informix等。关系型数据库管理系统中储存与管理数据的基本形式是二维表

l  MYSQL数据库

MYSQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL关系型数据库于1998年1月发行第一个版本。它使用系统核心提供的多线程机制提供完全的多线程运行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等编程语言的编程接口(APIs),支持多种字段类型并且提供了完整的操作符支持查询中的SELECT和WHERE操作。MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。

MySQL开发组于20##年中期公布MySQL4.0版本。在这个版本中将有以下新的特性被提供:新的表定义文件格式、高性能的数据复制功能、更加强大的全文搜索功能。在此之后,MySQL开发着希望提供安全的数据复制机制、在BeOS操作系统上的MySQL实现以及对延时关键字的定期刷新选项。随着时间的推进,MySQL对ANSI 92/ANSI 99标准完全兼容。

由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。

2.JDBC

JDBC(Java DataBase Connectivity, Java数据库连接)是由一组Java类和接口组成的API, 相关类包括在java.sql类库包中。JDBC架构如图5-1所示。

图5-1 JBDC架构图

JDBC是由一系列连接(Connection)\SQL语言(Statement)和结果集(ResultSet)构成。通过JDBC URL提供一种标识数据库的方法, 可以使相应的驱动程序识别该数据库并与之建立连接,JDBC URL由三个部分组成, 之间用”:”间隔。

连接时,首先通过DriverManager类加载数据库设备驱动程序,该类负责选取数据库驱动程序和建立新的数据库连接。注意,驱动管理器只能击活系统已登录的驱动程序。你可以通过自注册方法,添加需要的数据库驱动程序。

1)利用驱动程序列表设置系统属性jdbc.drivers,

2)当驱动程序注册成功后,就可以用来装入驱动程序类来调用驱动程序,

当数据库驱动程序已注册,就可以连接指定的数据库设备了,如果要访问一个在WIN32系统中已注册的数据库设备时,步骤如下:

当数据库连接成功后可执行操作,在Java语言中提供了两种操作方法:分别为根据SQL语句提供查询,并返回一个结果集的executeQuery(String SQL);以及根据SQL语言进行对数据对象的增加、删除和修改等操作,并返回一个操作成功的行好或者行数的executeUpdate(String SQL);

在对数据库进行操作时,可能出现的异常有:

l  SQLException,SQL语句有错误;

l  BatchUpdateException,批量修改数据对象异常;

l  SQLWarning,SQL语句警告;

l  DataTruncation,数据清空异常。

查询结果集resultset接口,JAVA的接口定义如图5-2所示。

图5-2 结果集接口

一个数据表代表一个数据结果集合,它通常是一个对数据库查询申明(statement)的执行结果。

一个ResultSet对象维护一个指向数据纪录行的指针,初始情况下是指向第一行之前。ResultSet的next()方法是将结果集指针移动到下一条纪录,当已经是最后移行了,将返回一个false值,这个值可以用来作为判断循环结束的条件,在一般情况下使用while循环来依次列出结果集中所有的纪录,如

A default ResultSet object is not updatable and has a cursor that moves forward only. Thus, you can iterate through it only once and only from the first row to the last row. It is possible to produce ResultSet objects that are scrollable and/or updatable. The following code fragment, in which con is a valid Connection object, illustrates how to make a result set that is scrollable and insensitive to updates by others, and that is updatable. See ResultSet fields for other options. 一个默认的ResultSet对象是不可以修改的,它有一个单方向,向前移动的游标。所以,你可以在数据集中从前到后浏览一遍数据

四.主要方法:

1.resultSet

四.实验实例:

五.实验题目:

1)管理员管理用户注册信息(增、删、改、查询)

//数据库访问BEAN

import java.sql.*;

import java.util.*;

import java.io.*;

public class accessDB{

       String DBDriver = "com.mysql.jdbc.Driver";

       String ConnStr = "jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=GBK";

       Connection conn = null;

       ResultSet rs =null;

       public accessDB(){

              try{Class.forName(DBDriver);

              }catch(Exception e){

                     System.err.println("DBconn():" + e.getMessage());

                     e.printStackTrace();}}

       public ResultSet executeQuery(String sql){

              rs = null;

              try{conn = DriverManager.getConnection(ConnStr, "root" ,"chengzhen1987");

                     Statement stmt = conn.createStatement();

                     rs = stmt.executeQuery(sql);

              }catch(SQLException ex){

                     System.err.println("aq.executeQuery:" + ex.getMessage());}

              return rs;}

       public String executeUpdate(String sql){

              try{conn = DriverManager.getConnection(ConnStr, "root" ,"chengzhen1987");

                     Statement stmt = conn.createStatement();

                     stmt.executeUpdate(sql);

                     rs = stmt.executeQuery("select last_insert_id() as rowId");

                     int rowId=0;

                     while(rs.next()){

                            rowId = rs.getInt("rowId");}

                     //conn.commit();

                     return String.valueOf(rowId);

              }catch(SQLException ex){

                     System.err.println("aq.executeUpdate:" + ex.getMessage());

                     return ex.toString();}}

       public void close(){

              rs = null;

              try{conn.commit();

                     conn.close();

              }catch(Exception e){}}

//SQL程序

import java.io.*;

import java.awt.*;

import java.awt.event.*;

import java.sql.*;

public class sqlQuery extends Frame{

       TextArea sqlStr = new TextArea(4,40);

       List lItems = new List(25);

       Button badd = new Button("增加");

       Button bdelete = new Button("删除");

    Button bQuery = new Button("查询");

    Button bOk = new Button("更新");            

       Font f = new Font("Serif",Font.BOLD,25);

       public sqlQuery(){

              this.setLayout(new BorderLayout());

              this.add(sqlStr, BorderLayout.NORTH);

              this.add(lItems, BorderLayout.CENTER);

              Panel buttonPane = new Panel();

              buttonPane.add(bdelete);

              buttonPane.add(badd);

              buttonPane.add(bOk);

              buttonPane.add(bQuery);

              this.add(buttonPane, BorderLayout.SOUTH);

              badd.setFont(f);

              bdelete.setFont(f);

              sqlStr.setFont(f);

              lItems.setFont(f);

              bOk.setFont(f);

              bQuery.setFont(f);

              //内部类

              addWindowListener(new WindowAdapter() {

                     public void windowClosing(WindowEvent e) {

                            dispose();

                            System.exit(0);}});

              badd.addActionListener(new Listener());

              bdelete.addActionListener(new Listener());

              bOk.addActionListener(new Listener());     

              bQuery.addActionListener(new Listener());  }

       public static void main(String args[]){

              System.out.println("Starting New...");

              sqlQuery mainFrame = new sqlQuery();

              mainFrame.setSize(400, 400);

              mainFrame.setTitle("*管理员操作窗口*");

              mainFrame.setVisible(true);}

       class Listener implements ActionListener{

              public void actionPerformed(ActionEvent e) throws NullPointerException{

                     accessDB adb = new accessDB();

                     if(e.getSource().equals(bQuery)){

                            try{ResultSet rs = adb.executeQuery(sqlStr.getText().trim());

                                   while(rs.next()){

                                          lItems.add("姓名" + rs.getString("name") + ";密码" + rs.getString("pwd"));}

                            }catch(Exception exc){

                                   lItems.add(exc.toString());

                                   exc.toString();

                            }finally{}

                     }else if(e.getSource().equals(badd)){

                            try{

                                   adb.executeUpdate(sqlStr.getText().trim());

                            }catch(Exception exc){

                                   lItems.add(exc.toString());

                                   exc.toString();

                            }finally{}

                     }else if(e.getSource().equals(bdelete))

                            {try{

                                   adb.executeUpdate(sqlStr.getText().trim());

                            }catch(Exception exc){

                                   lItems.add(exc.toString());

                                   exc.toString();}finally{}

                            }else{try{

                                   adb.executeUpdate(sqlStr.getText().trim());

                            }catch(Exception exc){

                                   lItems.add(exc.toString());

                                   exc.toString();

                            }finally{}       }     }}}        

查询操作

增加操作

更新操作

删除操作

相关推荐