使用数据库对数据资源进行管理,可以减少数据的冗余度,节省数据的存储空间,实现数据资源的充分共享,为用户提供管理数据的简便手段.在学习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也就是那么一回事.