Java 将jtextbox值和jradiobutton值插入数据库

Java 将jtextbox值和jradiobutton值插入数据库,java,sql-server,jdbc,Java,Sql Server,Jdbc,我试图将文本框中的值插入数据库,但出现错误com.microsoft.sqlserver.jdbc.SQLServerException:字符串或二进制数据将被截断。我原以为问题出在单选按钮上,但当我试图在数据库中插入值并从查询中删除单选按钮和性别时,我得到了相同的错误 我尝试插入值Name:a、Username:a、Contact:a、单选按钮[male],但仍然收到相同的错误。 我无法找出我是如何得到这个错误的 create table temp ( id int IDENTITY(1,

我试图将文本框中的值插入数据库,但出现错误
com.microsoft.sqlserver.jdbc.SQLServerException:字符串或二进制数据将被截断
。我原以为问题出在单选按钮上,但当我试图在数据库中插入值并从查询中删除单选按钮和性别时,我得到了相同的错误

我尝试插入值
Name:a、Username:a、Contact:a、单选按钮[male]
,但仍然收到相同的错误。 我无法找出我是如何得到这个错误的

create table temp (
  id int IDENTITY(1,1) PRIMARY KEY,
  name varchar(32) not null,
  username varchar(32) not null,  
  contact varchar(32) not null,
  gender int
);

btnSubmit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                try
                {
                    int gender = 0;
                    Connection sqlCon = DB_con.getSQLConnection();
                    PreparedStatement ps = sqlCon.prepareStatement(
                            "insert into temp (name, username, contact, gender) values ( ?, ?, ?, ?)"
                            );
                    ps.setString(1, txtName.toString());
                    ps.setString(2, txtUserName.toString());
                    ps.setString(3, txtContact.toString());

                    gender = (rbtnMale.isSelected()) ? 1 :2;
                    System.out.println("value of gender " + gender );
                    ps.setInt(4, gender);
                    int i = ps.executeUpdate();
                    System.out.println("records inserted: "+i);
                    sqlCon.close();
                }
                catch(Exception e)
                {
                    System.out.println(e.toString());
                }
            }
        });

很可能其中一个:

  • txtName.toString()
  • txtUserName.toString()文件
  • txtContact.toString()
…长于32个字符。为什么不在插入之前将它们记录在某个地方,以便查看


不清楚这些对象是来自代码片段的什么类。它们是否可能是JTextField的默认toString()方法实现?如果是这样,请使用。

可能是以下其中一种:

  • txtName.toString()
  • txtUserName.toString()文件
  • txtContact.toString()
…长于32个字符。为什么不在插入之前将它们记录在某个地方,以便查看

不清楚这些对象是来自代码片段的什么类。它们是否可能是JTextField的默认toString()方法实现?如果是,请使用。

更改

ps.setString(1, txtName.toString());
ps.setString(2, txtUserName.toString());
ps.setString(3, txtContact.toString());

toString
正在对控件进行调试转储,其长度肯定超过了
32个
字符,并且不表示输入到字段中的文本(或者至少不是您想要的格式;)

更改

ps.setString(1, txtName.toString());
ps.setString(2, txtUserName.toString());
ps.setString(3, txtContact.toString());


toString
正在对控件进行调试转储,其长度肯定超过了
32个
字符,并且不表示输入到字段中的文本(或者至少不是您想要的格式;)

听起来您的一个或多个值超过了32个characters@MadProgrammer我已经编辑了我的帖子。请查看。听起来您的一个或多个值超过了32characters@MadProgrammer我已经编辑了我的帖子。请看,非常感谢。正如您所说,我将toString()更改为getText()。它解决了我的问题。非常感谢。正如您所说,我将toString()更改为getText()。它解决了我的问题。