2017-08-10 76 views
1

我是新来使用UCanAccess和Microsoft Access作为一个Java的数据库:如何输入数据从Java GUI到MS Access中使用UCanAccess

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.*; 
import net.ucanaccess.jdbc.*; 

public class Memo extends JFrame implements ActionListener { 

    private JTextField textField; 
    private JTextField textField_1; 

    Connection cn = null; 
    ResultSet rs = null; 
    Statement s = null; 

    public Memo() { 

     getContentPane().setBackground(Color.DARK_GRAY); 
     getContentPane().setLayout(null); 

     textField = new JTextField(); 
     textField.setBounds(246, 0, 178, 50); 
     getContentPane().add(textField); 
     textField.setColumns(10); 

     JLabel lblNewLabel = new JLabel("Enter bill amount: $"); 
     lblNewLabel.setFont(new Font("Arial Narrow", Font.BOLD, 11)); 
     lblNewLabel.setForeground(Color.WHITE); 
     lblNewLabel.setBounds(10, 0, 237, 50); 
     getContentPane().add(lblNewLabel); 

     JLabel label = new JLabel("Enter water usage amount(l): "); 
     label.setFont(new Font("Arial Narrow", Font.BOLD, 11)); 
     label.setForeground(Color.WHITE); 
     label.setBounds(10, 49, 237, 50); 
     getContentPane().add(label); 

     textField_1 = new JTextField(); 
     textField_1.setColumns(10); 
     textField_1.setBounds(246, 49, 178, 50); 
     getContentPane().add(textField_1); 

     JButton btnSubmit = new JButton("Submit"); 
     btnSubmit.addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent e) { 
       try { 
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); 
        Connection cn = DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\decx\\Desktop\\Db.accdb"); 
        String sql = "insert into db ('ID', 'WaterUsage', 'Bill') + values ('1', '12', '12')"; 
        s = cn.createStatement(); 
        s.executeUpdate(sql); 

       } catch (Exception ex) { 
        JOptionPane.showMessageDialog(null, ex); 
       } 
      } 
     }); 
     btnSubmit.setFont(new Font("Arial Narrow", Font.BOLD, 11)); 
     btnSubmit.setBounds(272, 131, 141, 35); 
     getContentPane().add(btnSubmit); 

    } 

    public static void main(String[] args) throws Exception { 

     Memo qMemo = new Memo(); 
     qMemo.setSize(500, 350); 
     qMemo.setVisible(true); 
     qMemo.setTitle("Tips & Tricks"); 
     qMemo.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     qMemo.getContentPane().setLayout(null); 

    } 

    public void actionPerformed(ActionEvent e) { 

    } 
} 

我需要的代码时,发送数据提交按钮被点击。这是一个学校项目,我必须允许用户输入用水量和账单(水电费单),以便稍后显示。

我已经运行过代码,但像“意外的令牌”或“用户没有特权或对象未找到”的错误。

回答

2

有一些注意事项:

  1. 你得到这个错误(unexpected token),因为列和表的名字不应该是两个单引号''
  2. 之间的+经营者不允许在查询的那个位置
  3. 此外,只有字符串可以是两个引号之间不是整数,确保例如ID的类型是一个字符串,如果不是你必须删除两个引号
  4. 阅读Prepared Statement,避免语法错误,防止SQL注入

看:

String sql="insert into db ('ID', 'WaterUsage', 'Bill') + values ('1', '12', '12')"; 
//(1)-----------------------^--^--^----------^--^----^^  ^^ 
//(2)___________________________________________________|   | | 
//(3)_____________________________________________________________| | 
+0

太棒了!非常感谢伙伴 – DarrenTJ

+0

不客气 –

0

这对我帮助很大,并与朋友们的帮助下,我完成了我的代码,任何人谁可能需要这个在任何一点,我会包括我的代码。

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.*; 
import net.ucanaccess.jdbc.*; 

public class Memo extends JFrame implements ActionListener { 

private JTextField textField; 
private JTextField textField_1; 

Connection cn = null; 
ResultSet rs = null; 
Statement s = null; 

public Memo() { 

    getContentPane().setBackground(Color.DARK_GRAY); 
    getContentPane().setLayout(null); 

    textField = new JTextField(); 
    textField.setBounds(246, 0, 178, 50); 
    getContentPane().add(textField); 
    textField.setColumns(10); 

    JLabel lblNewLabel = new JLabel("Enter bill amount: $"); 
    lblNewLabel.setFont(new Font("Arial Narrow", Font.BOLD, 11)); 
    lblNewLabel.setForeground(Color.WHITE); 
    lblNewLabel.setBounds(10, 0, 237, 50); 
    getContentPane().add(lblNewLabel); 

    JLabel label = new JLabel("Enter water usage amount(l): "); 
    label.setFont(new Font("Arial Narrow", Font.BOLD, 11)); 
    label.setForeground(Color.WHITE); 
    label.setBounds(10, 49, 237, 50); 
    getContentPane().add(label); 

    textField_1 = new JTextField(); 
    textField_1.setColumns(10); 
    textField_1.setBounds(246, 49, 178, 50); 
    getContentPane().add(textField_1); 


    JButton btnSubmit = new JButton("Submit"); 
    btnSubmit.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      try { 
       int num = Integer.parseInt(textField.getText()); 
       int num1 = Integer.parseInt(textField_1.getText()); 

       textField.getText(); 
       textField_1.getText(); 


       Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); 
       Connection cn = DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\DECX\\Desktop\\Db.accdb"); 
       String sql = "insert into db (WaterUsage, Bill) values ('"+num+"', '"+num1+"')"; 
       s = cn.createStatement(); 
       s.executeUpdate(sql); 

      } catch (Exception ex) { 
       JOptionPane.showMessageDialog(null, ex); 
      } 
     } 
    }); 
    btnSubmit.setFont(new Font("Arial Narrow", Font.BOLD, 11)); 
    btnSubmit.setBounds(272, 131, 141, 35); 
    getContentPane().add(btnSubmit); 

} 

public static void main(String[] args) throws Exception { 

    Memo qMemo = new Memo(); 
    qMemo.setSize(500, 350); 
    qMemo.setVisible(true); 
    qMemo.setTitle("Memo"); 
    qMemo.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    qMemo.getContentPane().setLayout(null); 

} 

public void actionPerformed(ActionEvent e) { 

} 
}