2013-09-27 53 views
1

在我的项目中,我使用了txtAdvance的关键事件。

第1行的列'advance'被截断MySql数据

double gtotal = Double.parseDouble(txtGtotal.getText()); 
    double ad = Double.parseDouble(txtAdvance.getText()); 
    double due = gtotal - ad; 
    txtDue.setText(String.valueOf(due)); 

和第三行的运行后,我添加了一个Save按钮保存这些数据。下面给出的是该查询。

public void saveInvoice(JTextField txtgtotal, JTextField txtAdvance, JTextField txtDue, JTextField txtInID) { 

    try { 
     db.putData("INSERT INTO indetails(inid, gtotal, advance, due) VALUES('" + txtInID.getText() + "' ,'" + txtgtotal.getText() + "' , '" + txtAdvance.getText() + " ' " + " , '" + txtDue.getText() + "') "); 
     JOptionPane.showMessageDialog(null, txtAdvance.getText()); 

     JOptionPane.showMessageDialog(null, "Invoice details saved"); 
    } 
    catch (Exception e) { 
     JOptionPane.showMessageDialog(null, this.getClass().getName() + " first " + e); 
    } 
} 

我在第1行为'advance'列截断了MySql数据。 advance的数据类型是Double。但我找不到一种方法来放长度。
(作为一个例子
列名:独立同分布,数据类型:int(18){主键}
列名:INID,数据类型:int(18)
列名:gtotal ,数据类型:双
列名:预先,数据类型:双
列名:由于,数据类型:双

我正在使用MySQL查询浏览器。问题是当我向txtAdvance添加0值时出现此错误。

+0

我正在使用JDBC连接。 – Dilini

+0

'putData'方法是什么?你为什么不使用'PreparedStatement'? – agad

+0

Your PreparedStatement应该看起来像这样:''INSERT INTO indetails(inid,gtotal,advance,due)VALUES(?,?,?,?)',你应该使用'setDouble(2,ad)'设置'advance'列。 – agad

回答

1

如果试图保存有小数点的数据,然后用长度改变数据类型为预先作为10,3其中表示的位数和表示小数位数。

使用此查询,

db.putData("INSERT INTO indetails(inid, gtotal, advance, due) VALUES(" + txtInID.getText() + "," + txtgtotal.getText() + "," + txtAdvance.getText() + "," + txtDue.getText()+")"); 
+0

@Dilini仅适用于所有**字符/ varchar/date/timestamp **数据类型我们必须使用**单引号**和**数字**我们不需要使用任何东西 – Ajeesh

+0

我接受它和我欠你很多,干杯! – Dilini

1

代替手工创建您的查询,你应该使用DB驱动程序即可:

的PreparedStatement putData = con.prepareStatement(“INSERT INTO indetails(INID ,gtotal,advance,due)VALUES(?,?,?,?)“);

double gtotal = Double.parseDouble(txtGtotal.getText()); 
double ad = Double.parseDouble(txtAdvance.getText()); 
double due = gtotal - ad; 

putData.setInt(1, inid); 
putData.setDouble(2, gtotal); 
putData.setDouble(3, ad); 
putData.setDouble(4, due); 

try { 
    putData.execute(); 
    JOptionPane.showMessageDialog(null, txtAdvance.getText()); 
    JOptionPane.showMessageDialog(null, "Invoice details saved"); 
} 
catch (Exception e) { 
    JOptionPane.showMessageDialog(null, this.getClass().getName() + " first " + e); 
} 
+0

@aged但putData.setInt(1,inid);不被识别为方法,它只是在工作db.putData(sql query);我应该怎么做? – Dilini

+1

在'putData'上面的代码是'java.sql.PreparedStatement'类型的变量,所以'p utData.setInt(1,inid);'必须工作。 – agad

+0

@aged它也在工作。很高兴有你们。 – Dilini

相关问题