我是Riya B.Tech。学生和我必须做一个关于大学管理系统这个主题的corejava项目。我已经使用MS Access创建了所需的数据库。我在这里附加的代码中遇到问题。实际上,我想更新数据库中的数据,所以我在其中一个中制作了2帧。询问何时输入,然后第二个框架打开,并要求输入要更新的标记...当我输入要更新的标记时,将打开一个对话框,提示“标记已成功更新”。直到这里我没有任何问题..问题是当我打开数据库时,我发现实际上Marks没有在那里更新。所以请请有人帮助我解决这个问题。
代码如下:
第一帧
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
class MyFrame03 extends JFrame implements ActionListener {
JLabel l1;
JTextField t1;
JPanel p1, p2;
JButton b1;
Connection con;
PreparedStatement pst;
String s1;
MyFrame03() {
setLayout(new GridLayout(4, 1));
setTitle("Enter Data Required");
setBackground(Color.blue);
l1 = new JLabel("Roll no");
t1 = new JTextField(12);
p1 = new JPanel();
p2 = new JPanel();
b1 = new JButton("SUBMIT");
p1.add(l1);
p1.add(t1);
p2.add(b1);
add(p1, "Center");
add(p2, "South");
b1.addActionListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 500);
setVisible(true);
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("Jdbc:Odbc:dsn3");
if (con != null)
System.out.println("Connection Established");
}
catch (Exception e) {
System.out.println("exception");
}
}
public void actionPerformed(ActionEvent e1) {
if (e1.getSource() == b1) {
s1 = t1.getText();
try {
pst = con.prepareStatement("insert into stud values(?)");
pst.setString(1, s1);
pst.executeUpdate();
con.commit();
con.close();
}
catch (SQLException e) {
System.out.println("except1");
}
MyFrame04 m1 = new MyFrame04(s1);
dispose();
}
}
public static void main(String s[]) throws SQLException {
MyFrame03 m1 = new MyFrame03();
}
}
第二帧
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
class MyFrame04 extends JFrame implements ActionListener {
JLabel l1;
JTextField t1;
JPanel p1, p2;
JButton b1;
String s1, s2;
Connection con;
PreparedStatement pst;
public MyFrame04(String s1) {
this.s1 = s1;
setLayout(new GridLayout(4, 1));
setTitle("Update Marks");
setBackground(Color.blue);
l1 = new JLabel("Enter Marks");
t1 = new JTextField(12);
b1 = new JButton("SUBMIT");
p1 = new JPanel();
p2 = new JPanel();
p1.add(l1);
p1.add(t1);
p2.add(b1);
add(p1, "Center");
add(p2, "South");
b1.addActionListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 500);
setVisible(true);
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("Jdbc:Odbc:dsn3");
if (con != null)
System.out.println("Connection Established");
}
catch (Exception e) {
System.out.println("exception");
}
}
public void actionPerformed(ActionEvent e1) {
if (e1.getSource() == b1) {
s2 = t1.getText();
try {
pst = con.prepareStatement("UPDATE stud set Marks=? WHERE Roll no=?");
pst.setString(1, s2);
pst.setString(2, s1);
pst.executeUpdate();
con.commit();
con.close();
}
catch (SQLException e) {
System.out.println("except1");
}
JOptionPane.showMessageDialog(this, "Marks updated succesfully");
dispose();
}
}
}
谢谢
最佳答案
您的数据库访问代码是否可以在不使用Swing的情况下工作?看到这种情况的最简单方法是:
class HelloDatabase {
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("Jdbc:Odbc:dsn3");
if (con != null) {
int marks = 1, roll = 1; // or whatever (your data here)
System.out.println("Connection Established");
PreparedStatement pst = con.prepareStatement("UPDATE stud SET marks=? WHERE roll_num=?");
pst.setString(1, marks);
pst.setString(2, roll);
pst.executeUpdate();
con.commit();
con.close();
}
}
catch (Exception e) {
System.out.println("exception");
}
}
}
如果这能够处理并正确访问数据库,那么您很幸运。
顺便说一句-实际上这可能是您的问题-我注意到原始帖子中的SQL查询存在歧义:
UPDATE stud set Marks=? WHERE Roll no=?
据我所知,“没有”不会被识别为有效的SQL字段-这些应该是一个“单词”(例如“ roll”,“ roll_num”或什至“ RollNum”),但我不认为像“ Roll no”这样的名称就可以在这里使用。)