Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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
在java中运行许多sqlLite语句_Java_Sql_Sqlite - Fatal编程技术网

在java中运行许多sqlLite语句

在java中运行许多sqlLite语句,java,sql,sqlite,Java,Sql,Sqlite,我正在用jdbc用java编程 我需要运行一个脚本,创建两个表,并在每个表中插入大约30条记录,但当我运行整个sql指令时,只执行第一个create语句,这就是我的代码 public Statement qry; //... set connection and others for sqlite3 qry.execute(strSql); //strSql contains the set of sql sentences 这些句子看起来像这样 CREATE TABLE "android_m

我正在用jdbc用java编程 我需要运行一个脚本,创建两个表,并在每个表中插入大约30条记录,但当我运行整个sql指令时,只执行第一个create语句,这就是我的代码

public Statement qry;
//... set connection and others for sqlite3
qry.execute(strSql); //strSql contains the set of sql sentences
这些句子看起来像这样

CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT "en_US");INSERT INTO android_metadata VALUES ("es_ES");CREATE TABLE "tblclientes" ("_id" INTEGER,"Nombres" varchar(25) DEFAULT NULL,"Apellidos" varchar(25) DEFAULT NULL,"RazSocial" varchar(20) DEFAULT NULL,"Direccion" varchar(50) DEFAULT NULL,"Ciudad" varchar(15) DEFAULT "Arequipa","Fono" varchar(12) DEFAULT NULL,"Fax" varchar(12) DEFAULT NULL,"Email" varchar(35) DEFAULT NULL,"Ruc" varchar(12) DEFAULT NULL,"latitud" decimal(20,14) DEFAULT NULL,"longitud" decimal(20,14) DEFAULT NULL,"ruta" varchar(10) DEFAULT NULL,"sincro" CHAR(10),"copiar" BOOL DEFAULT 1);INSERT INTO tblclientes VALUES (6, "Julia", "Lea Barrios", "", "Guillermo Mercado Mz-R Lte-22","Arequipa", "", "", "", "", "-16,34930944346466", "-71,56028982646531", "521", "", "1" ),(7, "Reyna ", "Mamani", "", "Villa Fontana Mz-18 Lte-1","Arequipa", "", "", "", "", "-16,37338828616529", "-71,49954834718501", "333", "", "1" ),(8, "Elizabeth", "Paco Toclla", "", "Villa Fontana Mz-7 Lte-7","Arequipa", "", "", "", "", "-16,37327397121976", "-71,49942636965591", "333", "", "1" ),(9, "Faustina ", "Mayhua", "", "Villa Paraiso Mz-B Cte-3 Lte-9","Arequipa", "", "", "", "", "0", "0", "0", "", "1" ),(10, "Marcelina", "Vilca", "", "Villa Cerrilos Mz-I Lte-1","Arequipa", "", "", "", "", "0", "0", "0", "", "1" ),(11, "Patricia", "Hinojosa Chirinos", "", "Villa Santa Maria Mz-B Lte-6","Arequipa", "", "", "", "", "-16,3233752620739", "-71,55582815082221", "544", "", "1" ),(12, "Lorenzo", "Mayta", "", "Urb. Nazareno Mz-C Lte-1 Zona B","Arequipa", "", "", "", "", "0", "0", "0", "", "1" ),(13, "Balbina ", "Sivincha", "", "Urb. Nazareno Mz-M Lte-20","Arequipa", "", "", "", "", "0", "0", "0", "", "1" ) ... and so on
我试图这样做,但100条记录需要很长时间,我想插入12000条记录

consulta = conexion.createStatement();
            consulta.addBatch("CREATE TABLE 'tblclientes' ('_id' INTEGER,'Nombres' varchar(25) DEFAULT NULL,'Apellidos' varchar(25) DEFAULT NULL,'RazSocial' varchar(20) DEFAULT NULL,'Direccion' varchar(50) DEFAULT NULL,'Ciudad' varchar(15) DEFAULT 'Arequipa','Fono' varchar(12) DEFAULT NULL,'Fax' varchar(12) DEFAULT NULL,'Email' varchar(35) DEFAULT NULL,'Ruc' varchar(12) DEFAULT NULL,'latitud' decimal(20,14) DEFAULT NULL,'longitud' decimal(20,14) DEFAULT NULL,'ruta' varchar(10) DEFAULT NULL,'sincro' CHAR(10),'copiar' BOOL DEFAULT 1)");
            consulta.addBatch("INSERT INTO tblclientes VALUES (6, 'Julia', 'Lea Barrios', '', 'Guillermo Mercado Mz-R Lte-22','Arequipa', '', '', '', '', '-16,34930944346466', '-71,56028982646531', '521', '', '1' )");
            consulta.addBatch("INSERT INTO tblclientes VALUES (6, 'Julia', 'Lea Barrios', '', 'Guillermo Mercado Mz-R Lte-22','Arequipa', '', '', '', '', '-16,34930944346466', '-71,56028982646531', '521', '', '1' )");

            consulta.executeBatch();
在Java中如何有效地执行此操作?

一些指针:

  • 在单个事务中使用所有语句

  • 编译语句
    插入tblclientes值(?,,,,,,,,,…)
    一次,对于每个数据行,只需绑定参数并执行

  • 这通常是使用SQL插入大型(以及更小)数据的最佳方法

    这会更快,因为(1)数据只写入存储器一次,而不是每插入一行;(2)insert语句只编译一次,而不是编译每个insert语句(只有数据在更改,操作相同)

    这更安全,因为字符串数据绑定为参数,所以无效字符不会打断语句,也不允许运行恶意内容

    看一看

    我不是Java程序员,但您的代码应该如下所示:

    Statement stmt = connection.createStatement();
    stmt.executeUpdate("CREATE TABLE tblclientes (_id INTEGER, Nombres TEXT, Apellidos TEXT, RazSocial TEXT, Direccion TEXT, Ciudad TEXT DEFAULT 'Arequipa', Fono TEXT, Fax TEXT, Email TEXT, Ruc TEXT, latitud FLOAT, longitud FLOAT, ruta TEXT, sincro TEXT, copiar INT DEFAULT 1)");
    PreparedStatement ins = connection.prepareStatement("INSERT INTO tblclientes VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
    connection.setAutoCommit(false);
    for(...i...) {
        ins.clearParameters();
        ins.setInt(1, id[i]); //1, 2, ...
        ins.setString(2, nombre[i]); //"Julia", ...
        ins.setString(3, apellidos[i]); //"Lea Barrios", ...
        ...
        ins.setDouble(11, latitud[i]); //-16,34930944346466, ...
        ins.setDouble(12, longitud[i]); //-71,56028982646531, ...
        ...
        ins.setInt(15, copiar[i]); //1, ...
        ins.execute();
    }
    connection.commit(); //All inserts are done now, at once!
    connection.setAutoCommit(true); //restore autocommit
    

    我认为您必须将命令分解为多个命令,并通过
    qry.execute()
    传递每个命令。您是否有包含这些语句的sql文件,并希望将其加载以供执行?请查看这里的通用方法(不是特定于SQLite的):是的,这是一个文件,但我在一个字符串变量中获得了整个内容,以便在java中运行,但不工作我最终解析了它脚本需要很长时间,但当我使用begin transaction和end transaction对整个脚本进行排序时,运行速度急剧增加