JDBC的生命周期/创建步骤
1.注册数据库链接驱动
2.获取数据库链接
3.获取传输器
4.编写sql,发送sql到服务器并返回执行结果
5.处理结果
6.释放资源
解释
介绍
Connection conn= null; // 链接数据库使用该对象接收
Statement stat = null; // 传输器使用该对象接收
ResultSet rs = null; // 获取数据时使用该对象(查询), 如:删除 修改 增加 使用int即可主要获取影响行数
1.注册数据库链接驱动
Class.forName("com.mysql.jdbc.Driver"); // 使用反射获取数据数据的驱动 并且 此处存在异常处理
2.获取数据库链接
格式:Connection conn =DriverManager.getConnection(url , username , password ) ;
Connection conn = DriverManager.getConnection(
"jdbc:dm://192.168.1.4:12345/TMP",
"root",
"root"
);
3.获取传输器
Statement stat = conn.createStatement();
4.编写sql,发送sql到服务器并返回执行结果 (注意区分CRUD: 原因使用的方法不一致,返回结果不一致)
1.提前定义好sql语句
String sql = "select * from tableName"
查询:
ResultSet rs = stat.executeQuery( sql );
// 用于向数据库发送查询类型的sql语句,返回一个ResultSet对象中
修改、增加、删除:
int num = stat.executeUpdate(sql); //用于向数据库发送更新(增加、删除、修改)类型的sql语句,返回一个int值,表示影响的记录行数
5.处理结果 (获取返回的结果数据)
例:
查询:
while (rs.next()) { // 循环获取数据
// 参考数据库存储类型为什么就使用什么类型进行接收
String getFileId = rs.getString("FILE_ID");
byte[] getFileBody = rs.getBytes("FILE_BODY"); // 数据库存储类型: BLOB
int getNum = rs.getInt("字段");
}
修改、增加、删除:
直接获取数据即可。
6.释放资源 (一般按照先后顺序(由内到外))
ResultSet: rs.close(); // 结果集
Statement: stat.close(); // 传输器
Connection: conn.close(); // 链接
代码实例
public class Running {
public static final Logger LOG = LoggerFactory.getLogger(Running.class);
@Value("dm.jdbc.driver.DmDriver")
private String jdbc;
@Value("jdbc:dm://127.0.0.1:12345/LOCAL")
private String url;
@Value("SYSDBA")
private String username;
@Value("SYSDBA")
private String password;
@Value("d:/home/file/")
private String path;
@Scheduled(cron = "*/15 * * * * ?")//*分钟处理一次;进行调度时间配置
// @PostConstruct // 运行开始时执行
public void run() throws Exception {
System.gc();
LOG.info("开始获取数据内容");
boolean b = this.getFileInfo();
if (b) {
LOG.info("执行完成");
} else {
LOG.error("没有什么可以执行的了");
}
}
private boolean getFileInfo() throws IOException, SQLException {
boolean b = false;
// 链接驱动
Connection con = null;
Statement stat = null;
ResultSet rs = null;
try{
//加载MySql的驱动类
Class.forName(jdbc) ;
}catch(ClassNotFoundException e){
System.out.println("找不到驱动程序类 ,加载驱动失败!");
}
try{
con =
DriverManager.getConnection(url , username , password ) ;
stat = con.createStatement();
String sql = "select * from tableName";
rs = stat.executeQuery( sql );
int num = 1;
while (rs.next()) {
String getFileId = rs.getString("FILE_ID");
String getFileName = rs.getString("FILE_NAME");
byte[] getFileBody = rs.getBytes("FILE_BODY");
String getFileUuidName = rs.getString("fileUuidName");
String getUploadFilePath = rs.getString("uploadFilePath");
if (rs != null) {
LOG.error("当前执行条数"+ num++);
String filePath = path+getUploadFilePath+ File.separator;
LOG.info("目前上传的完成路径===========>>>" +filePath+getFileUuidName);
LOG.info("开始读取文件内容");
File file = new File(filePath);
if (!file.exists()){
file.mkdirs();
}
FileOutputStream fileOutputStream
= new FileOutputStream(filePath+getFileUuidName,false); // 拼接,false防止相同文件
byte[] bytes = getFileBody;
if (bytes.length ==0) {
bytes = " ".getBytes();
}
fileOutputStream.write(bytes);
fileOutputStream.flush();
fileOutputStream.close();
LOG.info("转换完成,字节大小"+ bytes.length);
this.updateData(getFileId,con,stat);
b = true;
} else {
b=false;
}
}
rs.close();
stat.close();
con.close();
}catch(SQLException se){
System.out.println("数据库连接失败!");
}
return b;
}
private void updateData(String fileId,Connection con,Statement stat) throws SQLException {
String sql =
" update tableName set IS_TRANSFER = '1'";
int rows = stat.executeUpdate( sql );
LOG.info("影响行数:==========>>>>"+ rows);
}
}