使用原生JDBC对数据记录进行批量插入

(一)JDBC的基本概念:

关于JDBC大家应该有很熟悉,JDBC(Java DataBase Connectivity,java数据库连接),用于执行SQL语句的java API ,可以为多种关系数据库提供统一访问。

JDBC的简单使用

JDBC可以做三件事,第一件事情就是与数据库建立连接,第二件事情就是发送操作数据库的SQL语句,第三件事情就是处理所得到的结果集。下面以常见的postgresql数据库来进行示例:
(一)对于使用JDBC操作Postgresql数据库:
Class.forName(“org.postgresql.Driver”);//加载数据库驱动
Connection coon = DriverManager.getConnection(“jdbc:postgresql://localhost:5432/data”, “username”, “password”);//建立连接,第一个参数表示获取连接数据库的url形式,PG数据库的默认端口号是5432,第二个参数是表示该数据库的用户名,第三个参数表示该用户的密码。
Statement statement = coon.createStatement();//返回一个用于执行静态SQL语句的对象并且返回它处理的结果(即执行语句之后的结果)
ResultSet rSet = statement
.executeQuery(“select objectid from public.data where name isnull order by objectid”);//执行语句并返回结果集。
(三)取出结果集中的结果:
while(rset.next()){
//这里面就是一些针对自己的实际需求进行书写自己的业务逻辑
}
其中,next方法中有一个指针用来维护当前行,最初的时候,这个指针指向结果集中第一行记录之前,可以想一下,我们所得到的这个结果集是从数据库中获取的,数据库中的记录是用表格的形式呈现的,所以我们得到的这个结果集也相对于得到的是拥有N条记录的一个表格,不管你是单纯得到一个字段的记录也好,得到当前表中的所有字段记录也好。所以,我们在读取这个结果集的时候,其ResultSet类中提供了两种读取的方法:一种是以一个int值作为列的索引,另一种是以一个String对象作为列名来索引。即getXXX(),其中XXXjava中的数据类型,即返回你要读取的这个字段的类型。

下面,就以本人前几天遇到的一个小问题来进行示例,

对一个表进行的某个字段进行一个批量插入:这个问题本人利用我们平时所见到的List和Map来进行实现,即先将数据记录以key/value的形式读取到一个Map中,然后再将Map添加到 List中,最后便利List,对数据进行一个批量插入。
Class.forName(“org.postgresql.Driver”); //这里要注意的是你是用的哪个数据库,就要加载相应的数据库驱动
Connection coon =DriverManager.getConnection(“jdbc:postgresql://localhost:5432/data”, “username”, “password”);
Statement statement = coon.createStatement();
ResultSet rSet = statement.executeQuery(“select id,point, yscoord from demo order by id”);
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
while(rSet.next()){
Map<String, Object> map = new HashMap<String, Object>();
map.put(“id”, rSet.getInt(1));
map.put(“point”,rSet.getString(2));
map.put(“yscoord”, rSet.getString(3));
list.add(map);
}
for (int i = 0; i < list.size(); i++) {
Map<String,Object> map = (HashMap<String, Object>)list.get(i);
String string = map.get(“point”).toString();
String string2=string.substring(31,string.length()-2);
statement.execute(“UPDATE demo set yscoord=”+"’"+string2+"’"+“where id =”+map.get(“id”));
}
//记得使用完成后要关闭,这里只是一个简单的demo,在实际开发过程中要规范,大家可以封装成一个方法,以及对于上面对于数据库的连接等,大家也可以进行封装成一个工具类。
rSet.close();
statement.close();
coon.close();
以上的一个demo是对于一个数据表中的某个字段进行批量插入,当然这个东西可以利用数据库的存储过程来进行实现,对于数据库的存储过程,日后会在博客中呈现。(ps:这是作为一只菜鸟第一次写博客,对于代码的样式排版什么的还不是很熟悉,待慢慢熟悉了这些快捷键的使用,日后会更改,请谅解)。

ResultSet中的一些方法:

getMetaData()方法返回一个ResultSetMetaData类的对象,使用该类的方法,得到许多关于结果集的信息,一下为常用的方法:
(1) getColumnCount()返回一个int值,指出结果集中的列数。
(2) getTableName(int column)返回一个字符串,指出参数中所代表列的表的名称。
(3) getColumnLabel(int column)返回一个String对象,该对象是column所指的列的显示标题。
(4) getColumnName(int column)返回的是该列在数据库中的名称。可以把此方法返回的String对象作为Resultset类的getXXX()方法的参数。不过,并没有太大的实际意义。
(5) getColumnType(int comlumn)返回指定列的SQL数据类型。他的返回值是一个int值。在java.sql.Types类中有关于各种SQL数据类型的定义。
(6) getColumnTypeName(int comlumn)返回指定列的数据类型在数据源中的名称。他的返回值是一个String对象。
(7) isReadOnly(int column) 返回一个boolean值,指出该列是否是只读的。
(8) isWriteable(int column) 返回一个boolean值,指出该列是否可写。
(9) isNullable(int column)返回一个boolean值,指出该列是否允许存入一个NULL 值。
如果要更详细的了解ResultSet这部分内容,讲的很详细,请参见这篇博文:https://www.cnblogs.com/qingxinblog/articles/4236410.html

后续

在初始了JDBC以后,后续文章写一点关于Mybatis的一点东西,那个时候你会发现,我们平时常用的mybatis框架的底层实现,是基于原生JDBC的!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值