2014-05-08 125 views
0

这是我的javax.swing类。但它总是抛出错误java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2。不太确定是什么原因造成的。错误在哪里?java.sql.SQLException:[Microsoft] [ODBC Microsoft Access Driver]参数太少。预计2

import java.awt.event.*; 
import java.awt.*; 
import java.sql.*; 
import javax.swing.*; 

public class SwingSearchApp extends JFrame implements ActionListener { 

    //Initializing Components 
    private static final long serialVersionUID = 1L; 
    JLabel lb, lb1, lb2, lb3, lb4, lb5; 
    JTextField tf1, tf2, tf3, tf4, tf5; 
    JButton btn; 

    //Creating Constructor for initializing JFrame components 
    SwingSearchApp() { 
     //Providing Title 
     super("Fetching Student Information"); 
     lb5 = new JLabel("Enter Name:"); 
     lb5.setBounds(20, 20, 100, 20); 
     tf5 = new JTextField(20); 
     tf5.setBounds(130, 20, 200, 20); 
     btn = new JButton("Submit"); 
     btn.setBounds(50, 50, 100, 20); 
     btn.addActionListener(this); 
     lb = new JLabel("Fetching Search Information From Database"); 
     lb.setBounds(30, 80, 450, 30); 
     lb.setForeground(Color.red); 
     lb.setFont(new Font("Serif", Font.BOLD, 20)); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(500, 500); 
     lb1 = new JLabel("U_Name:"); 
     lb1.setBounds(20, 120, 100, 20); 
     tf1 = new JTextField(50); 
     tf1.setBounds(130, 120, 200, 20); 
     lb2 = new JLabel("U_Mail:"); 
     lb2.setBounds(20, 150, 100, 20); 
     tf2 = new JTextField(100); 
     tf2.setBounds(130, 150, 200, 20); 
     lb3 = new JLabel("U_Pass:"); 
     lb3.setBounds(20, 180, 100, 20); 
     tf3 = new JTextField(50); 
     tf3.setBounds(130, 180, 200, 20); 
     lb4 = new JLabel("U_Country:"); 
     lb4.setBounds(20, 210, 100, 20); 
     tf4 = new JTextField(50); 
     tf4.setBounds(130, 210, 100, 20); 
     setLayout(null); 
     //Add components to the JFrame 
     add(lb5); 
     add(tf5); 
     add(btn); 
     add(lb); 
     add(lb1); 
     add(tf1); 
     add(lb2); 
     add(tf2); 
     add(lb3); 
     add(tf3); 
     add(lb4); 
     add(tf4); 
     //Set TextField Editable False 
     tf1.setEditable(false); 
     tf2.setEditable(false); 
     tf3.setEditable(false); 
     tf4.setEditable(false); 
    } 

    public void actionPerformed(ActionEvent e) { 
     //Create DataBase Coonection and Fetching Records 
     try { 
      String str = tf5.getText(); 
      String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + "C:\\users\\ppreeti\\employee.accdb"; 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      Connection con = DriverManager.getConnection(url, "", ""); 
      //Connection con = DriverManager.getConnection("jdbc:oracle:thin:@mcndesktop07:1521", "sandeep", "welcome"); 
      PreparedStatement st = con.prepareStatement("select * from emp where uname=?"); 
      st.setString(1, str); 
      //Excuting Query 
      ResultSet rs = st.executeQuery(); 
      if (rs.next()) { 
       String s = rs.getString(1); 
       String s1 = rs.getString(2); 
       String s2 = rs.getString(3); 
       String s3 = rs.getString(4); 
       //Sets Records in TextFields. 
       tf1.setText(s); 
       tf2.setText(s1); 
       tf3.setText(s2); 
       tf4.setText(s3); 
      } else { 
       JOptionPane.showMessageDialog(null, "Name not Found"); 
      } 
      //Create Exception Handler 
     } catch (Exception ex) { 
      System.out.println(ex); 
     } 
    } 
//Running Constructor 

    public static void main(String args[]) { 
     new SwingSearchApp(); 
    } 
} 

我的表在Access数据库的结构包含以下字段: - unameumailupassupcountry

+0

您没有将期望的参数传递给SQL。它期望2个参数。请调试。 – Keerthivasan

+0

我应该如何通过我的代码纠正? – user3608233

+0

请检查您是否有任何拼写与列名称不匹配。您不应该在列名中使用任何特殊字符。如果有的话,用方括号将列名围起来 – Keerthivasan

回答

1

如果您的表中不存在uname,可能会发生这种情况。检查拼写/大小写。

参考:here

更新:

尝试修改代码一点可以只运行一个简单的查询,并得到一个结果集。这将允许您查询您的驱动程序看到他们的列名称:

ResultSet rs = stmt.executeQuery("SELECT * FROM emp"); 
ResultSetMetaData rsmd = rs.getMetaData(); 
String firstColumnName = rsmd.getColumnName(1); 
// etc.. 

这将告诉你一定。

+0

uname是我的表名!我已经交叉检查过了。所以,我100%肯定这不是错误的根源。 – user3608233

+0

我以某种方式有一个强烈的观念,认为错误是由于Access数据库的语法规则..但不知道错误在哪里。 ResultSet rs = st.executeQuery();声明似乎永远不会执行 – user3608233

+0

@ user3608233:添加更新 – mprivat

相关问题