无法使用java

时间:2018-06-03 09:47:40

标签: java mysql database jdbc

我尝试使用java代码将数据插入到mysql数据库中。我在数据库中构建了一个用户表。用户表有4个字段:id,用户名,密码和地址。

mysql> desc user;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| username | varchar(32) | YES  |     | NULL    |                |
| password | varchar(64) | YES  |     | NULL    |                |
| address  | varchar(64) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

这是我的java代码。

    Connection conn = null;
    PreparedStatement stmt = null;
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC";
        String mysqlUserName = "root";
        String mysqlPassword = "123456";
        conn = DriverManager.getConnection(url, mysqlUserName, mysqlPassword);
        String sql = "INSERT INTO user(username,password,address) VALUES (?,?,?)";
        stmt = conn.prepareStatement(sql);
        stmt.setString(1,"11dsa1");
        stmt.setString(2,"111");
        stmt.setString(3,"111");
        stmt.close();
        conn.close();
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        try {
            if (conn!=null)
                conn.close();
        }catch (SQLException e){

        }
        try {
            if (stmt!=null)
                stmt.close();
        }catch (SQLException e){

        }
    }

未发生错误。 但我的数据库中没有数据。

mysql> select * from user; 
Empty set (0.01 sec)

但我可以通过shell插入数据。

mysql> insert into user(username,password,address) values ("aaa","aaa","aaa");
Query OK, 1 row affected (0.09 sec)

mysql> select * from user;
+----+----------+----------+---------+
| id | username | password | address |
+----+----------+----------+---------+
| 22 | aaa      | aaa      | aaa     |
+----+----------+----------+---------+
1 row in set (0.00 sec)

id为22而不是1!

实际上我之前已经运行过这个java代码21次。我的理解是这个java代码可以将数据插入到mysql中,但会立即从数据库中删除数据。 我真的无法理解这种荒谬的情况

3 个答案:

答案 0 :(得分:3)

你不忘记实际执行声明吗?

关闭之前,只需添加stmt.executeUpdate()即可

String sql = "INSERT INTO user(username,password,address) VALUES (?,?,?)";
stmt = conn.prepareStatement(sql);
stmt.setString(1,"11dsa1");
stmt.setString(2,"111");
stmt.setString(3,"111");
stmt.executeUpdate()

我还建议您在finally块中关闭准备好的语句,或者如果您使用java 7+,请查看如何使用try-with-resources here使用预准备语句。此外,如果您在finally块中关闭连接,为什么还要在尝试块中关闭它(最后一个命令)?这绝对是多余的。

通常,保持代码清洁可以让您更好地阅读它,从而更好地查看可能的问题。

答案 1 :(得分:2)

<强>解决方案:

ui->widget->SideBar::addAction( new QAction( QIcon(QString(":/icons/icon%1").arg(i)) , QString("Action %1").arg(i)) );添加此内容之前..

stmt.close()

它应该工作!!

<强>建议:

此外,如果您的Java版本高于6,那么您应该采用试用资源方法,以更智能的方式管理关键资源。 !!

答案 2 :(得分:0)

stmt.close();之前,添加此stmt.executeupdate();,因为您应该先更新表,然后再更新查询。