当前位置:编程学习 > JAVA >>

请教:jdbc插入二进制文件问题


static void create() throws SQLException, IOException, FileNotFoundException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;

try {
conn = JdbcUtils.getConnection();
String sql = "insert into big_bit(big_bit) values(?)";
ps = conn.prepareStatement(sql);
File file = new File("1327037473696.jpg");
InputStream in = new BufferedInputStream(new FileInputStream(file));
ps.setBinaryStream(1, in);
int i = ps.executeUpdate();
System.out.println(i);
in.close();
} finally {
JdbcUtils.free(rs, ps, conn);
}
}

数据库列big_bit是blob类型的
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'R;F碗蒇n撼ア竉?U爸5+M>5#觍Y妍l尟8#q騹霂滣璵W臈v鷙挾V*诋?Co;' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361)
at cn.lzy.base.BlobTest.create(BlobTest.java:72)
at cn.lzy.base.BlobTest.main(BlobTest.java:27)

运行是说我sql语法错误,看了和对了好几遍都没发现问题,求教。 --------------------编程问答--------------------   File file = new File(path);

  InputStream in = new BufferedInputStream(new FileInputStream(file));

  ps.setBinaryStream(1, in, file.length()); --------------------编程问答--------------------
引用 1 楼 rui888 的回复:
  File file = new File(path);

  InputStream in = new BufferedInputStream(new FileInputStream(file));

  ps.setBinaryStream(1, in, file.length());

要不要length都一样的,有不要length的方法,也试过加上length还是不行,报sql语法问题 --------------------编程问答-------------------- 你File 没有路径?
在什么地方 如 "C:\\B.jpg" --------------------编程问答--------------------
引用 3 楼 rui888 的回复:
你File 没有路径?
在什么地方 如 "C:\\B.jpg"

用的是Eclipse,所以这个文件是在工作空间的根目录下的 --------------------编程问答-------------------- 你换个路径试试看,猜测是 读取数据的问题。 --------------------编程问答--------------------
引用 5 楼 rui888 的回复:
你换个路径试试看,猜测是 读取数据的问题。

换了,没用
我猜是不是setBinaryStream那里有问题还是我的sql语句有问题,应该是这两个其中一个吧 --------------------编程问答-------------------- 每个数据库的驱动支持不同,楼主最好查看他的驱动文档的说明
补充:Java ,  Java相关
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,