我正在开发一个swing项目,我有一个JDialogbox,其中包含两个textfield和1个组合框,两个按钮“ok”和“cancel”以及一个框架,其文本区域就像记事本和所有这些组件每当我在JDialog中插入数据并单击Ok时数据就连接到Oracle数据库,数据存储在数据库中,并且调用包含文本区域的框架,当我保存用textarea写入的数据并单击保存按钮时,插入的数据将保存在数据库中的不同行但与JDialog组件不在同一行
import javax.swing.*;
import java.sql.*;
import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.awt.event.*;
import java.awt.*;
import java.io.File;
import java.io.PrintWriter;
import java.util.Scanner;
public class newmenu implements ActionListener {
JDialog jf;
JButton okBtn,CanBtn;
JTextField tf1,tf3;
JComboBox type;
JLabel prName,prType,prWritter;
JFrame frame;
JMenuBar menuBar;
JMenu file;
JMenuItem open, save, exit;
JFileChooser fileChooser;
JTextArea textArea;
public newmenu(){
jf = new JDialog();
jf.setTitle("New Report");
okBtn = new JButton("Ok");
okBtn.setBounds(10, 140, 60, 20);
okBtn.addActionListener(this);
CanBtn = new JButton("Cancel");
CanBtn.addActionListener(this);
CanBtn.setBounds(100, 140, 100, 20);
tf1 = new JTextField();
tf1.setBounds(150, 20, 100, 20);
String r_Type [] = {"Cosmetics","Pharametical","Medical"};
type = new JComboBox(r_Type);
type.setBounds(150, 60, 100, 20);
tf3 = new JTextField();
tf3.setBounds(150, 100, 100, 20);
prName = new JLabel("Report Name");
prName.setBounds(10, 20, 100, 20);
prType = new JLabel("Report type");
prType.setBounds(10,60,100,20);
prWritter = new JLabel("Report Written");
prWritter.setBounds(10,100,100,20);
jf.add(okBtn);
jf.add(CanBtn);
jf.add(tf1);
jf.add(type);
jf.add(tf3);
jf.add(prName);
jf.add(prType);
jf.add(prWritter);
jf.setSize(300, 200);
jf.setResizable(false);
jf.setLayout(null);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setVisible(true);
}
public void notepad(){
frame = new JFrame();
frame.setTitle("Notepad");
file = new JMenu("File");
save = new JMenuItem("Save");
save.addActionListener(this);
exit = new JMenuItem("Exit");
exit.addActionListener(this);
textArea = new JTextArea();
fileChooser = new JFileChooser();
menuBar = new JMenuBar();
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(textArea);
file.add(save);
file.add(exit);
menuBar.add(file);
frame.setJMenuBar(menuBar);
frame.setSize(800, 600);
frame.setVisible(true);
}
public void insert(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection con = DriverManager
.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","root");
Statement st = con.createStatement();
st.executeUpdate("insert into report (reportname, reporttype,clientname) VALUES('"
+ tf1.getText() + "','"
+ tf3.getText() + "','" + type.getSelectedItem()+ "')");
}
catch (Exception e1)
{
System.out.println("Exception:" + e1);
}
}
public void notepadinsert(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection con = DriverManager
.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","root");
Statement st = con.createStatement();
st.executeUpdate("insert into report (report) VALUES('"
+ textArea.getText() + "')");
}
catch (Exception e1)
{
System.out.println("Exception:" + e1);
}
}
public void actionPerformed(ActionEvent ev){
if(ev.getSource()==okBtn){
if( tf1.getText().trim().equals("")){
okBtn.setEnabled(false);
if(tf1.getText().hashCode() != 0){
okBtn.setEnabled(true);
}
}
else{
okBtn.setEnabled(true);
jf.dispose();
insert();
notepad();
}
}
else if(ev.getSource()==CanBtn){
System.exit(0);
}
else if(ev.getSource()==save){
notepadinsert();
}
else if(ev.getSource()==exit){
System.exit(0);
}
}
public static void main(String args[]){
new newmenu();
}
}
答案 0 :(得分:1)
使用标记来检查它是否是第一个请求。
private int flag=0;
...
insert(){
...
if(flag==0){
//insert command
flag=1;
}
else
{
//update here.
}
}
<强>更新强> 更好的方法是检查当前用户是否已完成更新。您必须创建一个字段(如user_name),因为我在插入查询中看不到。
insert(){
...
//search for the current record with user_name in DB
if(!found){
//insert command
}
else
{
//update here.
}
}
答案 1 :(得分:0)
像这样切换你的代码......在insert()
方法中,你现在要存储数据......将数据一次性存储在数据库中...我添加了System.out.println();
因为我无法创建一个oracle数据库,这只是检查我是否获得所需数据的唯一方法......
您只需编写用于在insert方法中插入DataBase的代码,并传递我用于打印值的字符串数组中的值...
public void insert(String[] Str){ // Write your code for insertion
// of values in database
System.out.println(Str[0]);
System.out.println(Str[1]); // I just used these to check
System.out.println(Str[2]); // If i am getting correct values
System.out.println(Str[3]);
}
@Override
public void actionPerformed(ActionEvent ev){
String[] Data_To_Insert = new String[4];
if(ev.getSource()==okBtn){
if( tf1.getText().trim().equals("")){
okBtn.setEnabled(false);
if(tf1.getText().hashCode() != 0){
okBtn.setEnabled(true);
}
}
else{
okBtn.setEnabled(true);
jf.dispose();
notepad();
}
}
else if(ev.getSource()==CanBtn){
System.exit(0);
}
else if(ev.getSource()==save){
Data_To_Insert[0] = tf1.getText();
Data_To_Insert[1] = tf3.getText();
Data_To_Insert[2] = type.getSelectedItem().toString();
Data_To_Insert[3] = textArea.getText();
insert(Data_To_Insert);
}
else if(ev.getSource()==exit){
System.exit(0);
}
}
还记得你必须创建4列来存储数据......
希望它有所帮助...