JAVA程序设计——实训报告系部: 计算机系班级: 13网络技术**: *****: ***一、设计题目数据库数据操作二、目的和要求:1. 掌握JDBC 原理。
和用JAVA JDBC 技术连结数据2. 使用JDBC数据库存取技术。
3. 用java编写数据库的增加,删除,查询,修改4. 实现主要功能,界面不作要求。
三、设计过程JDBC是基于java的,用于访问关系数据库的应用程序编程接口(API),提供在java 应用程序中执行sql语句以访问和操作关系数据库的方法。
JDBC提供4种类型的驱动程序:1,JDBC-ODBC桥驱动程序特点:具有大量的ODBC驱动程序可用,缺点是不易于移植,且运行速度较慢。
2,本地库java实现驱动程序特点:能够充分利用已有的专用驱动程序,缺点是不具有跨平台特性。
3,网络协议驱动程序特点:适用于网络的分布式应用,方式灵活缺点是设计网络安全问题。
4,数据库协议驱动程序特点:应用程序直接于数据库服务器端通信,此类驱动程序全部使用java编写。
1.受环境的制约,我们选用JDBC连接数据库的方式,首先打开Eclipse设置好工作目录,并新建项目,在该项目的默认包中创建如图所示的几个类。
2.其中DBUtil.java是用来连接数据库的专用类;字母S打头的四个类分别实现对数据库的增删改查四个功能,Test.java类用于启动程序创建图形用户界面并调用别的类的方法。
DBUtil.javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;public class DBUtil{public static Connection getConn(){Connection conn = null;try{String driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; // 指定驱动程序Class.forName(driverName);String dbUrl = "jdbc:odbc:school"; // 指定URL 数据源名称conn = DriverManager.getConnection(dbUrl);}catch (ClassNotFoundException e){e.printStackTrace();}catch (SQLException e){e.printStackTrace();}return conn;}public static void close(PreparedStatement pstmt){if (pstmt != null){try{pstmt.close();}catch (SQLException e){e.printStackTrace();}}}public static void close(Connection conn){if (conn != null){try{conn.close();}catch (SQLException e){e.printStackTrace();}}}public static void main(String[] args){Connection conn = DBUtil.getConn();System.out.println("ok");DBUtil.close(conn);}}该文件下载与网络,但我们要知道创建它包含3个步骤:1、加载JDBC驱动程序:在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过ng.Class类的静态方法forName(String className)实现。
try{//加载的驱动类Class.forName("sun.jdbc.odbc.JdbcOdbcDriver";") ;}catch(ClassNotFoundException e){System.out.println("找不到驱动程序类,加载驱动失败!");e.printStackTrace() ;}2、提供JDBC连接的URLString constr = "jdbc:odbc:系统数据源"; // 指定URLcon = DriverManager.getConnection(constr);系统数据源:ODBC数据源的名称student3、创建数据库的连接要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。
使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。
try {String driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; // 指定驱动程序Class.forName(driverName);String constr = "jdbc:odbc:student"; // 指定URLcon = DriverManager.getConnection(constr);}catch(SQLException se){System.out.println("数据库连接失败!");se.printStackTrace() ;}Ssel ect.javaimport ponent;import java.sql.*;import java.util.ArrayList;public class Sselect {public static Object[][] res() throws SQLException {//返回给用户界面类型装箱Statement stm = null;Connection con = null;Object[][] result=new Object[20][7];try {con = DBUtil.getConn();// 建立连接} catch (Exception e) {e.printStackTrace();}try {stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);//uix 创建statement 对象ResultSet rst = stm.executeQuery("select * from student"); //执行SQL 语句int xline=0;while (rst.next()) {result[xline][0]=rst.getInt(1);result[xline][1]=rst.getString(2);result[xline][2]=rst.getString(3);result[xline][3]=rst.getString(4);result[xline][4]=rst.getDate(5);result[xline][5]=rst.getString(6);result[xline][6]=rst.getInt(7);xline++;}} catch (Exception e) {System.out.println("查询出错!");} finally {con.close();return result;}}}除了连接数据的三个步骤外,要对数据库进行操作还需要以下四步:4、创建一个Statement要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 种类型:1、执行静态SQL语句。
通常通过Statement实例实现。
2、执行动态SQL语句。
通常通过PreparedStatement实例实现。
3、执行数据库存储过程。
通常通过CallableStatement实例实现。
具体的实现方式:Statement stmt = con.createStatement() ;PreparedStatement pstmt = con.prepareStatement(sql) ;CallableStatement cstmt =con.prepareCall("{CALL demoSp(? , ?)}") ;5、执行SQL语句Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 和execute1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
具体实现的代码:ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;int rows = stmt.executeUpdate("INSERT INTO ...") ;boolean flag = stmt.execute(String sql) ;6、处理结果两种情况:1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。
使用结果集(ResultSet)对象的访问方法获取数据:while(rs.next()){String name = rs.getString("name") ;String pass = rs.getString(1) ; // 此方法比较高效}(列是从左到右编号的,并且从列1开始)7、关闭JDBC对象操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:1、关闭记录集2、关闭声明3、关闭连接对象if(rs != null){ // 关闭记录集try{rs.close() ;}catch(SQLException e){e.printStackTrace() ;}}if(stmt != null){ // 关闭声明try{stmt.close() ;}catch(SQLException e){e.printStackTrace() ;}}if(conn != null){ // 关闭连接对象try{conn.close() ;}catch(SQLException e){e.printStackTrace() ;}}Supdate.java Sinsert.java Sd elete.java以上三个类与Sselect.java类差异非常小,我们只需要复制该类并进行修改,String sql = "select * from student";ResultSet rst = stm.executeQuery(sql);这是原Sselect.java类的一条语句为了其它三个类我们分别初始sql变量为:"update 表名set 列1=值1,列2=值2,列3=值3 where ID=值""insert into 表名(列1,列2,列3) values(值1,值2,值3);""delete from student where ID=值"Test.javaimport java.awt.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import .apache.bcel.internal.generic.NEW;import java.awt.event.*;import java.sql.SQLException;class Welcome extends JFrame{JButton select =new JButton("学生信息");JButton insert =new JButton("添加学生");JPanel p=new JPanel();JTextField snoArea=new JTextField(10);JTextField snameArea=new JTextField(10);JTextField sbirthArea=new JTextField(10);JTextField sclassArea=new JTextField(10);JLabel snoJLabel=new JLabel("学号");JLabel snameJLabel=new JLabel("姓名");JComboBox ssexJLabel=new JComboBox();JLabel sbirthJLabel=new JLabel("出生日期");JLabel sclassJLabel=new JLabel("班级");public Welcome(){setTitle("学生信息");p.add(select);p.add(snoJLabel);p.add(snoArea);p.add(snameJLabel);p.add(snameArea);p.add(sbirthJLabel);p.add(sbirthArea);p.add(sclassJLabel);p.add(sclassArea);p.add(ssexJLabel);ssexJLabel.addItem("男");ssexJLabel.addItem("女");p.add(insert);getContentPane().add(p);select.addMouseListener(new MouseAdapter(){//内部类监听按钮点击事件JTable table=new JTable();public void mouseClicked(MouseEvent e){try {Object[][] dobj=new Object[][]{{}};Object[] dcol=new Object[]{"序号","学号","姓名","性别","生日","班级","年龄"};DefaultTableModel dtable=new DefaultTableModel(Sselect.res(), dcol);JTable table=new JTable(dtable);p.add(table);dtable.fireTableDataChanged();} catch (SQLException e1) {e1.printStackTrace();}}});}}public class Test{public static void main(String args[]){Welcome l1=new Welcome();l1.setSize(550,450);l1.setVisible(true);l1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}一开始在Win10下安装SQL Serve2005DEV开发版后调试启动本地服务失败,后来在win7下成功,由于时间效率因素,我只做了学生信息的操作界面。