问题描述
- 下面的Java代码有问题吗
-
public class Regist extends JFrame implements ActionListener {/** * */ private static final long serialVersionUID = 1L; private JPanel contentPane; private JTextField text_confirm; private JTextField text_usr; private JTextField text_pwd; private JButton btn_save,btn_cancel; private JLabel user,passwd,confirm; private Connection conn; private Statement statement; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Regist frame = new Regist(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Regist() { super("注册新用户"); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); user = new JLabel("用 户 名"); user.setBounds(57, 36, 54, 15); contentPane.add(user); passwd = new JLabel("密 码"); passwd.setBounds(57, 76, 54, 15); contentPane.add(passwd); confirm = new JLabel("确认密码"); confirm.setBounds(57, 121, 54, 15); contentPane.add(confirm); text_usr = new JTextField(); text_usr.setBounds(141, 33, 155, 21); contentPane.add(text_usr); text_usr.setColumns(10); text_pwd = new JTextField(); text_pwd.setBounds(141, 73, 155, 21); contentPane.add(text_pwd); text_pwd.setColumns(10); text_confirm = new JTextField(); text_confirm.setBounds(141, 118, 155, 21); contentPane.add(text_confirm); text_confirm.setColumns(10); btn_save = new JButton("确定"); btn_save.setBounds(79, 171, 93, 23); contentPane.add(btn_save); this.btn_save.addActionListener(this); btn_cancel = new JButton("取消"); btn_cancel.setBounds(256, 171, 93, 23); contentPane.add(btn_cancel); this.btn_cancel.addActionListener(this); } public Connection getConnection() throws SQLException { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sign","root","514519"); return conn; } @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==btn_save){ if(text_usr.getText().isEmpty()&&text_pwd.getText().isEmpty()) JOptionPane.showMessageDialog(this, "请填写用户名和密码"); String sql="insert into signs values ('"+text_usr.getText()+","+text_pwd.getText()+"')"; try { conn=getConnection(); } catch (SQLException e1) { e1.printStackTrace(); } try { statement=conn.createStatement(); } catch (SQLException e1) { e1.printStackTrace(); } try { statement.executeUpdate(sql); } catch (SQLException e1) { e1.printStackTrace(); } try { statement.close(); } catch (SQLException e2) { e2.printStackTrace(); } try { conn.close(); } catch (SQLException e1) { e1.printStackTrace(); } } if(e.getSource()==btn_cancel){ } }
}
运行的时候说Column count doesn't match value count at row 1
我数据库中的user 和password都是varchar类型
还有就是这行代码中的引号问题 String sql="insert into signs values ('"+text_usr.getText()+","+text_pwd.getText()+"')"; 新手有点迷糊 求帮助
解决方案
你可以打印下你的sql,就能发现你输出的sql语句的引号是不全的,例如我都输入a后,打印的sql:insert into signs values ('a,a')
代码问题,大意导致的引号不全,修正如下:
String sql = "insert into signs values ('" + text_usr.getText() + "','" + text_pwd.getText() + "')";
再试试,就能打印出正确的sql了。
解决方案二:
String sql="insert into signs values ('"+text_usr.getText()+","+text_pwd.getText()+"')";你仔细看一下,你没有存对数据类型,需要的数据长这样:values('something','otherthing'),但是你没有都用单引号括起来。就这样。
时间: 2024-08-02 19:12:19