Re: Help: Java database manipulation using NetBeans
On Sep 23, 1:08 am, "John B. Matthews" <nos...@nospam.invalid> wrote:
In article
<1fa3c029-0399-4ca6-b8ad-d0ff915f3...@a3g2000prm.googlegroups.com>,
tobleron <bud...@yahoo.com> wrote:
I fix[ed] the classpath, and it seems [to be] OK for the DB
connection.
Excellent.
But when the data [is] sent to the DB, [NetBeans] respond[s] with this
error message:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for
column 'terminalid' at row 1
The "terminalid" was varchar(10), and the data to be written [is]
"ECG-2", which is less than 10 character. Why [does it show the] error
message "data too long"?
Either terminalid isn't varchar(10) or the inserted string is longer
than you think. I can reproduce your error with the following table:
mysql> show columns from tobleron;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| terminalid | varchar(10) | YES | | NULL | =
|
+------------+-------------+------+-----+---------+-------+
and the following SQL statement:
"insert into tobleron(terminalid) values ('ECG-2.12345')"
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for
column 'terminalid' at row 1
Of course, it works correctly for the value 'ECG-2'. If this isn't
helpful, we need to see your table definition and SQl statement.
--
John B. Matthews
trashgod at gmail dot com
home dot woh dot rr dot com slash jbmatthews
Thank you for correcting my poor english :)
Yes, it works if I used "Execute commands..." menu in the "services"
window. But if I used script in my code, it doesn't work. It still
shows "com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too
long for column 'terminalid' at row 1" even i just used "ECG-2" for
the terminalid's data. In other side, there is a set of data already
fits the row 1. The next data should be occupies row 2, right ? But
still showed "Data too long for column 'terminalid' at row 1" even it
is already occupied. Here is my code :
package ecgterminal;
import org.jdesktop.application.Action;
import java.sql.*;
public class ECGTerminalSetup extends javax.swing.JDialog {
public ECGTerminalSetup(java.awt.Frame parent) {
super(parent);
initComponents();
getRootPane().setDefaultButton(closeButton);
}
@Action public void closeAboutBox() {
setVisible(false);
}
@Action public void setup() {
String url = "jdbc:mysql://localhost:3306/dicom";
Connection con;
Statement stmt;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch(java.lang.ClassNotFoundException e) {
System.err.println(e);
}
try {
con = DriverManager.getConnection(url, "dicom", "");
stmt = con.createStatement();
String sql = "INSERT INTO ecgterminal
(terminalid,terminalname,insname,insaddr1,insaddr2) VALUES ('"+
terminalIdTxt +"','"+ terminalNameTxt +"','"+ insNameTxt +"','"+
insAddr1Txt +"','"+ insAddr2Txt +"')";
stmt.execute(sql);
/*while (rs.next()) {
String s1 = rs.getString(1);
String s2 = rs.getString(2);
System.out.println(s1 + "@" + s2);
}*/
stmt.close();
con.close();
} catch(SQLException e) {
System.err.println(e);
}
}
private javax.swing.JButton closeButton;
private javax.swing.JTextField insAddr1Txt;
private javax.swing.JTextField insAddr2Txt;
private javax.swing.JTextField insNameTxt;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JButton submitButton;
private javax.swing.JTextField terminalIdTxt;
private javax.swing.JTextField terminalNameTxt;
// End of variables declaration
}
The table structure is :
name : ecgterminal
a4identity : int, auto increment, no null, key --> this is for
identity only
terminalid : varchar(10), no null, key
terminalname : varchar(10), no null
insname : varchar(30), no null
insaddr1 : varchar(30), no null
insaddr2 : varchar(30), no null