在 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.
传递它
我想制作一个连接到 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.
传递它