使用流来操作Blob类型的数据
首先把照片复制过来直接放在工程目录下
步骤:
- 用数据库连接池的方式连接数据库
username=root
password=qq124519
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/SchoolTownDB?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8&useUnicode=yes
initialSize=10
maxActive=50
maxWait=3000
- 创建共工具类
package JdbcTemplate;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
//定义成员变量DataSource
private static DataSource ds;
//对静态变量进行初始化值
static {
//1.加载配置文件
Properties pro = new Properties();
//通过load方法加载
try {
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
//获取DataSource
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection ();
}
/**
* 释放资源
*/
public static void close(Statement stmt, Connection conn) {
if (stmt != null) {
try {//把异常处理而不是抛出去是为了使关闭的方法更加简单
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();//归还连接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//再来一个重载
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {//把异常处理而不是抛出去是为了使关闭的方法更加简单
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();//归还连接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 获取连接池的方法
*/
public static javax.sql.DataSource getDataSource() {
return ds;
}
}
- 把图片入库
public class JdbcPhoto {
@Test
public void testBlob() {
int uc = updatePhone("image.jpg", 30);
System.out.println(uc);
}
public static int updatePhone(String fileName, int id) {
Connection conn = null;
PreparedStatement ps = null;
FileInputStream fis = null;
String sql = "update photo set photo=?WHERE id=?";
try {
conn = getConnection();
ps = conn.prepareStatement(sql);
//用文件流输入字段名
fis = new FileInputStream(fileName);
//设置第一个传入参数fileName
ps.setBlob(1, fis);
//设置第二个人传入参数id
ps.setInt(2, id);
//返回执行的个数
return ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return -1;
}
}