工作总结备份,见代码如下:
package com.yusj; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; public class TestImage { private static Connection conn = null; private static Statement stmt = null; private ResultSet rs = null; static { try { // 加载Oracle驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); // 获得连接 conn = DriverManager.getConnection( "jdbc:oracle:thin:@10.117.10.5:1521:dqjz1", "jwzh", "jwzh"); stmt = conn.createStatement(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } /** * 关闭所有与数据库相关的连接 * * @param conn * @param stmt * @param rs */ public void closeAll(ResultSet rs, Statement stmt, Connection conn) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 读取图片并入库 */ public void insertDB() { // 历史表与路径表关联查询 String sql = " select rownum, t2.oldfwbh, t2.olddybh, t2.oldbzdzbm, t1.tplj,t2.newfwbh from test_jgt t1, test_jgt_lsb_20130401 t2 where t1.fwbh = t2.oldfwbh and t1.sfdrcg='0' "; String dir = ""; String[][] res; try { res = querySql(conn, sql); if (res != null) { // 循环取出照片 for (int i = 0; i < res.length; i++) { dir = "C:\\test\\images\\images"; dir += "\\" + res[i][3] + "\\" + res[i][2] + "\\" + res[i][1] + "\\" + res[i][4]; // 获得fjbh(主键) String seqId = getSequenceValue("SEQ_COMMON_SERIVAL_NUMBER",conn) ; //String seqId = "1" ; System.out.println(seqId+"----"+dir); // 逐个插入 String[] args = {seqId,res[i][5],res[i][4],"image/pjpeg",res[i][1]} ; inputImage(args,dir) ; } } } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭相应数据库连接 closeAll(rs, stmt, conn); } } /** * 向数据库中插入图片 * @param args * @param impImageDir */ public void inputImage(String[] args, String impImageDir) { try { conn.setAutoCommit(false);// 取消自动提交功能 OutputStream os = null; // 插入一个空对象empty_blob() //stmt.executeUpdate("insert into image_lob (t_id, t_image) values ('"+args[0]+"', empty_blob())"); stmt.executeUpdate("insert into test_attachment (fjbh, dah, filename, data, cjsj, fjlx) values ('"+args[0]+"','"+args[1]+"','"+args[2]+"', empty_blob(), sysdate, '"+args[3]+"')"); // 锁定数据行进行更新,注意"for update"语句 //rs = stmt.executeQuery("select t_image from image_lob where t_id='" + args[0] + "' for update"); rs = stmt.executeQuery("select data from test_attachment where fjbh='" + args[0] + "' for update"); if (rs.next()) { // 得到java.sql.Blob对象后强制转换为oracle.sql.BLOB oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("data"); // 通过getBinaryOutputStream()方法获得向数据库中插入图片的"管道" os = blob.getBinaryOutputStream(); // 读取想要存储的图片文件 InputStream is = new FileInputStream(impImageDir); // 依次读取流字节,并输出到已定义好的数据库字段中. int i = 0; while ((i = is.read()) != -1) { os.write(i); } } os.flush(); os.close(); // 图片入库成功 stmt.executeUpdate("update test_jgt set sfdrcg='1' where fwbh = '"+args[4]+"'") ; conn.commit(); conn.setAutoCommit(true);// 恢复现场 } catch (SQLException e) { e.printStackTrace(); try { conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } catch (IOException e) { //e.printStackTrace(); try { conn.rollback(); // 本地图片不存在 stmt.executeUpdate("update test_jgt set sfdrcg='2' where fwbh = '"+args[4]+"'") ; conn.commit(); } catch (SQLException e1) { e1.printStackTrace(); } } } /** * 从数据库里检索出图片 */ public void outputImage() { try { String sql = "select image from t_image where id=1"; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); if (rs.next()) { oracle.sql.BLOB b = (oracle.sql.BLOB) rs.getBlob(1); InputStream is = b.getBinaryStream(); FileOutputStream fos = new FileOutputStream( "E:\\outputImage.jpg"); int i = 0; while ((i = is.read()) != -1) { fos.write(i); } fos.flush(); fos.close(); is.close(); } } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { closeAll(rs, stmt, conn); } } /** * 执行查询语句,获得返回结果 * @param conn * @param sql * @return * @throws SQLException * @throws Exception */ public String[][] querySql(Connection conn, String sql) throws SQLException, Exception { if (sql == null) throw new Exception("无效的SQL语句!"); if (conn == null) throw new Exception("获取数据库连接失败!"); conn.setAutoCommit(false); ResultSet rs = null; Statement stmt = null; ResultSetMetaData md = null; ArrayList aList = new ArrayList(); int rows = 0, cols; try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql); md = rs.getMetaData(); cols = md.getColumnCount(); while (rs.next()) { String[] row = new String[md.getColumnCount() + 1]; for (int i = 0; i < md.getColumnCount(); i++) { row[i] = rs.getString(i + 1); } aList.add(row); } rs.close(); rs = null; stmt.close(); stmt = null; } catch (SQLException e) { e.printStackTrace(System.out); throw new SQLException("#71:" + e.toString()); } catch (Exception e) { e.printStackTrace(System.out); throw e; } finally { if (stmt != null) stmt.close(); stmt = null; } rows = aList.size(); if (rows == 0 || cols == 0) { aList.clear(); aList = null; return null; } String[][] res = new String[rows][cols]; for (int i = 0; i < rows; i++) { Object[] row = (Object[]) aList.toArray()[i]; for (int j = 0; j < cols; j++) { if (row[j] == null) res[i][j] = new String(""); else res[i][j] = new String(row[j].toString()); } } aList.clear(); aList = null; return res; } /** * 获得序列 * @param seqname * @param conn * @return * @throws SQLException */ public static String getSequenceValue(String seqname, Connection conn) throws SQLException { ResultSet rs = null; Statement stmt = null; String res = null; try { stmt = conn.createStatement(); rs = stmt.executeQuery("select " + seqname + ".nextval from dual"); if (rs.next()) { res = rs.getString(1); } rs.close(); rs = null; stmt.close(); stmt = null; } catch (SQLException e) { e.printStackTrace(System.out); throw e; } return res; } public static void main(String[] args) { // 从硬盘提取图片插入到数据库中 // new TestImage().inputImage(); // 从数据库中检索图片到硬盘 // new TestImage().outputImage(); new TestImage().insertDB(); } }
相关推荐
在本文档中,我们将深入探讨如何使用C#编程语言,结合S7.net库与西门子S7-1200 PLC进行通信,并利用线程循环读取数据。首先,确保PLC设置允许PUT/GET通信访问,并取消优化的块访问,以便查看变量的偏移量。 在...
数据可以是表格形式,通过循环遍历Recordset,将其存储在变量中。 4. **读取Word文件**:类似地,使用Word的COM对象,可以打开Word文档并访问其内容。通过遍历文档的段落或形状,提取文本或图像数据。 5. **转换为...
例如,`json.load()`函数用于将JSON格式的文本数据读取为Python对象,`json.dumps()`则将Python对象转换为JSON字符串。在本例中,我们需要读取的JSON文件可能包含省市区的层级结构,如中国->省份->城市->区县,这种...
以上就是在Delphi 2010中读取数据库中的图片和批量入库图片的基本过程。实际应用中,可能还需要考虑错误处理、数据库事务管理、性能优化等细节。提供的"Projects"文件可能包含了实现这些功能的具体源代码,通过分析...
6. **执行批量插入**:开启事务,使用Oracle数据库的批处理功能,循环遍历Excel数据,为每个行数据创建一个参数化SQL命令,并执行插入操作。这样可以提高数据导入的效率。 7. **错误处理**:在整个过程中,应捕获...
3. **遍历工作表和行**: 通过循环遍历每个工作表,然后逐行读取数据。每一行的数据可以存储在一个`List<string>`或其他适当的数据结构中。 4. **构建数据库连接**: 使用ADO.NET或MySql.Data创建数据库连接字符串,...
1. **引入库**: 首先,在你的PHP脚本中引入所需的类库。 ```php use PhpOffice\PhpSpreadsheet\IOFactory; ``` 2. **加载文件**: 使用`IOFactory::load()`方法加载XLS文件。确保文件路径正确。 ```php $...
PLC的工作循环包括输入刷新、程序执行和输出刷新三个阶段。输入刷新阶段读取输入设备的状态;程序执行阶段根据梯形图逻辑计算输出状态;输出刷新阶段更新输出设备的状态。 2. 车辆出入库管理系统的构成: 系统由...
4. **实时扫描(Continuous Scanning)**:实现连续扫描,通常需要开启一个循环或使用SurfaceView来持续捕获相机预览图像,并在后台不断分析图片以检测二维码。 5. **数据存储**:扫描结果通常会被保存到本地,此处...
3. **处理记录数据**:虽然示例代码中未完整展示,但通常涉及逐行读取数据并将其转换为相应的数据类型,再进行数据库入库操作。 ### 数据库入库操作 代码中使用了SQL*Loader工具来执行入库操作。SQL*Loader是...
6. **循环遍历数据**:如果你想要读取整个工作表的数据,可以使用迭代器: ```php foreach ($worksheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->...
4. 流程控制:为了实现入库操作的逻辑,如检查库存、计算总价、更新库存状态等,需要使用条件语句(if-else)、循环(for、while)等流程控制结构。 5. 函数编程:通过封装不同的功能到函数中,可以使代码更模块化...
5. **遍历单元格数据**:通过循环遍历行和列来获取单元格的值: ```php $highestRow = $worksheet->getHighestRow(); // 获取最后一行号 $highestColumn = $worksheet->getHighestColumn(); // 获取最后一列的...
工作原理是通过循环扫描的方式不断读取输入信号,执行预编写的程序,然后更新输出状态。在车辆出入库管理中,PLC扮演着核心控制器的角色。 车辆出入库管理系统主要由以下几个部分组成: 1. 光传感器:作为数据采集...
本教程将详尽地讲解以上各环节,从理论到实践,从基本的MATLAB语法到高级的图像处理和数据库操作,逐步引领读者构建一个完整的车牌出入库计费系统。无论你是MATLAB初学者还是有一定经验的开发者,都能从中受益,提升...
- 循环扫描:PLC不断读取输入状态,执行用户程序,更新输出状态,形成一个周期性的扫描过程。 - 状态转移:根据程序逻辑,PLC会根据输入状态改变输出状态。 4. 车辆出入库管理系统构成: - 光传感器:作为主要的...
例如,可以使用Select Case或If...Then语句进行条件判断,Array函数创建数组,Sort函数(自定义实现)进行排序,以及For Each循环进行遍历。 总的来说,这个VB 仓库管理系统巧妙地利用了TXT文件进行数据存储,结合...
1. **导入库** ```python import pandas as pd ``` 2. **读取Excel文件** - **单个工作表**:默认情况下,`read_excel`函数会读取第一个工作表。 ```python df = pd.read_excel('data.xlsx') ``` - **指定...
9. **控制结构**:在处理用户输入和执行流程时,会用到条件语句(如`if...else`)和循环(如`for`、`while`)。 10. **设计模式**:虽然对于课程设计项目不一定需要深入应用设计模式,但理解如单例模式(用于管理...