Java数据库编程技术

1. 建立数据库连接

例1.1 使用JDBC-ODBC桥来连接一个Access数据库。

该数据库的名称为FirstExample,在ODBC数据源中的名称为forStudy,用户名和密码均为空。

package connectDataBase;



import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;



public class connect {



    public static void main(String[] args) {

        try {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载数据库驱动

            Connection con =DriverManager.getConnection("jdbc:odbc:forStudy","", ""); //这里是ODBC数据源名称

            System.out.println("数据库连接成功!");

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        }



    }



}

2. 关闭数据库连接

例2.1 关闭数据库连接示例。

package connectDataBase;



import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;



public class connect {



    public static void main(String[] args) {

        Connection con = null;

        try {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载数据库驱动

            con =DriverManager.getConnection("jdbc:odbc:forStudy","", ""); //这里是ODBC数据源名称

            System.out.println("数据库连接成功!");

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        }finally{ //在这里关闭数据库

            if(con!=null){

                try {

                    if(!con.isClosed())

                        con.close();  //关闭数据库连接

                    System.out.println("数据库已关闭!");

                } catch (SQLException e) {

                    e.printStackTrace();

                }

            }

        }



    }



}

3. 添加新数据

一般将SQL语句存放在一个Statement对象中,然后先执行该对象的executeUpdate()方法就可以了。

例3.1 向数据库中添加新数据。

package connectDataBase;

import java.sql.*;

public class insertData {

    public static void main(String[] args) {

        Connection con = null;

        Statement sta;

        String sqlString = "insert into student values('30','小王','男','湖南湘潭','N-408','8293456')";

        try {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

            con = DriverManager.getConnection("jdbc:odbc:forStudy","","");

System.out.println("数据库连接成功!");

            sta = con.createStatement();

            sta.executeUpdate(sqlString);

            System.out.println("插入成功!");

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            if(con!=null){

                try {

                    if(!con.isClosed())

                        con.close();

System.out.println("数据库关闭!");

                } catch (SQLException e) {

                    e.printStackTrace();

                }

            }

        }

    }



}

一个可以接收用户输入的程序:

package connectDataBase;

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.sql.*;

public class insertData {

    public static void main(String[] args) {

        Connection con = null;

        Statement sta;

        String code,name,sex,address,room,tel;

        code = getInput("请输入编号: ");

        name = getInput("请输入姓名: ");

        sex = getInput("请输入性别: ");

        address = getInput("请输入地址: ");

        room = getInput("请输入寝室: ");

        tel = getInput("请输入电话: ");

        String sqlString = "insert into student values('"+code+"','"+name+"','"+sex+"','"+address+"','"+room+"','"+tel+"')";

        try {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

            con = DriverManager.getConnection("jdbc:odbc:forStudy","","");

System.out.println("数据库连接成功!");

            sta = con.createStatement();

            sta.executeUpdate(sqlString);

            System.out.println("插入成功!");

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            if(con!=null){

                try {

                    if(!con.isClosed())

                        con.close();

System.out.println("数据库关闭!");

                } catch (SQLException e) {

                    e.printStackTrace();

                }

            }

        }

    }



    private static String getInput(String str) {

        String msg = "";

        try {

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            System.out.print(str);

            msg = br.readLine();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return msg;

    }



}

单纯地通过拼接字符串的方式将程序中的变量组合成标准的SQL语句是非常容易出错的,如果字符本身中还含有双引号或单引号,转化工作就会变的更为困难。所以,java又提供了一个PreparedStatement类,该类一个重要的作用就是提供了一个“占位符”,可以方便程序员进行转换的工作。

上面的程序可以改为:

package connectDataBase;

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.sql.*;

public class insertData {

    public static void main(String[] args) {

        Connection con = null;

//        Statement sta;

        PreparedStatement ps;

        String code,name,sex,address,room,tel;

        code = getInput("请输入编号: ");

        name = getInput("请输入姓名: ");

        sex = getInput("请输入性别: ");

        address = getInput("请输入地址: ");

        room = getInput("请输入寝室: ");

        tel = getInput("请输入电话: ");

//        String sqlString = "insert into student values('"+code+"','"+name+"','"+sex+"','"+address+"','"+room+"','"+tel+"')";

        String sqlString = "insert into student values(?,?,?,?,?,?)";

        try {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

            con = DriverManager.getConnection("jdbc:odbc:forStudy","","");

System.out.println("数据库连接成功!");

//            sta = con.createStatement();

//            sta.executeUpdate(sqlString);

            ps = con.prepareStatement(sqlString);

            ps.setString(1, code); //替换第一个占位符

            ps.setString(2, name);

            ps.setString(3, sex);

            ps.setString(4, address);

            ps.setString(5, room);

            ps.setString(6, tel);

            ps.executeUpdate();

            System.out.println("插入成功!");

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            if(con!=null){

                try {

                    if(!con.isClosed())

                        con.close();

System.out.println("数据库关闭!");

                } catch (SQLException e) {

                    e.printStackTrace();

                }

            }

        }

    }



    private static String getInput(String str) {

        String msg = "";

        try {

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            System.out.print(str);

            msg = br.readLine();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return msg;

    }



}

程序运行结果如下:

请输入编号: 0013

请输入姓名: 张三

请输入性别: 男

请输入地址: 河南郑州

请输入寝室: A-527

请输入电话: 8723641

数据库连接成功!

插入成功!

数据库关闭!

4. 删除数据

删除数据很简单,只要执行SQL语句中的删除命令delete即可。

package connectDataBase;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.sql.*;

public class deleteData {



    public static void main(String[] args) {

        Connection con = null;

        Statement sta;

        String code= null;

        try {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

            con = DriverManager.getConnection("jdbc:odbc:forStudy","","");

            code = getInput("请输入要删除的学生编号: ");

            String sql = "delete from student where code='"+code+"'";

            sta =con.createStatement();

            int k = sta.executeUpdate(sql);

            System.out.println("删除了"+k+"条记录,编号为:"+code);

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            if(con!=null){

                try {

                    if(!con.isClosed())

                        con.close();

                    System.out.println("数据库关闭!");

                } catch (SQLException e) {

                    e.printStackTrace();

                }

            }

        }

    }



    private static String getInput(String str) {

        String msg=null;

        try {

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            System.out.print(str);

            msg = br.readLine();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return msg;

    }



}

程序运行结果如下:

请输入要删除的学生编号: 30

删除了1条记录,编号为:30

数据库关闭!

5. 修改数据

使用SQL语句中的update命令就可以修改数据,下面是个简单的例子,将所有性别为“男”的记录改成女。

例5.1 修改数据示例。

package connectDataBase;

import java.sql.*;

public class updateData {



    public static void main(String[] args) {

        Connection con = null;

        Statement sta;

        String sql;

        int k;

        try {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

            con = DriverManager.getConnection("jdbc:odbc:forStudy", "", "");

            System.out.println("数据库连接成功!");

            sql ="update student set sex='女' where sex='男'";

            sta = con.createStatement();

            k = sta.executeUpdate(sql);

            System.out.println("修改了"+k+"条记录");

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            if(con!=null){

                try {

                    if(!con.isClosed())

                        con.close();

                    System.out.println("数据库关闭!");

                } catch (SQLException e) {

                    e.printStackTrace();

                }

            }

        }



    }



}

程序运行结果如下:

数据库连接成功!

修改了3条记录

数据库关闭!

6. 查询数据

利用SELECT语句查询得到结果后,会将结果放在一个ResultSet集中,遍历这个集合就可以做任何需要的操作。

例6.1 先用SQL查询获取一个结果集,然后遍历这个结果集,将其中的记录输出到屏幕。

package connectDataBase;

import java.sql.*;

public class queryData {

    public static void main(String[] args) {

        Connection con = null;

        Statement sta;

        ResultSet rs;

        String code,name,sex,address,room,tel;

        String sql;

        try {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

            con = DriverManager.getConnection("jdbc:odbc:forStudy","","");

            System.out.println("数据库连接成功!");

            sta = con.createStatement();

            sql = "select * from student";

            rs = sta.executeQuery(sql);

            while(rs.next()){

                code = rs.getString("code");

                name = rs.getString("name");

                sex = rs.getString("sex");

                address = rs.getString("address");

                room = rs.getString("room");

                tel = rs.getString("tel");

                System.out.println(code+" "+name+""+sex+" "+address+" "+room+" "+tel);

            }

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            if(con!=null){

                try {

                    if(!con.isClosed())

                        con.close();

                    System.out.println("数据库关闭!");

                } catch (SQLException e) {

                    e.printStackTrace();

                }

            }

        }

    }

}

程序运行结果如下:

数据库连接成功!

0001 陈永华女 湖南长沙 N-405 13107311256

0012 李明女 湖南株洲 S-102 8945211

0013 张三女 河南郑州 A-527 8723641

数据库关闭!

在上述程序中,需要先将游标执行一次next()方法,才能读取数据。这是因为游标开始的时候位于第一条记录的前面。

7. 学生信息管理系统实例

程序代码如下:

 

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.sql.*;



import javax.swing.*;



public class AddressList extends WindowAdapter implements ActionListener {

    JFrame jf;

    Container con;

    JPanel jp[];

    JTextField jtf[];

    JLabel jl[];

    JButton firstBtn,preBtn,nextBtn,lastBtn,addBtn,editBtn,delBtn,cancelBtn,saveBtn,searchBtn;

    Connection conn = null;

    Statement sta = null;

    ResultSet rs = null;

    protected int recordState = onlyRead, curRow = 0, recordCnt = 0;

    public static final int onlyRead = 0, adding = 1, amending = 2;

    public static final String lblmsg[]={"学生姓名","学籍号","身份证件号","性别","籍贯","民族",

        "家庭住址","学校名称","学校标识码","年级","班级","联系电话"};

    private static final int fieldCnt = 12;

    //在构造方法中构造界面

    public AddressList(){

        jf = new JFrame("学籍信息管理系统");

        con = jf.getContentPane();

        con.setLayout(new BoxLayout(con,BoxLayout.Y_AXIS));

        jp = new JPanel[7];

        for(int i=0;i<7;i++){

            jp[i] = new JPanel();

            jp[i].setLayout(new FlowLayout());

        }

        jtf = new JTextField[fieldCnt];

        jl = new JLabel[fieldCnt];

        for(int i=0;i<fieldCnt;i++){

            jtf[i] = new JTextField();

            jtf[i].setColumns(36);

            jtf[i].setEditable(false);

            jl[i] = new JLabel();

            jl[i].setText(lblmsg[i]);

            jp[i/2].add(jl[i]);

            jp[i/2].add(jtf[i]);

        }

        firstBtn = new JButton("第一条");

        firstBtn.addActionListener(this);

        preBtn = new JButton("上一条");

        preBtn.addActionListener(this);

        nextBtn = new JButton("下一条");

        nextBtn.addActionListener(this);

        lastBtn = new JButton("最后一条");

        lastBtn.addActionListener(this);

        addBtn = new JButton("增加记录");

        addBtn.addActionListener(this);

        editBtn = new JButton("编辑记录");

        editBtn.addActionListener(this);

        delBtn = new JButton("删除记录");

          delBtn.addActionListener(this);

        cancelBtn = new JButton("取消改变");

        cancelBtn.addActionListener(this);

        saveBtn = new JButton("保存记录");

        saveBtn.addActionListener(this);

        searchBtn = new JButton("查找记录"); //按身份证号查找

        searchBtn.addActionListener(this);

        jp[6].add(firstBtn);

        jp[6].add(preBtn);

        jp[6].add(nextBtn);

        jp[6].add(lastBtn);

        jp[6].add(addBtn);

        jp[6].add(editBtn);

        jp[6].add(delBtn);

        jp[6].add(cancelBtn);

        jp[6].add(saveBtn);

        jp[6].add(searchBtn);

        for(int i=0;i<7;i++)

            con.add(jp[i]);

        jf.setSize(1000, 400);

        jf.setLocation(300, 200);

//        jf.setResizable(false);

        jf.setVisible(true);

        jf.addWindowListener(this);

        connection();

        if(recordCnt>0) showData();

        setFace();        

    }

    //打开数据库

    public void connection() {

//        String path = this.getClass().getClassLoader().getResource("db/Student.mdb").getPath().substring(1);

        String path = "D:\\Student.mdb";

        String url="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+path; 

        try {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

//            conn = DriverManager.getConnection("jdbc:odbc:Student", "", "");

            conn = DriverManager.getConnection(url, "", "");

            sta = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

            rs = sta.executeQuery("select count(*) from student");

            if(rs.next())

                recordCnt = rs.getInt(1); //获取记录数

            rs = sta.executeQuery("select * from student");

            rs.next(); //将游标移动到第一条记录处

            curRow = 1;

        } catch (ClassNotFoundException e) {

            JOptionPane.showMessageDialog(jf, "无法加载ODBC驱动");

        } catch (SQLException e) {

            JOptionPane.showMessageDialog(jf, "数据库无法连接或没有记录");

        }

        

    }

    //设置按钮的初始状态

    protected void setFace(){

        firstBtn.setEnabled(false);

        preBtn.setEnabled(false);

        nextBtn.setEnabled(true);

        lastBtn.setEnabled(true);

        addBtn.setEnabled(true);

        editBtn.setEnabled(true);

        delBtn.setEnabled(true);

        cancelBtn.setEnabled(false);

        saveBtn.setEnabled(false);    

    }

    

    //退出系统时关闭数据库

    public void windowClosing(WindowEvent e1){

        try {

            conn.close();

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            System.exit(0);

        }

    }

    //依次在text中显示学生学籍信息(显示数据到控件中)

    public void showData(){

        try {

            jtf[0].setText(rs.getString("name"));

            jtf[1].setText(rs.getString("stuID"));

            jtf[2].setText(rs.getString("IC"));

            jtf[3].setText(rs.getString("sex"));

            jtf[4].setText(rs.getString("native"));

            jtf[5].setText(rs.getString("nation"));

            jtf[6].setText(rs.getString("address"));

            jtf[7].setText(rs.getString("schname"));

            jtf[8].setText(rs.getString("schnum"));

            jtf[9].setText(rs.getString("grade"));

            jtf[10].setText(rs.getString("class"));

            jtf[11].setText(rs.getString("tel"));

        } catch (SQLException e) {

            JOptionPane.showMessageDialog(jf, "无法获取数据");

        }

    }

    //几个辅助方法(供按钮调用)

    protected void setTextState(boolean flag){ //设置文本读写状态

        for(int i=0;i<fieldCnt;i++)

            jtf[i].setEditable(flag);

    }

    

    protected void setTextEmpty(){ //将所有文本框中的数据清除

        for(int i=0;i<fieldCnt;i++)

            jtf[i].setText(null);

        jtf[5].setText("汉族");

        jtf[7].setText("确山县任店镇第二初级中学");

        jtf[8].setText("3141002842");

    }

    //"第一条"按钮事件响应代码

    protected void doMoveFirst(){

        //容错处理

        if(curRow<=1){

            firstBtn.setEnabled(false);

            preBtn.setEnabled(false);

            curRow = 1;

            return;

        }

        try {

            if(rs.first()){ //移动游标到第一条记录

                showData(); //显示当前记录到界面上

                curRow = 1; //记录游标的新位置

                //重新设置按钮状态

                firstBtn.setEnabled(false);

                preBtn.setEnabled(false);

                nextBtn.setEnabled(true);

                lastBtn.setEnabled(true);

            }

        } catch (SQLException e) {

            JOptionPane.showMessageDialog(jf, "移动游标出错");

        }

    }

    //"上一条"按钮事件响应代码

    protected void doMovePrevior(){

        if(curRow<=1){

            firstBtn.setEnabled(false);

            preBtn.setEnabled(false);

            curRow = 1;

            return;

        }

        try {

            if(rs.previous()){ //向前移动游标

                showData();

                curRow--;

                if(curRow==1){ //如果是第一条记录

                    firstBtn.setEnabled(false);

                    preBtn.setEnabled(false);

                }

                nextBtn.setEnabled(true);

                lastBtn.setEnabled(true);

            }

        } catch (SQLException e) {

            JOptionPane.showMessageDialog(jf, "移动游标出错");

        }

    }

    //"下一条"按钮事件响应代码

    protected void doMoveNext(){

        if(curRow>=recordCnt){ //容错处理

            nextBtn.setEnabled(false);

            lastBtn.setEnabled(false);

            curRow=recordCnt;

            return;

        }

        try {

            if(rs.next()){ //向后移动游标

                showData();

                curRow++;

                if(curRow==recordCnt){

                    nextBtn.setEnabled(false);

                    lastBtn.setEnabled(false);

                }

                firstBtn.setEnabled(true);

                preBtn.setEnabled(true);

            }

        } catch (SQLException e) {

            JOptionPane.showMessageDialog(jf, "移动游标出错");

        }

    }

    //"最后一条"按钮事件响应代码

    protected void doMoveLast() {

        if(curRow>=recordCnt){ //容错处理

            nextBtn.setEnabled(false);

            lastBtn.setEnabled(false);

            curRow=1;

            return;

        }

        try{

            if(rs.last()){ //将游标移动到最后

                showData();

                curRow=recordCnt;

                nextBtn.setEnabled(false);

                lastBtn.setEnabled(false);

                firstBtn.setEnabled(true);

                preBtn.setEnabled(true);        

            }

        } catch(SQLException e) {

            JOptionPane.showMessageDialog(jf, "移动游标出错");

        }

    }

    //增加记录按钮事件响应代码

    protected void doAdd() {

        if(recordState==onlyRead){ //原先是浏览状态,现在切换到编辑状态

            firstBtn.setEnabled(false);

            preBtn.setEnabled(false);

            nextBtn.setEnabled(false);

            lastBtn.setEnabled(false);

            addBtn.setEnabled(true);

            editBtn.setEnabled(false);

            delBtn.setEnabled(false);

            cancelBtn.setEnabled(true);

            saveBtn.setEnabled(true);

            recordState=adding;    

            setTextState(true);  //将各个Text置为可写

            setTextEmpty();      //将各个Text置空,准备编辑记录

        }else {         //原先就是编辑状态

            if(doSave(false))  //先保存上次增加的记录

                setTextEmpty();  //如果保存成功,准备增加下一条记录

        }

    }

    //保存记录按钮事件响应代码

    protected boolean doSave(boolean goViewState) {

        try {

            if(recordState==amending){  //如果是修改状态

                for(int i=0;i<fieldCnt;i++)

                    rs.updateString(i+1, jtf[i].getText());

                rs.updateRow();   //更新当前记录

                goViewState = true; //准备切换到浏览状态

            }else if(recordState==adding) { //这是增加状态

                //将游标移动到准备插入的地方

                rs.moveToInsertRow();

                //下面3步是插入记录必备的

                for(int i=0;i<fieldCnt;i++)

                    rs.updateString(i+1, jtf[i].getText());

                rs.insertRow();

                recordCnt++; //修改记录数

                curRow=recordCnt;  //移动标志

                rs.last();  //将游标移动到最后,也就是插入记录的位置

            }

        } catch (SQLException e) {

            JOptionPane.showMessageDialog(jf, "保存数据不成功!");

            return false;

        }

        if(goViewState){  //要切换回浏览状态

            firstBtn.setEnabled(true);

            preBtn.setEnabled(true);

            nextBtn.setEnabled(false);

            lastBtn.setEnabled(false);

            addBtn.setEnabled(true);

            editBtn.setEnabled(true);

            delBtn.setEnabled(true);

            cancelBtn.setEnabled(false);

            saveBtn.setEnabled(false);

            recordState=onlyRead;

            setTextState(false);

        }

        return true;

    }

    //编辑记录按钮事件响应代码

    protected void doEdit(){

        if(0==recordCnt) return; //如果记录数为零,则不可能修改

        //开始设置按钮的状态

        firstBtn.setEnabled(false);

        preBtn.setEnabled(false);

        nextBtn.setEnabled(false);

        lastBtn.setEnabled(false);

        addBtn.setEnabled(false);

        editBtn.setEnabled(false);

        delBtn.setEnabled(false);

        cancelBtn.setEnabled(true);

        saveBtn.setEnabled(true);

        recordState = amending; //置为修改状态

        setTextState(true);

    }

    //取消改变按钮事件响应代码

    protected void doCancel(){

        if(recordCnt==0) return;

        try {

            rs.absolute(curRow);  //移动到原先记录处

            showData();

            //设置按钮状态

            if(curRow>1){

                firstBtn.setEnabled(true);

                preBtn.setEnabled(true);

            }

            if(curRow<recordCnt){

                nextBtn.setEnabled(true);

                lastBtn.setEnabled(true);

            }

            addBtn.setEnabled(true);

            editBtn.setEnabled(true);

            delBtn.setEnabled(true);

            cancelBtn.setEnabled(false);

            saveBtn.setEnabled(false);

            recordState = onlyRead;

            setTextState(false);

        } catch (SQLException e) {

            JOptionPane.showMessageDialog(jf, "游标移动错误");

        }

    }

    //删除记录按钮事件响应代码

    protected void doDelete(){

        if(0==recordCnt) return; //如果没有记录,则什么都不用做

        if(JOptionPane.showConfirmDialog(jf, "删除后将不可恢复!确定要删除当前记录吗?","提示",JOptionPane.OK_CANCEL_OPTION)

                == JOptionPane.OK_OPTION){

            try {

                rs.deleteRow();  //删除当前记录

                recordCnt--;

                if(recordCnt>0){  //如果剩余还有记录

                    if(curRow>=recordCnt) //如果删除的是最后一条记录

                        curRow=recordCnt;

                    //否则的话,curRow的值无需改变,因为后一条记录自动成为了当前记录

                    rs.absolute(curRow);

                    showData();

                }else {

                    curRow = 0;

                    setTextEmpty();

                }

            } catch (SQLException e) {

                JOptionPane.showMessageDialog(jf, "删除数据出错");

            }

        }

    }

    //查找记录按钮事件响应代码

    protected void doSearch(){

        boolean b = true;;

        String IC = JOptionPane.showInputDialog(jf, "请输入要查找学生的身份证号:");

        if(curRow<=1){

            firstBtn.setEnabled(false);

            preBtn.setEnabled(false);

            curRow = 1;

        }

        try {

            if(rs.first()){ //移动游标到第一条记录

                curRow = 1; //记录游标的新位置

                //重新设置按钮状态

                firstBtn.setEnabled(false);

                preBtn.setEnabled(false);

                nextBtn.setEnabled(true);

                lastBtn.setEnabled(true);

            }

            while(b&&IC!=null){

                if(rs.getString("IC").equals(IC)){

                    try {

                        jtf[0].setText(rs.getString("name"));

                        jtf[1].setText(rs.getString("stuID"));

                        jtf[2].setText(IC);

                        jtf[3].setText(rs.getString("sex"));

                        jtf[4].setText(rs.getString("native"));

                        jtf[5].setText(rs.getString("nation"));

                        jtf[6].setText(rs.getString("address"));

                        jtf[7].setText(rs.getString("schname"));

                        jtf[8].setText(rs.getString("schnum"));

                        jtf[9].setText(rs.getString("grade"));

                        jtf[10].setText(rs.getString("class"));

                        jtf[11].setText(rs.getString("tel"));

                    } catch (SQLException e) {

                        JOptionPane.showMessageDialog(jf, "无法获取数据");

                    }

                    return;

                }else{

                    if(curRow>=recordCnt){ 

                        curRow=recordCnt;

                        b = false;

                        JOptionPane.showMessageDialog(jf, "数据库中没找到该记录!");

                    }

                    else{

                        if(rs.next()){ //向后移动游标

                            curRow++;

                            if(curRow==recordCnt){

                                nextBtn.setEnabled(false);

                                lastBtn.setEnabled(false);

                            }

                            firstBtn.setEnabled(true);

                            preBtn.setEnabled(true);

                        }

                    }

                }

            }

        } catch (SQLException e) {

            JOptionPane.showMessageDialog(jf, "移动游标出错");

        }

    }

    //actionPerformed()方法

    public void actionPerformed(ActionEvent e){

        Object obj;

        obj = e.getSource();

        if(obj == firstBtn){

            doMoveFirst();

        }else if(obj == preBtn){

            doMovePrevior();

        }else if(obj == nextBtn){

            doMoveNext();

        }else if(obj==lastBtn){

            doMoveLast();

        }else if(obj==addBtn){

            doAdd();

        }else if(obj==saveBtn){

            doSave(true);

        }else if(obj==editBtn){

            doEdit();

        }else if(obj==cancelBtn){

            doCancel();

        }else if(obj==delBtn){

            doDelete();

        }else if(obj==searchBtn){

            doSearch();

        }

    }

    public static void main(String[] args){

        new AddressList();

    }

}

 

你可能感兴趣的:(java)