高手帮忙看下,这java程序是什么意思?
publicclassTestBLOB{publicTestBLOB(){}publicstaticvoidmain(String[]args){try{Class.fo...
public class TestBLOB {
public TestBLOB() {
}
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", "liu", "liu");
String sql="insert into student values(?,?,?,to_date(?,'yyyy-mm-dd'),?,?)";//to_date(?,yyyy-mm-dd)这个是什么意思?
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1,111);
ps.setString(2,"peter");
ps.setString(3,"男");
ps.setString(4,"1980-3-3");
ps.setString(5,"liu@gmail.com");
File f=new File("d:/1.jpg");
FileInputStream in=new FileInputStream(f);
ps.setBinaryStream(6,in,(int)f.length());//这句是什么意思?
int n=ps.executeUpdate();
System.out.println(n);
in.close();
////////////////////////////////////
String sql="select photo from student where sid=111";
PreparedStatement ps=conn.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
rs.next();//这句是什么意思?
InputStream in=rs.getBinaryStream(1);//这句是什么意思?
FileOutputStream out=new FileOutputStream( "d:/copy.jpg" );//这句是什么意思?
int len=0;
byte [] buffer=new byte[1024];//
while((len=(int)in.read(buffer))!=-1){//
out.write(buffer,0,len);
}//这部分程序是什么意思?实现什么功能。
out.flush();//是什么意思?
System.out.print("读取成功");
out.close();
in.close();
rs.close();
} catch (ClassNotFoundException ex) {
} catch (SQLException ex) {
/** @todo Handle this exception */
} catch (FileNotFoundException ex) {
/** @todo Handle this exception */
} catch (IOException ex) {
/** @todo Handle this exception */
}finally{
}
}
}
问题:1,请高手帮我把标注注释的程序给解释下,是什么意思?
2,帮忙运行下,我这段程序有错吗?
先表示感谢! 展开
public TestBLOB() {
}
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", "liu", "liu");
String sql="insert into student values(?,?,?,to_date(?,'yyyy-mm-dd'),?,?)";//to_date(?,yyyy-mm-dd)这个是什么意思?
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1,111);
ps.setString(2,"peter");
ps.setString(3,"男");
ps.setString(4,"1980-3-3");
ps.setString(5,"liu@gmail.com");
File f=new File("d:/1.jpg");
FileInputStream in=new FileInputStream(f);
ps.setBinaryStream(6,in,(int)f.length());//这句是什么意思?
int n=ps.executeUpdate();
System.out.println(n);
in.close();
////////////////////////////////////
String sql="select photo from student where sid=111";
PreparedStatement ps=conn.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
rs.next();//这句是什么意思?
InputStream in=rs.getBinaryStream(1);//这句是什么意思?
FileOutputStream out=new FileOutputStream( "d:/copy.jpg" );//这句是什么意思?
int len=0;
byte [] buffer=new byte[1024];//
while((len=(int)in.read(buffer))!=-1){//
out.write(buffer,0,len);
}//这部分程序是什么意思?实现什么功能。
out.flush();//是什么意思?
System.out.print("读取成功");
out.close();
in.close();
rs.close();
} catch (ClassNotFoundException ex) {
} catch (SQLException ex) {
/** @todo Handle this exception */
} catch (FileNotFoundException ex) {
/** @todo Handle this exception */
} catch (IOException ex) {
/** @todo Handle this exception */
}finally{
}
}
}
问题:1,请高手帮我把标注注释的程序给解释下,是什么意思?
2,帮忙运行下,我这段程序有错吗?
先表示感谢! 展开
4个回答
展开全部
第1句定义的SQL语句没看懂。。。估计是你 表有default值,会自动在数据库里去找默认值
第2句
File f=new File("d:/1.jpg");
FileInputStream in=new FileInputStream(f);
ps.setBinaryStream(6,in,(int)f.length());//
把("d:/1.jpg转换为文件流,然后存入将这个流丢给ps去做数据更新,说白了就是把文件转成流存进数据库
第3句是结果集指向下一条。。这个都问。。
第4句从photo字段取值,取出的是流,参考2.。
第5句把刚才的流转换为文件,丢在指定目录"d:/copy.jpg
最后的方法,用刚才得到的文件流转换为字节流打到前台展现
运行过了,这是2段代码片段,局部里是没错的,放在一个方法里肯定不行,参数重复定义了
第2句
File f=new File("d:/1.jpg");
FileInputStream in=new FileInputStream(f);
ps.setBinaryStream(6,in,(int)f.length());//
把("d:/1.jpg转换为文件流,然后存入将这个流丢给ps去做数据更新,说白了就是把文件转成流存进数据库
第3句是结果集指向下一条。。这个都问。。
第4句从photo字段取值,取出的是流,参考2.。
第5句把刚才的流转换为文件,丢在指定目录"d:/copy.jpg
最后的方法,用刚才得到的文件流转换为字节流打到前台展现
运行过了,这是2段代码片段,局部里是没错的,放在一个方法里肯定不行,参数重复定义了
更多追问追答
追问
1. ps.setBinaryStream(6,in,(int)f.length());//这个setBinaryStream方法中里面的6,in,(int)f.length)这几个参数是什么意思?
2.InputStream in=rs.getBinaryStream(1);//这句是不是取数据,那1是什么意思?
3. while((len=(int)in.read(buffer))!=-1){ out.write(buffer,0,len);//这段程序代码是什么意思?
4,这是不是两段代码啊,把分隔号前面的注释掉就行了是吧?
追答
1 具体参数是什么意思去找api
2 是取数据,getXXX方法可以给两种参数,要么指定列名"haha",要么给整数,select a,b from t,如果getXXX(2)即取b,表示取结果集的第2列,结果集是你sql决定的
3 把文件流转换为字节流,因为如果要out到前台,只能用字节流传输
4 如果是一段代码,String sql ,PreparedStatement ps都是重复定义,要么直接拿第1个实例用,要么把实例换个名字,比如sql2 ps2
你还是从基础看起吧,很多基础的都不会,直接看这些跨度太大了
展开全部
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestBLOB {
public TestBLOB() {
}
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", "liu", "liu");
// to_date(?,'yyyy-mm-dd') 将?处字符串转换为date类型。依照yyyy-mm-dd格式转换。
// 比如将字符串类型的2012-01-01转换成date类型的2012-01-01
String sql = "insert into student values(?,?,?,to_date(?,'yyyy-mm-dd'),?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 111);
ps.setString(2, "peter");
ps.setString(3, "男");
ps.setString(4, "1980-3-3");
ps.setString(5, "liu@gmail.com");
File f = new File("d:/1.jpg");
FileInputStream in = new FileInputStream(f);
// 这句的意思是设置文件读取流,以便将图片文件插入到数据库中
ps.setBinaryStream(6, in, (int) f.length());// 这句是什么意思?
int n = ps.executeUpdate();
System.out.println(n);
in.close();
// //////////////////////////////////
// 变量名重复,改成sql2
String sql2 = "select photo from student where sid=111";
PreparedStatement ps2 = conn.prepareStatement(sql);
ResultSet rs2 = ps2.executeQuery();
// 将结果集中的游标移到第一行(API原话:第一次调用 next 方法使第一行成为当前行)
rs2.next();// 这句是什么意思?
// 得到结果集中的流
InputStream in2 = rs2.getBinaryStream(1);// 这句是什么意思?
// 设置一个文件输出流,以便生成文件
FileOutputStream out2 = new FileOutputStream("d:/copy.jpg");// 这句是什么意思?
int len = 0;
// 设置缓冲区。从结果集流中读一部分,放到缓冲区中,然后再读一部分。。。
byte[] buffer = new byte[1024];//
// len=in2.read(buffer)表示,从结果集流中读取1024byte个数据,放到buffer中。然后将读取到的长度放到len中
// 如果len的长度为-1。说明读取到文件结尾了,就结束循环。否则就将buffer中的信息放到文件输出流中。
while ((len = in2.read(buffer)) != -1) {//
out2.write(buffer, 0, len);
}// 这部分程序是什么意思?实现什么功能。
// 刷新流中信息,以便将图片文件生成
out2.flush();// 是什么意思?
System.out.print("读取成功");
out2.close();
in2.close();
rs2.close();
} catch (ClassNotFoundException ex) {
} catch (SQLException ex) {
} catch (FileNotFoundException ex) {
} catch (IOException ex) {
} finally {
}
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestBLOB {
public TestBLOB() {
}
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", "liu", "liu");
// to_date(?,'yyyy-mm-dd') 将?处字符串转换为date类型。依照yyyy-mm-dd格式转换。
// 比如将字符串类型的2012-01-01转换成date类型的2012-01-01
String sql = "insert into student values(?,?,?,to_date(?,'yyyy-mm-dd'),?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 111);
ps.setString(2, "peter");
ps.setString(3, "男");
ps.setString(4, "1980-3-3");
ps.setString(5, "liu@gmail.com");
File f = new File("d:/1.jpg");
FileInputStream in = new FileInputStream(f);
// 这句的意思是设置文件读取流,以便将图片文件插入到数据库中
ps.setBinaryStream(6, in, (int) f.length());// 这句是什么意思?
int n = ps.executeUpdate();
System.out.println(n);
in.close();
// //////////////////////////////////
// 变量名重复,改成sql2
String sql2 = "select photo from student where sid=111";
PreparedStatement ps2 = conn.prepareStatement(sql);
ResultSet rs2 = ps2.executeQuery();
// 将结果集中的游标移到第一行(API原话:第一次调用 next 方法使第一行成为当前行)
rs2.next();// 这句是什么意思?
// 得到结果集中的流
InputStream in2 = rs2.getBinaryStream(1);// 这句是什么意思?
// 设置一个文件输出流,以便生成文件
FileOutputStream out2 = new FileOutputStream("d:/copy.jpg");// 这句是什么意思?
int len = 0;
// 设置缓冲区。从结果集流中读一部分,放到缓冲区中,然后再读一部分。。。
byte[] buffer = new byte[1024];//
// len=in2.read(buffer)表示,从结果集流中读取1024byte个数据,放到buffer中。然后将读取到的长度放到len中
// 如果len的长度为-1。说明读取到文件结尾了,就结束循环。否则就将buffer中的信息放到文件输出流中。
while ((len = in2.read(buffer)) != -1) {//
out2.write(buffer, 0, len);
}// 这部分程序是什么意思?实现什么功能。
// 刷新流中信息,以便将图片文件生成
out2.flush();// 是什么意思?
System.out.print("读取成功");
out2.close();
in2.close();
rs2.close();
} catch (ClassNotFoundException ex) {
} catch (SQLException ex) {
} catch (FileNotFoundException ex) {
} catch (IOException ex) {
} finally {
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个,写的是插入数据的SQL
第二个是调用了一个方法
第二个是调用了一个方法
追问
括号里的这个是什么意思?to_date(?,yyyy-mm-dd)是转换成什么类型的。另外您能把我每个标注注释的地方都给详细解释下吗?
追答
to_date是时间格式转换 只有转换为yyy-mm-dd这个格式才能插入数据
?这个是点位符
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个是sql向数据库插入数据 用的方法是PreparedStatement方法插入。第二是文件流.第三个不知道怎么和你说了......
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询