请问各位高手如何才能用SLQ语言把一张图片存入MYSQL数据库中啊?

解决方案 »

  1.   

    http://www.baidu.com/s?wd=%CD%BC%C6%AC+%B4%E6%B7%C5+MYSQL&cl=3
      

  2.   

    FUNCTION JPEGSentinelsAreOK(CONST Filename: TFilename): BOOLEAN;
    VAR
    FileStream: TFileStream;
    w1        : WORD;    // a "word" is always 2 bytes long
    w2        : WORD;
    BEGIN
        ASSERT(SizeOf(WORD) = 2);
        RESULT := FileExists(Filename);
        IF RESULT
        THEN
            BEGIN
            FileStream := TFileStream.Create(Filename, fmOpenRead OR fmShareDenyNone);
            TRY
            FileStream.Seek(0, soFromBeginning); // use seek or position
            FileStream.Read(w1,2);        FileStream.Position := FileStream.Size - 2;
            FileStream.Read(w2,2)
            FINALLY
            FileStream.Free
            END;
            RESULT := (w1 = $D8FF) AND (w2 = $D9FF);
        END;
        END;procedure TForm2.Button3Click(Sender: TObject);
    VAR
    JPEGImage:TJPEGImage;
    fS : TMemoryStream;
    begin
        IF OpenpictureDialog1.Execute
        THEN
        BEGIN
        IF JPEGSentinelsAreOK(OpenpictureDialog1.Filename)
        THEN
            BEGIN
            JPEGImage := TJPEGImage.Create;
            TRY
            JPEGImage.LoadFromFile(OpenPictureDialog1.Filename);
            Image1.Picture.Graphic := JPEGImage;
            try
            fs:=TMemoryStream.Create;
            JPEGImage.SaveToStream(fs);
            Table1.Append;
            Table1.FieldByName('題目ID').AsInteger:=Table1.RecordCount+1;
            TBlobField(Table1.FieldByName('圖片')).LoadFromFile(OpenpictureDialog1.Filename);
            Table1.Post;
            finally
            fs.Free;
            end;
            FINALLY
            JPEGImage.Free
            END;
        END;    END;
    end;
    procedure TForm2.DBGrid1DblClick(Sender: TObject);
    var
    bS : TBlobStream;
    Pic : TJpegImage;
    begin
        if DBGrid1.SelectedField = TDBGrid(Sender).DataSource.DataSet.FieldByName('圖片') then
        bS := TBlobStream.Create(TBlobField(Table1.FieldByName('圖片')), bmWrite); // AdoTable1Picture為欄位名稱。
        try
            Pic:=TJpegImage.Create;
            try
            Pic.LoadFromStream(bS);
            Image1.Picture.Assign(Pic);
        finally
            Pic.Free;
        end;
        finally
        bS.Free
        end;
    end;end.
      

  3.   

    #include <stdio.h>
    #include <stdlib.h>
    #include <mysql/mysql.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/stat.h>/*把文件读入内存,成功返回长度,不成功返回-1*/
    int GetFile(const char *p_szFileName, char *p_buff)
    {
     struct stat l_stat;
     FILE *ifp;
     memset(&l_stat, 0, sizeof(struct stat));
     
     if (stat(p_szFileName, &l_stat) == -1)
     {
      return -1;
     }
     
     ifp = fopen(p_szFileName, "rb");
     
     if (ifp == NULL)
     {
      return -1;
     }
     
     
     if (fread(p_buff, l_stat.st_size, 1, ifp) < 1)
     {
      fclose(ifp);
      return -1;
     }
     
     fclose(ifp);
     return l_stat.st_size;
    }/*把文件从内存写入硬盘,成功返回0,不成功返回-1*/
    int WriteFile(const char *p_szFileName, const char *p_buff, const int p_iSize, int flag = 1)
    {
     int ret;
     FILE *fp;
     
     ret = access(p_szFileName, F_OK);
     if (ret == 0 && flag != 1)
     {
      return -1;
     }
     
     if ((fp = fopen(p_szFileName, "wb")) == NULL)
     {
      return -1;
     }
     
     if (fwrite(p_buff, p_iSize, 1, fp) < 1)
     {
      fclose(fp);
      unlink(p_szFileName);
      return -1;
     }
     
     fclose(fp);
     return 0;
    }int main()
    {
     MYSQL my_con;
     MYSQL_STMT *stmt;
     MYSQL_BIND bind;
     char l_buff[1024*1024];
     int l_errno;
     char l_sql[1024];
     unsigned long  l_flen;
     
     if (mysql_init(&my_con) == NULL)
     {
      fprintf(stderr, "No enough memory!\n");
      return EXIT_FAILURE;
     } if (mysql_real_connect(&my_con, "192.168.33.66", "root", "xxxxxx", "test", 3306, NULL, 0) == NULL)
     {
      fprintf(stderr, "Connection failed\n");
      if ((l_errno = mysql_errno(&my_con)) != 0)
      {
       fprintf(stderr, "Connection:\t<%d>\t%s\n", l_errno, mysql_error(&my_con));
      }
      return EXIT_FAILURE;
     }
     mysql_query(&my_con, "SET NAMES GBK");
     memset(l_sql, 0, sizeof(l_sql));
     //sprintf(l_sql, "INSERT INTO PERSON VALUES(46, '喆汎袆祎', ?, 'F', 23)");
     sprintf(l_sql, "INSERT INTO PERSON VALUES(6, '我爱北京喆汎袆祎', ?, 'F', 23)");
     
     stmt = mysql_stmt_init(&my_con);
     
     if (stmt == NULL)
     {
      goto err_exit;
     }
     
     if (mysql_stmt_prepare(stmt, l_sql, strlen(l_sql)) != 0)
     {
      fprintf(stderr, "mysql_stmt_prepare failed!\n");
      goto stmt_exit;
     }
     
     l_flen = GetFile("./6.jpg", l_buff);
     if (l_flen == -1)
     {
      fprintf(stderr, "Read file error!\n");
      mysql_stmt_close(stmt);
      mysql_close(&my_con);
      return EXIT_FAILURE;
     }
     
     memset(&bind, 0, sizeof(MYSQL_BIND));
     bind.buffer_type = MYSQL_TYPE_BLOB;
     bind.buffer_length = sizeof(l_buff);
     bind.is_null = 0;
     bind.length = &l_flen;
     bind.buffer = l_buff;
     
     if (mysql_stmt_bind_param(stmt, &bind) != 0)
     {
      fprintf(stderr, "BIND ERROR!\n");
      goto stmt_exit;
     }
     fprintf(stdout, "%d\n", l_flen);
     if (mysql_stmt_execute(stmt) != 0)
     {
      fprintf(stderr, "EXECUTE ERROR!\n");
      goto stmt_exit;
     }
     
     mysql_stmt_close(stmt);
     mysql_close(&my_con);
     return EXIT_SUCCESS;stmt_exit:
     fprintf(stderr, "%s\n", mysql_stmt_error(stmt));
     mysql_stmt_close(stmt); 
    err_exit:
     mysql_close(&my_con);
     return EXIT_FAILURE; 
    }