Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaJDBC只在MySQL表中插入空值_Java_Mysql_Jdbc - Fatal编程技术网

JavaJDBC只在MySQL表中插入空值

JavaJDBC只在MySQL表中插入空值,java,mysql,jdbc,Java,Mysql,Jdbc,我试图通过Java中的JDBC连接将数据插入MySQL表。我可以建立联系。但是,我的代码只为我的所有列插入空值。我在准备好的语句中使用虚拟数据,希望看到非空值 对可能发生的事情有什么想法或指导吗?我是JBDC和Java新手 以下是我创建表格的方式: drop table market_data.abc; create table market_data.abc( `v` int, `w` int ) ; 以下是创建连接的方法: public static Connection

我试图通过Java中的JDBC连接将数据插入MySQL表。我可以建立联系。但是,我的代码只为我的所有列插入空值。我在准备好的语句中使用虚拟数据,希望看到非空值

对可能发生的事情有什么想法或指导吗?我是JBDC和Java新手

以下是我创建表格的方式:

    drop table market_data.abc;
create table market_data.abc(
`v` int,
`w` int
)
;
以下是创建连接的方法:

    public static Connection ConnectToDB() throws Exception {

        // register driver
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());

        // create database url
        mysqlUrl = "jdbc:mysql://localhost:3306/" + databaseName + "?characterEncoding=" + encoding
                + "&&useUnicode=" + unicode; 

        // create connection
        Connection con = DriverManager.getConnection(mysqlUrl, userName, password);

        // print connection status message
        System.out.println("Connection established......");

        // return database connection
        return con;
    }
这里是我插入数据的地方:

void insertRecords() {
        try {

            // Establish Connection
            Connection con = cc.ConnectToDB();

            // Set the query structure
            String insertString = "INSERT INTO abc values (" + "v=?,w=?)";

            // Set prepared statement
            PreparedStatement statement = con.prepareStatement(insertString);

            // set values to variables
            int v1 = 2;
            int w1 = 3;

            // set values to statement
            statement.setInt(1, v1);
            statement.setInt(2, w1);

            // execute the insert operation; 
            statement.executeUpdate();

            // print status message for record insertion
            System.out.println("New Records inserted.....");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
以下是我在CLI中执行Select*时看到的内容:


 v    | w    |
+------+------+
| NULL | NULL |
| NULL | NULL |
+------+------+
以下是我的MySQL字符集变量:

show variables like 'char%';
+--------------------------+-----------------------------------------------------------+
| Variable_name            | Value                                                     |
+--------------------------+-----------------------------------------------------------+
| character_set_client     | utf8mb4                                                   |
| character_set_connection | utf8mb4                                                   |
| character_set_database   | utf8mb4                                                   |
| character_set_filesystem | binary                                                    |
| character_set_results    | utf8mb4                                                   |
| character_set_server     | utf8mb4                                                   |
| character_set_system     | utf8                                                      |
| character_sets_dir       | /usr/local/mysql-8.0.20-macos10.15-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+


尝试用此值替换insertString值

String insertString = "INSERT INTO abc values (v=?,w=?)";
注意INSERT语句有两种写入类型

第一类是:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...); 
第二个是:

INSERT INTO table_name
VALUES (value1, value2, value3, ...);

您可以访问此链接以检查插入类型之间的差异,感谢您的参考。因为表格很简单,所以我用了第二张。我还按照建议更新了insertString,但没有运气。我不是100%——如果我遇到错误,它至少会被异常捕获,对吗?为了安全起见,我用e.getMessage()将SQLException添加到catch子句中;但是运气不好。啊,我明白了。我用println包装了e.getMessage()。谢谢你向我解释这一区别。另外,我在执行这段代码时没有遇到错误。我相信这是有道理的——行被插入到我的表中(因此没有格式错误的SQL或Java语法错误)。只是插入的行包含空值,而不是预期的数据值。此处显示的
insertString
与OP相同,只是没有连接,并且两者都不正确。SQL语法不正确,应该引发异常。它应该
插入abc(v,w)值(?,)
。使调整生效。奇怪的是没有抛出SQL异常。感谢您的帮助。您正在将equals谓词的结果插入列
v
和参数之间。在求值时,
v
求值为
null
,因此等于的结果也是
null