浅谈JDBC

    使用数据库对数据资源进行管理,可以减少数据的冗余度,节省数据的存储空间,实现数据资源的充分共享,为用户提供管理数据的简便手段.在学习VB的时候,我们接触了ODBC,在学习VB.NET的时候,我们接触了ADO.NET ,Java的学习中,又来了一个JDBC,但是他们之间都是大同小异的.

    JDBC(Java DataBase Connectivity)是为java语言定义的一个SQL调用级的数据库编程接口,通过JDBC API,程序员能够在java程序中方便地连接和访问数据库,实现java的数据库编程.JDBC隔离了java与不同数据库之间的对话,使得java程序无须考虑不同的数据库管理系统平台.javaJDBC结合起来将使程序员只须写一遍程序就可让它在任何平台上运行.java程序通过JDBC访问数据库的关系如下图所示:


JDBC是一组有java语言编写的类和接口,其中API包含在java.sqljavax.sql两个包中.JDBC API 可分为两个层次,面向底层的JDBC Driver API和面向程序员的JDBC API.它们的关系如下所示:


从上图中,我们可以看出,应用程序通过JDBC API 和底层的JDBCDriver API打交道.其中JDBCDriver可以分为四中类型.

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也就是那么一回事.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弯_弯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值