【发布时间】:2012-03-14 20:37:29
【问题描述】:
我正在使用以下代码在数据库中插入图像。它将存储两张图像,因为我使用了PreparedStatement 和Statement。
当我运行这段代码时,我在数据库中获得了两张图片。但是这两个图像不同,我不明白为什么。使用PreparedStatement,它可以完美插入。当我使用Statement 时,我想拥有相同的图像。为什么它现在不起作用,我怎样才能使它起作用?
import java.io.*;
import java.sql.*;
public class Image
{
public static void main(String args[]) throws Exception
{
System.out.println("kshitij");
Class.forName("com.mysql.jdbc.Driver");
Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jsfdb","root","kshitij");
Statement st=cn.createStatement();
File f1=new File("c:\\k1.jpg");
FileInputStream fin=new FileInputStream(f1);
//DataInputStream dataIs = new DataInputStream(new FileInputStream(f1));
PreparedStatement pst = cn.prepareStatement("insert into registration(image) values(?)");
//pst.setInt(1,67);
pst.setBinaryStream(1,fin,fin.available());
pst.executeUpdate();
//int length=(int)f1.length();
byte [] b1=new byte[(int)f1.length()];
fin.read(b1);
fin.close();
st.executeUpdate("insert into registration(image) values('"+b1+"')");
System.out.println("Quesry Executed Successfully");
FileOutputStream fout=new FileOutputStream("d://k1.jpg");
fout.write(b1);
fout.close();
}
}
MySQL
CREATE DATABASE IF NOT EXISTS jsfdb;
USE jsfdb;
-- Definition of table `registration`
DROP TABLE IF EXISTS `registration`;
CREATE TABLE `registration` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`image` blob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=234 DEFAULT CHARSET=latin1;
【问题讨论】:
-
"请运行此代码和脚本,您将在数据库表中找到两个图像。但两者不同,我不知道为什么。" - 对不起,不值得努力。你应该在这里做更多的工作。
-
请正确缩进您的代码并在句子中使用正确的大小写。
-
人们通常不会运行本网站提供的代码 - 太冒险了。但是他们会为您查看您的代码。你认为这两张图片是一样的吗?
-
PS:欢迎来到 Stack Overflow!顺便说一句,我同意 Felix - 尝试使用有意义的标题并尽可能使句子的大小写和语法正确(尽管我尝试为非英语使用者提供例外)。一般来说,努力提出问题会鼓励人们回答。