一般情况下,我们是不会向数据库中存储文件或者图片等东西,而我们大部分情况下是存储这些文件在 web 项目中的路径的。我这里仅仅是为了练习一下!所以才将文件存储在数据库中,仅仅是简单的实现一下!
至于导入第三方jar包,仅仅是一个连接MySQL数据库的jar包,其他的没有!
创建数据库的SQL语句-----------使用的是MySQL数据库
create table stu(
id int primary key auto_increment,
name varchar(30),
pic mediumBlob, --放入图片或其他二进制文件
des text -- 放入大文本
)
JdbcUtils.java
package com.syh.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcUtils {
/**
* 回滚事务
*/
public static void rollback(Connection conn){
if(conn != null)
try {
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 提交事务
*/
public static void commit(Connection conn){
if(conn != null)
try {
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 开始事务
*/
public static void beginTransaction(Connection conn){
if(conn != null)
try {
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getOracleConnection() throws Exception{
Connection connection = null;
//1. 获取链接
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "system";
String password = "orcl";
Class.forName(driver);
connection = DriverManager.getConnection(url, user, password);
return connection;
}
/**
* @return Connection 对象
* @throws Exception
*/
public static Connection getConnection() throws Exception{
Connection connection = null;
//1. 获取链接
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/itcast";
String user = "root";
String password = "root";
Class.forName(driver);
connection = DriverManager.getConnection(url, user, password);
return connection;
}
/**
* 释放数据库资源
* @param rs
* @param st
* @param conn
*/
public static void releaseResource(ResultSet rs, Statement st, Connection conn){
try {
if(rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally{
try {
if(st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally{
try {
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
JdbcTest.java
因为仅仅是联系,所以没有使用main方法,而是用了JUnit 4测试一下!
package com.syh.test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.junit.Test;
public class JdbcTest {
/**
* 测试将文件放到数据库中
*/
@Test
public void testSetBolb() {
Connection conn = null ;
//1. 只能使用 PreparedStatement, 因为图片不能拼写到字符串中的
PreparedStatement pstmt = null ;
try {
conn = JdbcUtils.getConnection() ;
String sql = "INSERT INTO stu (name, pic, des) VALUES (?, ?, ?)" ;
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1, "Tom") ;
//2. 通过 pstmt.setBlob(parameterIndex, inputStream); 填入 Blob 对应的占位符
//这个文件是在当前 web 项目的根目录下
pstmt.setBlob(2, new FileInputStream("pic.jpg")) ;
pstmt.setString(3, "PIC") ;
pstmt.executeUpdate() ;
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtils.releaseResource(null, pstmt, conn) ;
}
}
/**
* 测试将文件取出来
*/
@Test
public void testGetBolb() {
Connection conn = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
try {
conn = JdbcUtils.getConnection() ;
String sql = "SELECT id, name, pic, des FROM stu WHERE id = 1" ;
pstmt = conn.prepareStatement(sql) ;
rs = pstmt.executeQuery() ;
//因为这里仅仅取得一个对象,所以用 if 而不是用 while
if(rs.next()) {
int id = rs.getInt(1) ;
String name = rs.getString(2) ;
//1. 利用 ResultSet 的 getBlob() 方法获取 Blob 字段的值
Blob pic= rs.getBlob(3) ;
//2. 调用 Blob 对象的 getBinaryStream(); 获取输入流
InputStream is = pic.getBinaryStream() ;
//3. 利用 java 的 IO 技术把 2 得到的输入流输出为硬盘上的一个文件,
//如果没有指定文件具体生成的位置,默认是当前 web 项目的根目录下,如何没有即使出现,刷新当前 web 项目一下就可以了
FileOutputStream fos = new FileOutputStream("newPic.jpg") ;
byte[] temp = new byte[1024] ;
int len = 0 ;
while((len = is.read(temp)) != -1) {
fos.write(temp, 0, len) ;
}
is.close() ;
fos.flush() ;
fos.close() ;
String desc = rs.getString(4) ;
System.out.println(id + ", " + name + ", " + desc);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtils.releaseResource(rs, pstmt, conn) ;
}
}
}
分享到:
相关推荐
VSS概述 Microsoft Visual SourceSafe是美国微软公司出品的版本控制系统,简称...该文件仍然存在于你的VSS数据库和其它共享该文件的项目中,你可以恢复它。此命令同样适用于项目。 1) 选择文件或项目; 2) 选择file...
此外,当Destroy 和Destroy Permanently命令用于共享文件时,它只作用于当前文件夹,其它共享的文件夹仍然保留该文件,该文件依然保存在VSS数据库中。 1) 选择文件或项目; 2) 选择file菜单中的delete命令; 3) ...
VSS是存储和管理文件的工具,但是编辑和编译文件必须在VSS指定文件夹中进行。这个文件夹叫工作文件夹,它可以是现存的文件夹,也可以是VSS新建的文件夹。VSS浏览器在文件列表上方显示了文件的工作文件夹的路径。 在...
配置正确后即可正确读取出数据库中的相关表和表中字段。 (2)生成的代码路径可根据需要进行灵活配置,如果没有配置默认为:d:\.LKGenerator\dest-beans (3)提供了根据数据表生成代码的相关配置,可以配置去掉表...
在editor_config.js文件中找到initialContent参数,设置其值为需要的提示或者问候语即可,如initialContent:’欢迎使用UEditor!’。 场景二:编辑旧文章,从数据库中取出富文本放置到编辑器中。 显然,编辑文章时...
配置正确后即可正确读取出数据库中的相关表和表中字段。 (2)生成的代码路径可根据需要进行灵活配置,如果没有配置默认为:d:\.LKGenerator\dest-beans (3)提供了根据数据表生成代码的相关配置,可以配置去掉表...
FormAuthenticationFilter拦截住取出request中的username和password(两个参数名称是可以配置的) FormAuthenticationFilter 调用realm传入一个token(username和password) realm认证时根据username...
带Python的客户管理页面 使用python,SQlite和pyqt5 framewrok创建的具有... 注意***看来您需要在Finalproject.exe外部取出appDb.db和customerDB.db并将其放置在刚好超出上述文件夹的环境中,并且与.vscode处于同一环
23.如果要把C盘某个文件夹中的一些文件复制到C盘的另外一个文件央中,在选定文件后,若采用拖放操作,可以用___B___目标的方法。 A、直接拖至 B、Ctrl十拖至 C、Alt十拖至 D、单击 24.Windows98中的磁盘的根文件夹是...
⑶ 新闻阅读:在其他页面中点击标题链接即进入新闻阅读页面,此时,每条新闻的详细信息将被取出,包括内容、标题、关键字等,并按照相对固定的格式放置在页面的不同区域,所有新闻使用大致相同的页面布局,只是各...
修改外部数据库在4.12版中导致的不兼容问题,并增加了对MS SQL Server数据库中image和text字段类型的说明。 7. 修改扩展界面支持库一,禁止透明标签在父窗口刷新时自动刷新,以解决其导致窗口刷新缓冲的问题。 8....
上面那一句SQL语句的意思就是:从表材料进货明细表中取出定额名称及规格的值 例2、查询材料进货明细表的详细记录 SELECT * FROM [材料进货明细表$] 等价于: SELECT 序号, 定额名称,规格,日期,单位,数量 FROM ...
需要注意的是,在Windows95和Windows NT 3.51以后的版本中,使用PrintSetup()函数设置的打印机设置只对当前应用起作用,并不影响其它应用的打印机设置。对Windows 3.1来说,使用PrintSetup()函数设置的打印机设置...
一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须定义了它们。 2.3.1 定义原始集 为了定义一个原始集,必须详细声明: •集的名字 •可选,集的成员 •可选,集成员的属性 定义一...
版权和许可条款 ...................................................................................................................................... 1 第二章 PT80 开发入门 ..............................