2014-05-08 2 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 содержит следующие поля: - uname, umail, upass, upcountry.

+0

Вы не передаете ожидаемые параметры SQL. Он ожидает 2 параметра. Пожалуйста, отлаживайте. – Keerthivasan

+0

Как мне исправить это через мой код? – user3608233

+0

Проверьте, что у вас есть неправильное расписание с названием столбца. Вы не должны использовать специальные символы в имени столбца. Если у вас есть, окружите имя столбца квадратными скобками – Keerthivasan

ответ

1

Это может произойти, если uname не существует в вашем столе. Проверьте правописание/дело.

Ссылка: here

Update:

Попробуйте изменить код немного, чтобы иметь возможность просто запустить простой запрос и получить набор результатов. Это позволит затем можно запрашивать имена столбцов, как ваш водитель видит их:

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

Это скажет вам точно.

+0

uname - это имя моей таблицы! Я перекрестно проверил его. Итак, я на 100% уверен, что это не корень ошибки. – user3608233

+0

У меня есть сильное представление о том, что ошибка кроется из-за правил синтаксиса Access Database .. но не уверен, где лежит ошибка. ResultSet rs = st.executeQuery(); оператор никогда не выполняет – user3608233

+0

@ user3608233: добавлено обновление – mprivat

Смежные вопросы