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);
}
}
}
答えて
スタックトレースがないと、わかりにくいです。接続が確立されていないか、SQLの値によってクエリにエラーが発生しています(おそらく一方または両方がnullです)。私はconにブレークポイントを設定し、オブジェクトがnullであるかどうかを確認することをお勧めします。また、s1とs2が何であるかも見てください。以下、2行追加しました。ステートメントと接続を閉じる必要があります。
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());
}
}
stat.executeUpdateによるstat.executeQueryの置き換えは、例外の問題を解決します。データベーステーブルの新しいエントリも作成されますが、「最初」と「最後」のフィールドには何も表示されません。 –
"first"と "last"フィールドと言うとき、挿入が完了した後にデータベースにクエリをしていますか?次のように:SELECT * FROM [name] ??? – MacGyver
ユーザ(root)はINSERTコマンドを実行するための適切な権限を持っていますか?私はそう思っています。それは根源だからですが、確かにしたいと思っていました。これらのフィールドのSQLデータ型は、Javaコードから送信するデータと一貫していますか? – MacGyver
私は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();
それはほとんどの人がテーブル名を作成するような方法であるので、私は、テーブル名とカラム名を大文字化の自由を取りました。
編集:そのコードが実行されると、ユーザはまだテキストフィールドに任意のデータを入力する機会がなかったので、
s1=f.getText();
s2=f1.getText();
テキストフィールドに値が含まれていません。これら2つのステートメントをactionPerformed()メソッドに移動する必要があります。
stat.executeUpdateによるstat.executeQueryの置き換えは、例外の問題を解決します。データベーステーブルの新しいエントリも作成されますが、「最初」と「最後」のフィールドには何も表示されません。 –
@Apurvaの場合、変数s1とs2に実際に値が含まれていることを確認してください。私の編集を参照してください。 – camickr
例外からスタックトレースを取得すると、これをデバッグするのに役立ちます。 –
情報が不十分です - スタックトレースを投稿してください。そのメッセージを印刷しないでください - 利用可能な情報より少ない情報です。 – duffymo
stat.executeUpdateでstat.executeQueryを置き換えると、例外の問題が解決されます。データベーステーブルの新しいエントリも作成されますが、「最初」と「最後」のフィールドには何も表示されません。 –