课程  Java面向对象程序设计

一、实验目的

掌握数据库编程技术

二、实验环境

1、微型计算机一台

2、WINDOWS操作系统,Java SDK,Eclipse开发环境,Microsoft SQL Server Management Studio。

三、实验内容

1、设计一个控制台应用程序,实现简单的学生信息管理系统,要求有如下功能:提供一个控制台菜单,实现学生信息的增加学生信息、删除学生信息、修改学生信息、查询指定学生信息、浏览所有学生信息。

2、学生类要求包含学号、姓名、年龄、成绩属性,学生信息使用数据库存放。

四、实验步骤和结果

(一)首先设置数据库表结构

1、使用SQL Server 2008 建立查询,进行建库建表操作,SQL语句如下:

create database studbsxl
USE studbsxl
CREATE TABLE stuinfo (
id varchar(20) NOT NULL,//学生学号
name varchar(20) default NULL,//学生姓名
age varchar(10) default NULL,//学生年龄
score varchar(10) default NULL,//学生成绩
PRIMARY KEY (id)
)
insert into stuinfo(id,name,age,score)
values(105032013120,'sxl','',''),
(105032013123,'张三','',''),
(105032013125,'李四','',''),
(105032013127,'王五','','');

(二)创建连接工厂类

1、首先需要加载JDBC驱动

(1)SQL Server 2008 JDBC 驱动器的安装:首先去官网

http://www.microsoft.com/zh-cn/download/details.aspx?id=21599下载压缩包,点击下载会有三个文件下载,最主要用到的是sqljdbc_3.0.1301.101_chs.tar.gz,将其解压后是一个sqljdbc_3.0文件夹,在其找到sqljdbc4.jar,接下来把sqljdbc4.jar复制在JAVA的JDK下的lib文件夹中。最后,需要在工程中引入sqljdbc4.jar包,将sqljdbc4.jar复制到Eclipse 的JDBC项目下,执行黏贴命令;选中这个文件并右击,在弹出的快捷菜单中选择Build Path —Add to Build Path命令,将sqljdbc4.jar包与工程关联。

(2)代码连接方式:

//装载SQL Server驱动程序

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//提供连接URL字符串

String url = "jdbc:sqlserver://localhost:1433;DatabaseName=studbsxl";

//建立数据库连接

Connection  con = DriverManager.getConnection(url, user, pwd);

(String user = "sa";)

( String pwd = "sa";)

其中,可在SQL ServerManagement Studio 中用SQL语句设置用户名和密码,

登录后:新建查询连接,输入:exec sp_password null,'sa','sa'  --将sa密码改为sa ,前面一个是密码, 后一个是用户名。

2、创建连接工厂类

在增、删、改、查的操作中,都需要获取与数据库的连接对象。从软件的可重复性考虑,需要把这一部分封装成一个单独的类,ConnectionFactory类即用来产生Connection对象。其代码(ConnectionFactory.java)清单如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public Connection getConnection() {
String user = "sa";
String pwd = "sa";
// 设定url
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=studbsxl";
Connection con = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException ce) {
System.out.println(ce);
}
try {
con = DriverManager.getConnection(url, user, pwd);
} catch (SQLException ce) {
System.out.println(ce);
}
return con;
}
}

(三)创建关闭连接工具类

每一步操作完毕后都需要关掉所占资源,在关闭时还需要判断要关闭的对象是否存在,并在调用关闭的方法还需要处理异常。故,需要专门写一个关闭相关连接的工具类(JDBCUtils.java)来解决释放资源问题,代码如下:

import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet; public class JDBCUtils {
public static void close(ResultSet rs, Statement stmt, Connection conn) {
close(rs);
close(stmt);
close(conn);
} public static void close(Statement stmt, Connection conn) {
close(stmt);
close(conn);
} public static void close(Connection conn) {
try {
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
} public static void close(Statement stmt) {
try {
if (stmt != null) {
stmt.close();
}
} catch (Exception e) {
e.printStackTrace();
}
} public static void close(ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

(四)创建操作方法类

把与数据库进行增、删、改、查的操作都封装于StudentBiz.java中,代码如下:

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.PreparedStatement; public class StudentBiz {
/*** 查询所有数据
* @throws Exception
*/
public void readDate() throws Exception {
ConnectionFactory factory = new ConnectionFactory();
// 得到数据源 // 得到数据连接
Connection conn = factory.getConnection();
// 得到语句块
Statement stmt = conn.createStatement();
String sqlstr = "select * from stuinfo";//查询所有学生记录
// 得到结果集
ResultSet rs = stmt.executeQuery(sqlstr);
// 编历结果集,显示结果
System.out.println("**********所有学生的记录如下所示_(bysxl)**********");
System.out.println(" 学号 姓名 年龄 成绩");
while (rs.next()) {
System.out.print(rs.getString(1) + "\t");
System.out.print(rs.getString(2) + "\t");
System.out.print(rs.getString(3) + "\t");
System.out.print(rs.getString(4) + "\t");
System.out.println(" ");
}
JDBCUtils.close(rs, stmt, conn);
} //根据学生姓名来查询
public void readDateByName(String name) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
// 得到数据连接
Connection conn = factory.getConnection();
// 得到语句块
Statement stmt = conn.createStatement();
String sqlstr = "select * from stuinfo where name='" + name + "'";
// 得到结果集
ResultSet rs = stmt.executeQuery(sqlstr);
// 编历结果集,显示结果
System.out.println("此操作为:查询指定学生信息>>>>>>");
System.out.println(" 学号 姓名 年龄 成绩");
while (rs.next()) {
System.out.print(rs.getString(1) + "\t");
System.out.print(rs.getString(2) + "\t");
System.out.print(rs.getString(3) + "\t");
System.out.print(rs.getString(4) + "\t");
System.out.println(" ");
}
JDBCUtils.close(rs, stmt, conn);
}
//根据学生姓名插入
public void insertDateByName(String id,String name,String age,
String score) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
// 得到数据连接
Connection conn = factory.getConnection();
// 拼写sql语句
String sqlstr = "insert stuinfo(id,name,age,score) values(?,?,?,?)";
PreparedStatement psmt = conn.prepareStatement(sqlstr);
psmt.setString(1, id);
psmt.setString(2, name);
psmt.setString(3, age);
psmt.setString(4, score);
psmt.executeUpdate();
JDBCUtils.close(psmt, conn);
System.out.println("此操作为:插入学生信息>>>");
this.readDate();
}
//根据学生姓名更新/修改
public void updateDateByName(String name) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
// 得到数据连接
Connection conn = factory.getConnection();
// 得到语句块
Statement stmt = conn.createStatement();
String sqlstr = "update stuinfo set score=0 where name='" + name
+ "'";
stmt.executeUpdate(sqlstr);
JDBCUtils.close(stmt, conn);
this.readDateByName(name);
}
//根据学生姓名删除
public void deleDateByName(String name) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
// 得到数据连接
Connection conn = factory.getConnection();
// 得到语句块
Statement stmt = conn.createStatement();
String sqlstr = "delete from stuinfo where name='" + name + "'";
stmt.executeUpdate(sqlstr);
JDBCUtils.close(stmt, conn);
System.out.println("此操作为:删除学生信息>>>");
this.readDate();
} // public static void main(String[] args){
// StudentBiz td = new StudentBiz();
// try {
// td.deleDateByName("zah");
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
}

(五)创建测试类,编写测试类TestStudentBiz.java 进行增、删、改、查测试操作:

//编写测试类进行测试:
public class TestStudentBiz {
public static void main(String[] args) {
StudentBiz td = new StudentBiz();
try {
//浏览所有学生信息
td.readDate(); //插入学生信息
//td.insertDateByName("105030000000","东方不败", "500", "100"); //删除学生信息
//td.deleDateByName("东方不败"); //修改学生信息
//td.updateDateByName("东方不败"); //查询指定学生信息
//td.readDateByName("沈"); } catch (Exception e) {
e.printStackTrace();
}
}
}

(六)调试代码,实验测试结果为:

1、通过td.readDate();浏览所有学生信息(即初始学生表的数据内容):

2、通过td.insertDateByName("105030000000","东方不败", "500", "100");插入一条学生信息,运行结果如下所示:

相应地,在SQL SERVER数据库的学生表上添加了一条学生记录:

3、通过td.updateDateByName("东方不败");修改一条学生信息的成绩为0,运行结果如下所示:

相应地,在SQL SERVER数据库的学生表上姓名为“东方不败”的学生成绩被修改成功:

4、通过td.deleDateByName("东方不败");删除学生信息,运行结果如下所示:

相应地,在SQL SERVER数据库的学生表上姓名为“东方不败”的学生成绩被删除成功:

5、通过td.readDateByName("sxl");查询学生信息,运行结果如下所示:

五、实验总结

(一)本次实验按时按量完成。

(二)加载JDBC驱动的代码连接方式为:

//装载SQL Server驱动程序

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//提供连接URL字符串

String url = "jdbc:sqlserver://localhost:1433;DatabaseName=studbsxl";

//建立数据库连接

Connection  con = DriverManager.getConnection(url, user, pwd);

(三)通过本次实验我对于Java数据库编程以及JDBC数据库连接有了深刻的认识。

(四)在Java语言中,提供了丰富的类和接口,用于数据库编程,利用它们可以方便地进行数据的访问和处理。

Java JDBC数据库编程的更多相关文章

  1. Java ——JDBC数据库编程

    数据库分类 关系型数据库:以表来存放数据的,数据与数据之间的关系通过表之间的连接体现 面向对象的数据库:保存的是对象本身 其它 数据库:数据库管理系统中创建一个个的保存数据的单位 数据是保存在数据库的 ...

  2. Java JDBC 数据库链接小结随笔

    Java JDBC 数据库链接小结随笔 一.链接数据库的步骤 二.关于Statement  和  PrepareStatement 两者区别 用法 三.关于 ResultSet 的一些小结 四.自定义 ...

  3. JDBC数据库编程(java实训报告)

    文章目录 一.实验要求: 二.实验环境: 三.实验内容: 1.建立数据库连接 2.查询数据 2.1 测试结果 3.添加数据 3.1.测试结果 4.删除数据 4.1.测试结果 5.修改数据 5.1 测试 ...

  4. Java JDBC数据库链接

    好久没有编写有关数据库应用程序啦,这里回顾一下java JDBC. 1.使用Java JDBC操作数据库一般需要6步: (1)建立JDBC桥接器,加载数据库驱动: (2)连接数据库,获得Connect ...

  5. Java 之 数据库编程(JDBC)

    1.JDBC a.定义:是一种用于执行SQL语句的Java API,它由一组用Java 语言编写的类和接口组成 b.操作步骤: ①加载驱动--告诉驱动管理器我们将使用哪一个数据库的驱动包 Class. ...

  6. Java高级篇(三)——JDBC数据库编程

    JDBC是连接数据库和Java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.本篇将介绍一下如何使用JDBC操作数据库(以MySQL为例). 一.JDBC JDBC制定了统一访问 ...

  7. JDBC数据库编程

    常识名词:ODBC ,JDBC,JDBC API ,JDBC Driver API  数据准备,续上节:   JDBC编程流程 最基本的JDBC操作 本段内容主要完成JDBC的增删查改操作 packa ...

  8. JDBC数据库编程:PreparedStatement接口

    使用PreparedStatement进行数据库的更新及查询操作. PreparedStatement PreparedStatement是statement子接口.属于预处理. 使用statemen ...

  9. java jdbc数据库操作

    package shb.java.demo3; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQ ...

随机推荐

  1. 网络编程socket之listen函数

    摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被 ...

  2. go语言基础之copy的使用

    1.copy的使用 示例: package main //必须有个main包 import "fmt" func main() { srcSlice := []int{1, 2} ...

  3. Dropwizard框架入门

    最近项目用到了Dropwizard框架,个人感觉还不错,那么这里就从他们官网入手,然后加上自己的实现步骤让大家初步了解这个框架. 官网对DW(Dropwizard)的定义是跨越了一个库和框架之间的界限 ...

  4. [好文翻译]WEB前端性能优化的14条规则

    作为一个半前端工程师,而且只会写点HTML5和CSS3的“假”前端工程师,为了能更好地理解一下前端的花花世界,最近拜读了<高性能网站建设指南>一书,对作者提出的前端性能优化的14个规则获益 ...

  5. FM遇到错误RQP-DEF-0354和QE-DEF-0144

    版本:Cognos 10.2.1 系统:Win10 操作过程:在FM调用了一个存储过程,其中引用了前端page页面的参数如下图所示,在验证和保存查询主题的时候一直提示参数没有替换值,错误 信息如下图所 ...

  6. [Javascript] Prototype, hasOwnProperty(), valueOf() and toString() methods.

    Sometime, use can rewrite the toString , valueOf method to make those function more useful: For exma ...

  7. 【Python】得到当前日期时间

    import time str=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) print(str)

  8. 100款免费的旅游素材(PSD)

    本地下载 素材一直都是网页设计者们大爱,不同的类型和设计总能带给人们新鲜感.今天带来的这100个免费的旅行素材,PSD格式,可以自定义色彩.一定可以带给你们非常惊喜!

  9. 30款免费的手机UI设计资源

    在 原型设计阶段,我们会尽量寻找一些灵感刺激大脑,从而让我们的想象力飞-灵感给了我们很好的开始,但是当我们把灵感化为现实的时候,又需要一些实用而又高 效的组件来完成.即使你有非常善于把灵感实例化在草稿 ...

  10. Office EXCEL VBA数组如何使用

    Excel VBA数组入门教程 1. 前言:不要把VBA数组想的太神秘,它其实就是一组数字而已. 2. 数组的维数: Sub 数组示例()  Dim x As Long, y As Long  Dim ...