import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.text.SimpleDateFormat;
import java.sql.Statement;
import java.sql.ResultSet;
import java.io.*;
public class BlobDemo{
//定義MYSQL的數據庫驅動程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
//定義MYSQL的數據庫的連接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn";
//MYSQL數據庫的連接用戶名
public static final String DBUSER = "root";
//MYSQL數據庫的連接密碼
public static final String DBPASS = "mysqladmin";
public static void main(String args[]) throws Exception{
Connection conn = null; //數據庫連接
PreparedStatement pstmt = null; //數據庫的操作,預處理
String name = "任我行";
String sql = "INSERT INTO userblob(name,photo) VALUES (?,?)";
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
pstmt = conn.prepareStatement(sql);
File file = new File("d:" + File.separator + "大对象.jpg");
InputStream in = new FileInputStream(file);
pstmt.setString(1, name);
pstmt.setBinaryStream(2, in, (int)file.length());
pstmt.executeUpdate();
pstmt.close(); //這句報異常
conn.close();

}
}

解决方案 »

  1.   

    public class Test2 {
     /**
     * @param args
     */
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      
      //定义需要的对象
      PreparedStatement ps=null;
      ResultSet rs=null;
      Connection ct=null;
      
      try{
       
       //加载驱动
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       //得到连接
       ct=DriverManager.getConnection("jdbc:odbc:hello","sa","123");
       
       //创建ps
    //   ps=ct.prepareStatement("select * from stu");
    //   rs=ps.executeQuery();
    //   while(rs.next())
    //   {
    //    System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3)+" "+rs.getInt(4)+" "+rs.getString(5)+" "+rs.getString(6));
    //   }
       
       //添加数据使用PreparedStatement
       ps=ct.prepareStatement("insert into stu values(?,?,?,?,?,?)");
       ps.setString(1, "006");
       ps.setString(2, "不会");
       ps.setString(3, "女");
       ps.setInt(4, 55);
       ps.setString(5, "006");
       ps.setString(6, "006");
       //执行
       int i=ps.executeUpdate();
       if(i==1)
       {
        System.out.println("添加成功");
       }else
       {
        System.out.println("添加不成功");
       }
      }catch(Exception e)
      {
       e.printStackTrace();
      }finally{
       //关闭资源
       try{
        if(rs!=null)
        {
         rs.close();
        }
        if(ps!=null)
        {
         ps.close();
        }
        if(ct!=null)
        {
         ct.close();
        }
       }
       catch(Exception e){
        e.printStackTrace();
       }
      }
      
     }
    }一个例子,lz自己看看
      

  2.   

    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 '[?\0??|?÷?\'?y??§?SQ]-????gg?“?2y5?^(?~?à??k???o?é6ê[?—?p2~¤Wó?qà+?|?\'' at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    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:1052)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330)
    at BlobDemo.main(BlobDemo.java:30)
    貌似是二進制讀取圖片錯誤,看的視頻,視頻上的能運行,我的不行
      

  3.   

    InputStream in = new FileInputStream(file);
    pstmt.setString(1, name);
    pstmt.setBinaryStream(2, in, (int)file.length());很少这样存,
    我觉得pstmt.setBinaryStream(2, in, (int)file.length()); 有问题!
      

  4.   

    File file = new File("d:" + File.separator + "大对象.jpg");
    这句 好像有问题 
    看看":"是中文状态下还是英文状态下的 
    你的数据库 支持不支持 中文  如果 不支持中文 大对象 到了数据库中直接是乱码,也许会报出语法错误的异常来