mysql+jdbc简单的增删改查的程序

一个实现单表增删查改的小程序.
下面代码用的是Customers表,有id(自动增长,主键),name,age,address字段
程序分为有  提供连接的ConnectionProvider类,用于保存记录的对象Customer类,产生界面的Viewer类,控制器Contral类
属性文件内容:文件名是db.conf

1.数据库

  1. #MySQL
  2. JDBC_DRIVER=com.mysql.jdbc.Driver
  3. URL=jdbc:mysql://localhost:3306/test
  4. USER=root
  5. PASSWORD=1234

2.提供连接的类 DAO

  1. package jdbc;
  2. import java.io.*;
  3. import java.sql.*;
  4. import java.util.*;
  5. public class ConnectionProvider {
  6.   private static Connection con = null;
  7.   private static Properties ps = new Properties();
  8.   static{
  9.     try {
  10.       InputStream in = new FileInputStream("db.conf");
  11.       ps.load(in);
  12.     } catch (Exception e) {
  13.       e.printStackTrace();
  14.     }
  15.   }
  16.   public static Connection getConnection(){
  17.     String JDBC_DRIVER = ps.getProperty("JDBC_DRIVER");
  18.     String URL = ps.getProperty("URL");
  19.     String USER = ps.getProperty("USER");
  20.     String PASSWORD = ps.getProperty("PASSWORD");
  21.     
  22.     try {
  23.       Class.forName("com.mysql.jdbc.Driver");
  24.       DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  25.       con = DriverManager.getConnection(URL,USER,PASSWORD);
  26.     } catch (Exception e) {
  27.       e.printStackTrace();
  28.     }
  29.     
  30.     return con;
  31.   }
  32. }

 

3.视图类 (表示层)

  1. package jdbc;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. /**视图类,用来展示记录,和将信息反馈给控制器,并接受和显示控制器返回的结果*/
  6. public class Viewer implements ActionListener{
  7.   private JFrame jf;
  8.   private JLabel topLabel;
  9.   private JTextField tableField;
  10.   private JTextField idField;
  11.   private JTextField nameField;
  12.   private JTextField ageField;
  13.   private JTextField addressField;
  14.   
  15.   private Contral contral;
  16.   private Customer customer;
  17.   public Viewer(){
  18.     buildViewer();
  19.     contral = new Contral();
  20.     customer = contral.first();
  21.     show(customer,contral.getSize());
  22.   }
  23.   public void buildViewer(){
  24.     jf = new JFrame();
  25.     topLabel = new JLabel("                                                        第0条记录,一共有0条记录");
  26.     jf.add(topLabel,BorderLayout.NORTH);
  27.     JPanel jpCenter = new JPanel(new GridLayout(4,2));
  28.     JLabel idLabel = new JLabel("id");
  29.     JLabel nameLabel = new JLabel("name");
  30.     JLabel ageLabel = new JLabel("age");
  31.     JLabel addressLabel = new JLabel("address");
  32.     idField = new JTextField(20);
  33.     nameField = new JTextField(20);
  34.     ageField = new JTextField(20);
  35.     addressField = new JTextField(20);
  36.     
  37.     jpCenter.add(idLabel);
  38.     jpCenter.add(idField);
  39.     jpCenter.add(nameLabel);
  40.     jpCenter.add(nameField);
  41.     jpCenter.add(ageLabel);
  42.     jpCenter.add(ageField);
  43.     jpCenter.add(addressLabel);
  44.     jpCenter.add(addressField);
  45.     
  46.     jf.add(jpCenter);
  47.     
  48.     JPanel jpSouth = new JPanel();
  49.     JButton first = new JButton("first");
  50.     JButton previous = new JButton("previous");
  51.     JButton next = new JButton("next");
  52.     JButton last = new JButton("last");
  53.     JButton insert = new JButton("insert");
  54.     JButton update = new JButton("update");
  55.     JButton dalete = new JButton("dalete");
  56.     JButton refresh = new JButton("refresh");
  57.     first.addActionListener(this);
  58.     previous.addActionListener(this);
  59.     next.addActionListener(this);
  60.     last.addActionListener(this);
  61.     insert.addActionListener(this);
  62.     update.addActionListener(this);
  63.     dalete.addActionListener(this);
  64.     refresh.addActionListener(this);
  65.     
  66.     jpSouth.add(first);
  67.     jpSouth.add(previous);
  68.     jpSouth.add(next);
  69.     jpSouth.add(last);
  70.     jpSouth.add(insert);
  71.     jpSouth.add(update);
  72.     jpSouth.add(dalete);
  73.     jpSouth.add(refresh);
  74.     
  75.     jf.add(jpSouth,BorderLayout.SOUTH);
  76.     
  77.     jf.setSize(600,200);
  78.     jf.setLocation(200, 200);
  79.     jf.setVisible(true);
  80.     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  81.   }
  82.   /**展示记录*/
  83.   public void show(Customer customer,String size){
  84.     idField.setText(customer.getId() + "");
  85.     nameField.setText(customer.getName());
  86.     ageField.setText(customer.getAge() + "");
  87.     addressField.setText(customer.getAddress());
  88.     topLabel.setText("                                                        第" 
  89.                             + size.split(":")[0]
  90.                                                     +"条记录,一共有"+size.split(":")[1]+"条记录");
  91.   }
  92.   /**事件监听*/
  93.   public void actionPerformed(ActionEvent e) {
  94.     String comm = e.getActionCommand();
  95.     if("first".equals(comm)){
  96.       customer = contral.first();
  97.       show(customer,contral.getSize());
  98.     }else if("previous".equals(comm)){
  99.       customer = contral.previous();
  100.       show(customer,contral.getSize());
  101.     }else if("next".equals(comm)){
  102.       customer = contral.next();
  103.       show(customer,contral.getSize());
  104.     }else if("last".equals(comm)){
  105.       customer = contral.last();
  106.       show(customer,contral.getSize());
  107.     }else if("insert".equals(comm)){
  108.       String name = nameField.getText();
  109.       int age = Integer.parseInt(ageField.getText());
  110.       String address = addressField.getText();
  111.       customer = contral.insert(name,age,address);
  112.       show(customer,contral.getSize());
  113.     }else if("update".equals(comm)){
  114.       String name = nameField.getText();
  115.       int age = Integer.parseInt(ageField.getText());
  116.       String address = addressField.getText();
  117.       contral.update(name,age,address);
  118.     }else if("dalete".equals(comm)){
  119.       customer = contral.dalete();
  120.       show(customer,contral.getSize());
  121.     }else if("refresh".equals(comm)){
  122.       customer = contral.refresh();
  123.       show(customer,contral.getSize());
  124.     }
  125.   }
  126.   public static void main(String[] args) {
  127.     new Viewer();
  128.   }
  129. }

 

4.控制器类(逻辑层)

  1. package jdbc;
  2. import java.sql.*;
  3. import java.util.*;
  4. public class Contral {
  5.   private int cur = 0;
  6.   private Connection con = null;
  7.   private Statement stmt = null;
  8.   private ResultSet rs = null;
  9.   private ArrayList customers;
  10.   /**构造,产生对象结果集合*/
  11.   public Contral(){
  12.     buildCustomersList();
  13.   }
  14.   /**执行查询语句,将结果集转换成对象集*/
  15.   private void buildCustomersList(){
  16.     customers = new ArrayList();
  17.     con = ConnectionProvider.getConnection();
  18.     try {
  19.       stmt = con.createStatement();
  20.       rs = stmt.executeQuery("select * from customers");
  21.       customers = new ArrayList();
  22.       while(rs.next()){
  23.         int id = rs.getInt(1);
  24.         String name = toGB(rs.getString(2));
  25.         int age = rs.getInt(3);
  26.         String address = toGB(rs.getString(4));
  27.         Customer customer = new Customer(id,name,age,address);
  28.         customers.add(customer);
  29.       }
  30.     } catch (Exception e) {
  31.       e.printStackTrace();
  32.     }finally{
  33.       closeConnection(con);
  34.       closeStatement(stmt);
  35.       closeResultSet(rs);
  36.     }
  37.   }
  38.   /**显示第一个元素*/
  39.   public Customer first(){
  40.     cur = 0;
  41.     return customers.get(cur);
  42.   }
  43.   /**显示前一个元素*/
  44.   public Customer previous(){
  45.     if(cur>0)
  46.       cur--;
  47.     return customers.get(cur);
  48.   }
  49.   /**显示下一个*/
  50.   public Customer next(){
  51.     if(cur
  52.       cur++;
  53.     return customers.get(cur);
  54.   }
  55.   /**显示最后一个*/
  56.   public Customer last(){
  57.     cur = customers.size()-1;
  58.     return customers.get(cur);
  59.   }
  60.   /**插入记录*/
  61.   public Customer insert(String name,int age,String address){
  62.     Customer customer;
  63.     String sql = "insert into customers (name,age,address)value("
  64.              + "'" + toISO(name) + "'" + ","
  65.              + age + ","
  66.              + "'" + toISO(address) + "'" + ")";
  67.     boolean isOk = exe(sql);
  68.     try{
  69.       if(isOk){
  70.         con = ConnectionProvider.getConnection();
  71.         stmt = con.createStatement();
  72.         sql = "select id from customers where name="
  73.                    + "'" + toISO(name) + "'";
  74.         rs = stmt.executeQuery(sql);
  75.         rs.next();
  76.         customer = new Customer(rs.getInt(1),name,age,address);
  77.         customers.add(cur,customer);
  78.         return customer;
  79.       }else{
  80.         return customers.get(cur);
  81.       }
  82.     }catch(Exception e){
  83.       e.printStackTrace();
  84.       return customers.get(cur);
  85.     }finally{
  86.       closeConnection(con);
  87.       closeStatement(stmt);
  88.     }
  89.   }
  90.   /**记录更新*/
  91.   public void update(String name,int age,String address){
  92.     Customer customer = customers.get(cur);
  93.     customer.setName(name);
  94.     customer.setAge(age);
  95.     customer.setAddress(address);
  96.     String sql = "update customers set name=" + "'" + toISO(name) + "'" + ","
  97.                         + "age=" + age + ","
  98.                         + "address=" +"'" + toISO(address) + "'"
  99.                         + "where id=" + customer.getId();
  100.     exe(sql);
  101.   }
  102.   /**删除记录*/
  103.   public Customer dalete(){
  104.     Customer customer = customers.get(cur);
  105.     String sql = "delete from customers where id=" + customer.getId();
  106.     exe(sql);
  107.     customers.remove(cur);
  108.     if(cur
  109.       customer = customers.get(cur);
  110.     }else{
  111.       cur = 0;
  112.       customer = customers.get(cur);
  113.     }
  114.     return customer;
  115.   }
  116.   /**刷新结果集合*/
  117.   public Customer refresh(){
  118.     buildCustomersList();
  119.     return first();
  120.   }
  121.   /**用于执行SQL语句*/
  122.   private boolean exe(String sql){
  123.     con = ConnectionProvider.getConnection();
  124.     try {
  125.       stmt = con.createStatement();
  126.       stmt.execute(sql);
  127.       return true;
  128.     } catch (SQLException e) {
  129.       e.printStackTrace();
  130.       return false;
  131.     }finally{
  132.       closeConnection(con);
  133.       closeStatement(stmt);
  134.       closeResultSet(rs);
  135.     }
  136.   }
  137.   /**获取总记录数和当前记录数的字符串表示*/
  138.   public String getSize(){
  139.     return (cur+1) + ":" + customers.size();
  140.   }
  141.   /**把gb2312转化成ISO-8859-1*/
  142.   private String toISO(String str){
  143.     try {
  144.       return str = new String(str.getBytes("GB2312"),"ISO-8859-1");
  145.     } catch (Exception e) {e.printStackTrace();}
  146.     return str;
  147.   }
  148.   /**把ISO-8859-1转化成gb2312*/
  149.   private String toGB(String str){
  150.     try {
  151.       return str = new String(str.getBytes("ISO-8859-1"),"GB2312");
  152.     } catch (Exception e) {e.printStackTrace();}
  153.     return str;
  154.   }
  155.   /**关闭连接*/
  156.   private void closeConnection(Connection con){
  157.     try{if(con!=null)con.close();}catch(Exception e){e.printStackTrace();}
  158.   }
  159.   /**关闭语句*/
  160.   private void closeStatement(Statement stmt){
  161.     try{if(stmt!=null)stmt.close();}catch(Exception e){e.printStackTrace();}
  162.   }
  163.   /**关闭结果集*/
  164.   private void closeResultSet(ResultSet rs){
  165.     try{if(rs!=null)rs.close();}catch(Exception e){e.printStackTrace();}
  166.   }
  167. }

5.POJO 基本的bean类

  1. package jdbc;
  2. public class Customer {
  3.   private int id;
  4.   private String name;
  5.   private int age;
  6.   private String address;
  7.   public Customer(int id,String name,int age,String address){
  8.     this.id = id;
  9.     this.name = name;
  10.     this.age = age;
  11.     this.address = address;
  12.   }
  13.   public int getId() {
  14.     return id;
  15.   }
  16.   public void setId(int id) {
  17.     this.id = id;
  18.   }
  19.   public String getName() {
  20.     return name;
  21.   }
  22.   public void setName(String name) {
  23.     this.name = name;
  24.   }
  25.   public int getAge() {
  26.     return age;
  27.   }
  28.   public void setAge(int age) {
  29.     this.age = age;
  30.   }
  31.   public String getAddress() {
  32.     return address;
  33.   }
  34.   public void setAddress(String address) {
  35.     this.address = address;
  36.   }
  37.   
  38. }

你可能感兴趣的:(java学习笔记,jdbc,mysql,insert,sql,exe,null)