使用数据库对数据资源进行管理,可以减少数据的冗余度,节省数据的存储空间,实现数据资源的充分共享,为用户提供管理数据的简便手段.在学习VB的时候,我们接触了ODBC,在学习VB.NET的时候,我们接触了ADO.NET ,在Java的学习中,又来了一个JDBC,但是他们之间都是大同小异的.
JDBC(Java DataBase Connectivity)是为java语言定义的一个SQL调用级的数据库编程接口,通过JDBC API,程序员能够在java程序中方便地连接和访问数据库,实现java的数据库编程.JDBC隔离了java与不同数据库之间的对话,使得java程序无须考虑不同的数据库管理系统平台.把java和JDBC结合起来将使程序员只须写一遍程序就可让它在任何平台上运行.java程序通过JDBC访问数据库的关系如下图所示:
JDBC是一组有java语言编写的类和接口,其中API包含在java.sql和javax.sql两个包中.JDBC API 可分为两个层次,面向底层的JDBC Driver API和面向程序员的JDBC API.它们的关系如下所示:
从上图中,我们可以看出,应用程序通过JDBC API 和底层的JDBCDriver API打交道.其中JDBC的Driver可以分为四中类型.
对 JDBC 有了初步的了解 , 我们再来一个例子吧--查询和添加数据.
import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; import java.sql.*; //实现ActionListener接口,因此其对象就是一个事件监听器 public class PersonManager implements ActionListener { JFrame f=null; //类属性 public PersonManager() //构造方法 { f=new JFrame("员工信息"); //创建一个顶层容器 Container contentPane=f.getContentPane(); //获得其内容面板 JPanel buttonPanel =new JPanel(); //创建一中间容器JPanel JButton b=new JButton("员工登记"); //创建一原子组件--按钮 b.addActionListener(this ); //为按钮添加事件监听器对象 buttonPanel.add(b) ; //将此按钮添加到中间容器 b=new JButton("退出系统"); //再创建一"退出系统"按钮 b.addActionListener(this); buttonPanel.add(b) ; //将此按钮添加到中间容器 buttonPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.blue,2),"员工登记系统",TitledBorder.CENTER,TitledBorder.TOP)); //设置中间容器边框 contentPane.add(buttonPanel,BorderLayout.CENTER); JMenuBar mBar=new JMenuBar() ; //创建菜单条 JMenu selection= new JMenu("选项"); JMenuItem regist=new JMenuItem("员工登记"); JMenuItem sum=new JMenuItem("统计"); selection.add(regist); selection.add(sum); JMenu sys=new JMenu("系统"); JMenuItem exit=new JMenuItem("退出系统"); sys.add(selection); mBar.add(sys); f.setJMenuBar(mBar);//为窗体增加菜单 regist.addActionListener(this); //为菜单添加事件监听器 sum.addActionListener(this) ; exit.addActionListener(this); f.pack(); f.setVisible(true); f.addWindowListener(new WindowAdapter() { //为窗口操作添加监听器 public void windowClosing(WindowEvent e) { System.exit(0); } }); } public void actionPerformed (ActionEvent e) //实现ActionListener 接口 { String cmd=e.getActionCommand();//从事件对象获得相关名称 if (cmd.equals("员工登记")) { //根据名称选择相应事件 new RegistSystem(f); //显示员工登记对话框 }else if (cmd.equals("退出系统")) { System.exit(0); }else if (cmd.equals("统计")) { try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //加载数据库引擎,返回给定字符串名称 String url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=PIMS"; //连接数据库 String user="sa"; String password="123456"; //动态导入数据库的驱动 Connection conn= DriverManager.getConnection(url, user, password); //连接数据库对象 Statement stmt=conn.createStatement(); //执行SQL 语句 ResultSet rSet =stmt.executeQuery("select * from person "); int i=0; while(rSet.next()) { i=i+1; } JOptionPane.showMessageDialog(f, "共有"+i+"名员工"); //显示信息对话框 stmt.close(); conn.close(); //关闭数据库的连接 } catch (Exception ex) { // TODO: handle exception } } } public static void main(String[] args) { new PersonManager(); } } class RegistSystem implements ActionListener { //用于产生JDialog,实现事件监听 JDialog dialog1; JTextField tF1=new JTextField(); JTextField tF2=new JTextField(); JTextField tF3=new JTextField(); JTextField tF4=new JTextField(); JTextField tF5=new JTextField(); JTextField tF6=new JTextField(); @SuppressWarnings("deprecation") RegistSystem(JFrame f) //构造方法,从其调用方法中获得对话框的父窗体 { dialog1=new JDialog(f,"员工登记",true); //产生一modal 对话框 Container dialogPane=dialog1.getContentPane(); dialogPane.setLayout(new GridLayout(7,2)); dialogPane.add(new JLabel("员工编号:",SwingConstants.CENTER)); dialogPane.add(tF1); dialogPane.add(new JLabel("员工姓名:",SwingConstants.CENTER)); dialogPane.add(tF2); dialogPane.add(new JLabel("部门编号:",SwingConstants.CENTER)); dialogPane.add(tF3); dialogPane.add(new JLabel("职务:",SwingConstants.CENTER)); dialogPane.add(tF4); dialogPane.add(new JLabel("工资:",SwingConstants.CENTER)); dialogPane.add(tF5); dialogPane.add(new JLabel("学历编号:",SwingConstants.CENTER)); dialogPane.add(tF6); JButton b1=new JButton("确定"); dialogPane.add(b1); JButton b2=new JButton("取消"); dialogPane.add(b2); b1.addActionListener(this); //为确定按钮添加监听事件 b2.addActionListener(this); //为取消按钮添加监听事件 dialog1.setBounds(200,150,400,130); dialog1.show(); } public void actionPerformed(ActionEvent e) { String cmd=e.getActionCommand(); if(cmd.equals("确定")) { try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //加载数据库引擎,返回给定字符串名称 String url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=PIMS"; //连接数据库 String user="sa"; String password="123456"; //动态导入数据库的驱动 Connection conn= DriverManager.getConnection(url, user, password); //连接数据库对象 Statement stmt=conn.createStatement(); //执行SQL 语句 int ID=Integer.parseInt(tF1.getText()); String name=tF2.getText(); int DepID=Integer.parseInt(tF3.getText()); String occupation=tF4.getText(); int salary=Integer.parseInt(tF5.getText()); int EduID=Integer.parseInt(tF5.getText()); String sQLOrderString="insert into Person( ID,Name,Department,Occupation ,Salary,Education) values ("+ID+","+name+","+DepID+","+occupation+","+salary+","+EduID+")"; stmt.executeUpdate(sQLOrderString); //添加一条记录 stmt.close(); conn.close(); //关闭连接 } catch (Exception e2) { // TODO: handle exception } } else if (cmd.equals("取消")) { dialog1.dispose(); //直接返回主窗体 } } }
运行界面:
查询数据库中的数据条数结果为:
插入数据界面:
插入后的查询结果为:
总结:
JDBC虽然是在JAVA中才有的,但是在VB学习的时候,我们使用过ODBC,在VB.NET中我们学习过ADO.NET,它们都是差不多的,都是用于连接数据库的,连接数据库的步骤是相同的,只是连接属性不同而已,做做例子,感觉JDBC也就是那么一回事.