不可以
就类似 你一次执行30条insert语句 然后有一条执行错了 你想回滚 只回滚那一条么?
批量插入只能要么全部成功要么全部失败 在一个事务里面
可以考虑再写一个单独插入的方法 这样批量catch到异常 就转到单个插入里面去跑
选择开始菜单中→程序→Management SQL Server 2008→SQL Server Management Studio命令,打开SQL Server Management Studio窗口,并使用Windows或 SQL Server身份验证建立连接。
在对象资源管理器窗口中展开服务器,然后选择数据库节点
右键单击数据库节点,从d出来的快捷菜单中选择新建数据库命令。
执行上述 *** 作后,会d出新建数据库对话框。在对话框、左侧有3个选项,分别是常规、选项和文件组。完成这三个选项中的设置会后,就完成了数据库的创建工作,
在数据库名称文本框中输入要新建数据库的名称。例如,这里以“新建的数据库”。
在所有者文本框中输入新建数据库的所有者,如sa。根据数据库的使用情况,选择启用或者禁用使用全文索引复选框。
在数据库文件列表中包括两行,一行是数据库文件,而另一行是日记文件。通过单击下面的添加、删除按钮添加或删除数据库文件。
切换到选项页、在这里可以设置数据库的排序规则、恢复模式、兼容级别和其他属性。
切换到文件组页,在这里可以添加或删除文件组。
完成以上 *** 作后,单击确定按钮关闭新建数据库对话框。至此“新建的数据”数据库创建成功。新建的数据库可以再对象资源管理器窗口看到。
如果成批地处理插入和更新 *** 作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制,可以以如下所示的方式调用setExecuteBatch():
PreparedStatement pstmt3D null;
try {
((OraclePreparedStatement)
pstmt)setExecuteBatch(30);
一、 通过SqlRowSetMetaData类
使用到的类或接口有如下几个:
orgspringframeworkjdbcsupportrowsetSqlRowSet接口:该对象和javaxsqlRowSet类相对应,它和RowSet的区别是SqlRowSet中的方法从来不会抛出SQLException异常,通过jdbcTemplate可以获得该对象的实例;
orgspringframeworkjdbcsupportrowsetSqlRowSetMetaData接口:是对应于SqlRowSet的元数据接口,和javasqlResultSetMetaData相一致,也只是从来不会抛出SQLException异常,通过SqlRowSet可以获得该类的实例;
具体使用实例如下:
SqlRowSet rowSet = jdbcTemplatequeryForRowSet("select from user limit 0");SqlRowSetMetaData metaData = rowSetgetMetaData();
int columnCount = metaDatagetColumnCount();
for (int i = 1; i <= columnCount; i++) {
Map<String,String> fieldMap = new HashMap<String,String>();
fieldMapput("ColumnName", metaDatagetColumnName(i));
fieldMapput("ColumnType", StringvalueOf(metaDatagetColumnType(i)));
fieldMapput("ColumnTypeName", metaDatagetColumnTypeName(i));
fieldMapput("CatalogName", metaDatagetCatalogName(i));
fieldMapput("ColumnClassName", metaDatagetColumnClassName(i));
fieldMapput("ColumnLabel", metaDatagetColumnLabel(i));
fieldMapput("Precision", StringvalueOf(metaDatagetPrecision(i)));
fieldMapput("Scale", StringvalueOf(metaDatagetScale(i)));
fieldMapput("SchemaName", metaDatagetSchemaName(i));
fieldMapput("TableName", metaDatagetTableName(i));
fieldMapput("SchemaName", metaDatagetSchemaName(i));
Systemoutprintln(fieldMap);
}
上述所用的信息都应列出来了,发现只有一些简单的信息,并没有涉及索引和其他约束等的信息。
二、通过RowCountCallbackHandler类
使用到的类或接口有如下几个:
orgspringframeworkjdbccoreRowCallbackHandler接口:用于处理结果集中的每一行数据;
orgspringframeworkjdbccoreRowCountCallbackHandler类:实现了RowCallbackHandler接口,其中简单的实现了对结果集元数据的获取,包括行数、列数、列名、列的类型等信息,顺便说一下这个类的实例只可以用一次;
在源代码中给出了简单的使用方式,如下:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); // reusable object
RowCountCallbackHandler countCallback = new RowCountCallbackHandler(); // not reusable
jdbcTemplatequery("select from user", countCallback);
int rowCount = countCallbackgetRowCount();
所有能获得的信息如下:
String sql = "select from user";RowCountCallbackHandler rcch = new RowCountCallbackHandler();
jdbcTemplatequery(sql, rcch);
Systemoutprintln("column count :" + rcchgetColumnCount());
Systemoutprintln("column count :" + rcchgetRowCount());
for(int i=0; i<rcchgetColumnCount(); i++){
Systemoutprintln("column name :" + rcchgetColumnNames()[i]);
Systemoutprintln("column type :" + rcchgetColumnTypes()[i]);
}
输出如下:
从输出可以看出有一个问题,列的类型只能用数字来标识,这与javasqlTypes相对应,我们可以通过一下的程序来获得字符串的形式:
String getTypeName(int type) throws SQLException {
switch (type) {
case TypesARRAY:
break;
case TypesBIGINT:
return "BIGINT";
case TypesBINARY:
return "BINARY";
case TypesBIT:
return "BIT";
case TypesBLOB:
return "BLOB";
case TypesBOOLEAN:
return "BOOLEAN";
//
}
由以上可知,该类的方法有限,也只能获得列名和列的类型的信息,关于索引和约束等也没有涉及
去网上找个mysql驱动jar包,不同的数据库只需要改加载驱动和得到连接的参数就可以了,具体参数去网上搜下,额对,还需要找对应的jar包
import javasql;
public class Test1{
public static void main(String args[])throws Exception{
//测试mysql数据库
//1加载驱动
ClassforName("commysqljdbcDriver");
//2得到一个连接
Connection con=DriverManagergetConnection("jdbc:mysql://192168124:3306/etoak","root","root");
//jdbc:mysql mysql数据库协议
//localhost:连接的主机名称,3306 mysql数据库端口号
//etoak 数据库名称
//3封装sql语句
String insert="insert into student value(6,'ek','ek')";
//4得到一个执行sql语句的对象
Statement sta=concreateStatement();
//5执行sql语句
staexecute(insert);
//6关闭流
staclose();
conclose();
}
}
json是一个String,格式是[{},{},{}]。你可以用String的方法来获取值。首先,按照逗号把json数组划分为String数组。转化后是[{},{},{}] 再按照逗号把字段值取出为String数组。例子如下:
[{id:"1",name:"xyz"},{id:"2",name:"abc"}]String [] 数组1 = {id:"1",name:"xyz"}+{id:"2",name:"abc"}
String [] id1 = {"1","xyz"}
String [] id2 = {"2","abc"}
以上就是关于【jdbcTemplate】批量插入异常捕获全部的内容,包括:【jdbcTemplate】批量插入异常捕获、spring JdbcTemplate批量插入 怎么获得数据库自动增长的id、如何使用JDBC PreparedStatement对象批量处理更新和插入Oracle数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)