Java JDBC数据库编程
课程 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','20','98'), (105032013123,'张三','21','90'), (105032013125,'李四','22','83'), (105032013127,'王五','25','95');
(二)创建连接工厂类
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语言中,提供了丰富的类和接口,用于数据库编程,利用它们可以方便地进行数据的访问和处理。
posted on 2015-12-11 21:40 CuriousZero 阅读(664) 评论(0) 编辑 收藏 举报