在处理jdbc插入数据库的过程中,基本的使用自不必多说
但是遇到数据库中表的项目过多,我们该如何进行插入比较方便呢
首先定义我们与数据库相关联的实体类
package com.example.demo.pojo;
import lombok.Data;
import java.sql.ResultSet;
import java.sql.SQLException;
@Data
public class InsCostJDBC {
//定义你要读取的参数
private String Mark;
private String Sex;
private int Yearly;
//定义成了数组的格式,然后通过jdbc来直接映射,不需要通过mybatis的方式类与表必须完全匹配的方
式来进行读取
private int[] args=new int[111];
//在实体类中完成对参数与数据库表之间的映射,在读取数据库中的数据直接调用Read方法即可
public InsCostJDBC Read(ResultSet resultSet) throws SQLException {
Mark=resultSet.getString("Mark");
Sex=resultSet.getString("Sex");
Yearly=resultSet.getInt("Yearly");
//读取到val0对应的位置列数,读取后面的直接+1,因为我的表中有val0-val99
int idx=resultSet.findColumn("val0");
for (int i = 0; i < 100; i++) {
args[i] = resultSet.getInt(idx);
idx++;
}
return this;
}
}
我的数据库表
具体写法:
重点在于sql字符串的拼接,我这里用的是Param参数形式的方法,可以预防sql注入,当然如果你只是在内部或者稳定的环境使用,可以直接拼接一条sql
@Test
public void JdbcTest(InsCostJDBC insCostJDBC) throws ClassNotFoundException, SQLException {
String s ="";
//拿到参数里面的值
int[] args = insCostJDBC.getArgs();
//通过list来读取
List<InsCostJDBC> list = new ArrayList<>();
//1. 注册驱动
Class.forName(dateModule.getProvider());
//2. 获取链接
Connection conn = DriverManager.getConnection(dateModule.getDbUrl(), dateModule.getDbUser(), dateModule.getDbPassword());
//整个Excel表中有104个列,所以产生103个?
for (int j = 0; j < 104; j++) {
if (j==103)
{
s+="?";
break;
}
s+="?"+",";
}
//3. 定义sql语句
String sql = "insert into dbo.Ins_Cost values("+s+")";
//预编译sql语句
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1,insCostJDBC.getMark());
preparedStatement.setString(2,insCostJDBC.getSex());
preparedStatement.setInt(3,insCostJDBC.getYearly());
//开始存VAL0-VAL99
for (int j=4;j<104;j++)
{
preparedStatement.setString(j,String.valueOf(args[(j-4)+1]));
}
preparedStatement.setDate(104, Date.valueOf(LocalDate.now()));
//执行sql
preparedStatement.executeUpdate();
}
}
重点在于sql的拼接,和对具体的数据库的掌握