在 mysql 中插入批量数据,并在 java netbeans 中对 textarea 进行查询

Inserting batch data in mysql with queries on textarea in java netbeans

我想制作一个连接到 mysql 数据库的程序,在我的程序中,查询是动态的,用户将在文本区域中输入他的查询,然后在按下按钮后程序将执行查询和 returns/displays 执行消耗的时间。我在 select 查询上没有问题,但在插入批处理数据时遇到问题。这是我想要发生的事情的一个例子:

//this is the queries from the text area, this was taken from a dump MySQL file.


INSERT INTO `blank` VALUES ('11015', 'Mark', 'Caguia', 'C', '1/1/92', 'Philippines', '091083913121');
INSERT INTO `blank` VALUES ('11016', 'James', 'CaguiaYap', 'C', '1/1/92', 'Philippines', '091083913121');
INSERT INTO `blank` VALUES ('11017', 'Arwin', 'Santos', 'C', '1/1/92', 'Philippines', '091083913121');
INSERT INTO `blank` VALUES ('11018', 'Chris', 'Lutz', 'C', '1/1/92', 'Philippines', '091083913121');
INSERT INTO `blank` VALUES ('11019', 'Marcio', 'Laseter', 'C', '1/1/92', 'Philippines', '091083913121');
INSERT INTO `blank` VALUES ('11021', 'C.J.', 'Miles', 'C.', '1/26/2015 12:00:00 AM', 'USA', '0986531251');

// I have a couple of insert queries.

现在这是我执行查询的代码。

 private void btnQueryManipulateActionPerformed(java.awt.event.ActionEvent evt) {                                                   

       {

//txtQueryStr is the name of my textarea.

strQuery = txtQueryStr.getText();
    try{

        Class.forName("com.mysql.jdbc.Driver");
        con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/billing","root","");
        st = con.createStatement();
        String query = strQuery;
        pst =con.prepareStatement(query);
        pst.execute();
        tblCustomQuery.setModel(DbUtils.resultSetToTableModel(rs));

        }
    catch(Exception ex)
    {
        JOptionPane.showMessageDialog(null, ex,"SQL Error",JOptionPane.ERROR_MESSAGE);
    }

它只能插入一个数据但是当我尝试上面的查询时它 returns 一个错误说我的 sql 语法有错误,并且错误点在第二个插入查询行。

我不知道如何解决这个问题,我已经通过互联网搜索了所有内容,但一无所获。如果有人能提供帮助,我将不胜感激。 顺便说一句,我的 table 名字是空白的,它有字段:

Customer_ID, fname,lname,mname,birthdate,address,mobile.

要运行 多个查询,您需要多次调用JDBC 执行操作。您不能使用单个 PreparedStatement 准备多个查询。如下操作:

// Split the queries into multiple strings
Sting[] queries = txtQueryStr.getText().split(";");

try {
    Class.forName("com.mysql.jdbc.Driver");
    con = (Connection) DriverManager.getConnection(
                       "jdbc:mysql://localhost:3306/billing","root","");
    st = con.createStatement();

    // execute each query in a loop
    for (String query : queries) {
        st.executeUpdate(query.trim());
    }
}
catch(Exception ex)
{
    JOptionPane.showMessageDialog(null, ex,"SQL Error",JOptionPane.ERROR_MESSAGE);
}
finally
{
    try {
        if (st != null) st.close();
        if (con != null) con.close();
    } catch(Exception e) {}
}

其实上面的代码并不是真正意义上的批处理。它只是在一个循环中执行多个 statements,即一个接一个但连续地进行 inserts。要实际准备并执行批处理,以便只访问数据库一次,请使用 addBatch()executeBatch().

for (String query : queries) {
    st.addBatch(query.trim());
}
int[] updateCounts = st.executeBatch();

返回的 int[] 数组将包含每个批处理语句影响的行数。

为了节省每行插入数据库的时间,看看我的postHow to obtain a timestamp in Java and store in a database?。我在那里概述了两种方法:在数据库端生成 timestamp,或者从 Java.

传递它