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{} } }}}
查询操作
增加操作
更新操作
删除操作
网络编程课程设计报告题目姓名学院专业班级学号指导教师基于Linux网络聊天室的设计陈佳悦陈雄兰信息科学技术学院网络工程网络工程10…
目录1需求分析211电子商城网站的目的和意义212网站功能分析22电子商城网站的设计221功能模块设计222数据库设计43电子商城…
实验报告课程名称指导教师实验日期院系专业班级实验地点学生姓名学号同组人实验项目名称一实验目的和要求一实验目的自写二实验要求自写1按…
Java网络程序设计实验五JDBC班级姓名学号日期20xx68实验五JDBC一实验目的1掌握SQL语句和MYSQL数据库操作命令2…
20xx年秋季学期计算机网络编程实验报告班级计121班学号12101020xx8姓名刘杰总成绩评语指导教师签字日期实验一登陆页面及…
Java程序设计实训报告实训名称仓库管理系统实训专业计算机应用班级计算机10A1学号姓名指导教师侯丽敏20xx年12月8日实训成绩…
学生实验报告册(理工类)课程名称:JAVA程序设计实验专业班级:M11计算机科学与技术II学生学号:学生姓名:所属院部:XX学院指…
Java程序设计实验指导报告书目录实验1熟悉Java开发环境2实验2简单的输入输出处理3实验3类的练习6实验4Java图形用户界面…
河南机电高等专科学校学生课程设计报告实验课程名称Java程序设计开课实验室实验楼308机房系、部计科系年级11专业班软件技术学生姓…
Java语言程序设计综合实验报告系别计算机科学与技术系学科专业信息管理与信息系统课题题目qq聊天系统人员及分工白娟20xx1006…
嵌入式实验报告题目linux串口和网络编程一实验目的1强化本学期所学的相关的内容2掌握串口相关设置3强化基于TCP网络传输的三次握…