视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysql中怎样插入图片
2020-11-09 05:50:27 责编:小采
文档

mysql中插入图片的方法:

1、首先,先要在数据库中建表。我在名为test的数据库下建立了一个叫pic的表。该表包括3列,idpic, caption和img。其中idpic是主键,caption是对图片的表述,img是图像文件本身。建表的SQL语句如下:

DROP TABLE IF EXISTS `test`.`pic`;
CREATE TABLE `test`.`pic` (
 `idpic` int(11) NOT NULL auto_increment,
 `caption` varchar(45) NOT NULL default '',
 `img` longblob NOT NULL,
 PRIMARY KEY (`idpic`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

将上面的语句输入到命令行中(如果安装了Query Brower, 你可以按照参考[1]中的指示来建表,那样会更加方便。),执行,表建立成功。

2、实现图像存储类

表完成后,我们就开始写个Java类,来完成向数据库中插入图片的操作。我们知道,Java与数据库连接是通过JDBC driver来实现的。我用的是MySQL网站上提供的MySQL Connector/J,如果你用的是其他类型的driver, 在下面的实现过程中可能会有些许差别。

2.1、装载JDBC驱动,建立连接

JDK中提供的DriverManager接口用来管理Java Application 和 JDBC Driver之间的连接。在使用这个接口之前, DriverManager需要知道要连接的JDBC 驱动。最简单的方法就是用Class.forName()来向DriverManager注册实现了java.sql.Driver 的接口类。对MySQL Connector/J来说,这个类的名字叫com.mysql.jdbc.Driver。

下面这个简单的示例说明了怎样来注册Connector/J Driver。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class LoadDriver {
 public static void main(String[] args) {
 try {
 // The newInstance() call is a work around for some
 // broken Java implementations
 Class.forName("com.mysql.jdbc.Driver").newInstance();
 
 // Connection con = DriverManager.getConnection(……)
 // ……
 } catch (Exception ex) {
 // handle the error
 }
}

向DriverManager注册了驱动后,我们就可以通过调用 DriverManager.getConnection()方法来获得和数据库的连接。其实在上面的例子中就有这条语句,只不过被注释掉了。在后面的实现中会有完整的例子。

2.2、PreparedStatement

完成上面的步骤后,我们就可以同过建立的连接创建Statement接口类,来执行一些SQL语句了。在下面的例子,我用的是PreparedStatement,还有CallableStatement,它可以执行一些存储过程和函数,这里不多讲了。

下面的代码片断是向pic表中插入一条记录。其中(1)处Connection接口的对象con通过调用prepareStatement 方法得到预编译的SQL 语句(precompiled SQL statement);(2)处是为该insert语句的第一个问号赋值,(3)为第二个赋值,(4)为第三个,这步也是最该一提的,用的方法是setBinaryStream(),第一个参数3是指第三个问号,fis是一个二进制文件流,第三个参数是该文件流的长度。

PreparedStatement ps;
…
ps = con.prepareStatement("insert into PIC values (?,?,?)"); // (1)
ps.setInt(1, id); //(2)
ps.setString(2, file.getName()); (3)
ps.setBinaryStream(3, fis, (int)file.length()); (4)
ps.executeUpdate();
…

2.3、完整代码

上面列出了完整的代码。

package com.forrest.storepic;
 import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
/**
 * This class describes how to store picture file into MySQL.
 * @author Yanjiang Qian
 * @version 1.0 Jan-02-2006
 */
public class StorePictures {
 
 private String dbDriver;
 private String dbURL;
 private String dbUser;
 private String dbPassword;
 private Connection con;
 private PreparedStatement ps; 
 
 public StorePictures() {
 dbDriver = "com.mysql.jdbc.Driver";
 dbURL = "jdbc:mysql://localhost:3306/test";
 dbUser = "root";
 dbPassword = "admin";
 initDB();
 }
 
 public StorePictures(String strDriver, String strURL,
 String strUser, String strPwd) {
 dbDriver = strDriver;
 dbURL = strURL;
 dbUser = strUser;
 dbPassword = strPwd;
 initDB();
 }
 
 public void initDB() {
 try {
 // Load Driver
 Class.forName(dbDriver).newInstance();
 // Get connection
 con = DriverManager.getConnection(dbURL,
 dbUser, dbPassword); 
 } catch(ClassNotFoundException e) {
 System.out.println(e.getMessage());
 } catch(SQLException ex) {
 // handle any errors
 System.out.println("SQLException: " + ex.getMessage());
 System.out.println("SQLState: " + ex.getSQLState());
 System.out.println("VendorError: " + ex.getErrorCode());
 
 } catch (Exception e) {
 System.out.println(e.getMessage());
 }
 }
 
 public boolean storeImg(String strFile) throws Exception {
 boolean written = false;
 if (con == null)
 written = false;
 else {
 int id = 0;
 File file = new File(strFile);
 FileInputStream fis = new FileInputStream(file);
 
 try { 
 ps = con.prepareStatement("SELECT MAX(idpic) FROM PIC");
 ResultSet rs = ps.executeQuery();
 
 if(rs != null) {
 while(rs.next()) {
 id = rs.getInt(1)+1;
 }
 } else { 
 return written;
 }
 
 ps = con.prepareStatement("insert "
 + "into PIC values (?,?,?)");
 ps.setInt(1, id);
 ps.setString(2, file.getName());
 ps.setBinaryStream(3, fis, (int) file.length());
 ps.executeUpdate();
 
 written = true;
 } catch (SQLException e) {
 written = false;
 System.out.println("SQLException: "
 + e.getMessage());
 System.out.println("SQLState: "
 + e.getSQLState());
 System.out.println("VendorError: "
 + e.getErrorCode());
 e.printStackTrace();
 } finally { 
 ps.close();
 fis.close();
 // close db con
 con.close();
 }
 }
 return written;
 }
 
 /**
 * Start point of the program
 * @param args CMD line
 */
 public static void main(String[] args) {
 if(args.length != 1) {
 System.err.println("java StorePictures filename");
 System.exit(1);
 }
 boolean flag = false;
 StorePictures sp = new StorePictures();
 try {
 flag = sp.storeImg(args[0]);
 } catch (Exception e) {
 e.printStackTrace();
 }
 if(flag) {
 System.out.println("Picture uploading is successful.");
 } else {
 System.out.println("Picture uploading is failed.");
 }
 }
}

更多相关免费学习推荐:mysql教程(视频)

下载本文
显示全文
专题