когда я пытаюсь сохранить данные в mysql, создается исключение (java.sql.SQLException) - PullRequest
0 голосов
/ 27 июля 2011
import java.awt.Panel;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.Statement;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JTextField;

import com.mysql.jdbc.Connection;

public class one implements ActionListener{

    JFrame frame = new JFrame("ghar hisab");
    JButton b = new JButton("save");
    Panel p = new Panel();
    JTextField f = new JTextField(20);
    JTextField f1 = new JTextField(20);
    JLabel l = new JLabel("Enter the first name");
    JLabel l1 = new JLabel("Enter the last name");
    String s1,s2;
    String ppl;
    int people;

            void display() throws Exception{
                                p.add(l);
                                p.add(f);
                                p.add(l1);
                                p.add(f1);
                                p.add(b);

                                frame.setSize(400,400);

                                frame.setVisible(true);
                                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                frame.getContentPane().add(p);
                                s1=f.getText();
                                s2=f1.getText();


                //Class.forName("com.mysql.jdbc.Driver");
                //Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/people","root","desire");

                //Statement stat = con.createStatement();
            //  String s3= "insert into name values s1 + s2";
            //  stat.executeUpdate(s3);



        //  stat.executeQuery("insert into name (first,last) values('"+s1+"','"+s2+"')");
            b.addActionListener(this);

        //  ResultSet rs= stat.executeQuery("insert into name (first,last) values("arun","yadav"));


            //while(rs.next()){
        //      System.out.println(rs.getString(1)+" "+rs.getString(2));
        //  }




        }

        @Override
        public void actionPerformed(ActionEvent event) {
            // TODO Auto-generated method stub
            try{
                Class.forName("com.mysql.jdbc.Driver");

            Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/people","root","desire");

            Statement stat = con.createStatement();

            stat.executeQuery("insert into name (first,last) values('"+s1+"','"+s2+"')");
            }
            catch(Exception e){
                System.out.println("the exception caught is "+e);
            }
        }


}

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Я заметил, что вы импортируете PreparedStatement, но ваш код никогда не использует его. Ну, я не знаю много о SQL, но я делаю это, когда вы используете PreparedStatement, у вас меньше шансов иметь проблемы. Вот простой пример для вставки:

String sql = "INSERT INTO Name (First, Last) VALUES (?, ?)";

PreparedStatement stmt = connection.prepareStatement(sql);

stmt.setString( 1, s1 );
stmt.setString( 2, s2 );
stmt.executeUpdate();

Я взял на себя смелость прописывать имена таблиц и столбцов, так как большинство людей создавали имена таблиц.

Edit:

s1=f.getText();
s2=f1.getText(); 

Когда этот код выполняется, текстовое поле не содержит значений, поскольку у пользователя еще не было возможности ввести какие-либо данные в текстовые поля. Эти два оператора необходимо перенести в метод actionPerformed ().

1 голос
/ 27 июля 2011

Без трассировки стека сказать сложно. Либо вы не устанавливаете соединение, либо значения в вашем SQL приводят к тому, что запрос выдает ошибку (возможно, одно или оба имеют нулевое значение). Я бы предложил поставить точку останова на con и посмотреть, не является ли объект нулевым. А также посмотрите, что такое s1 и s2. Ниже я добавил две строки. Вам необходимо закрыть ваше заявление и связь.

public void actionPerformed(ActionEvent event) {
    // TODO Auto-generated method stub
    try
    {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/people","root","desire");
        Statement stat = con.createStatement();
        stat.executeQuery("insert into name (first,last) values('"+s1+"','"+s2+"')");
        stat.close();
        con.close();
    }
    catch(Exception e){
        System.out.println("e.fillInStackTrace:" + e.fillInStackTrace());
        System.out.println("e.getCause:" + e.getCause());
        System.out.println("e.getLocalizedMessage:" + e.getLocalizedMessage());
        System.out.println("e.getMessage.:" + e.getMessage());
        System.out.println("e.getStackTrace:" + e.getStackTrace());
        System.out.println("e.initCause:" + e.initCause());
        System.out.println("e.printStackTrace:" + e.printStackTrace());
        System.out.println("e.toString:" + e.toString());       
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...