0%

    本文首发于cartoon的博客

    转载请注明出处:https://cartoonyu.github.io/cartoon-blog

    近些时间在开始学MySQL,安装挺顺利的,按照网上现成的教程就能安装成功。
    但是,在输入

1
mysql -uroot -p

    再输入密码时,遇到了这个情况

1
Access denied for user 'root'@'localhost' (using password: YES)

    在网上找了很多解决办法,但是基本只有一个,在.ini文件中的mysqld条目添加

1
skip-grant-tables

    然后重启服务器,再按照刚刚的步骤再来一遍(最后不输入密码),但是还是一条语句把我拦了下来

1
Access denied for user 'root'@'localhost' (using password: NO)

    综合了网上很多方法,自己一个一个拼接着去试,最后成功了
    总体上的思想还是修改.ini配置文件的内容,不过是通过命令行的形式修改,不知道是不是因为版本迭代了把以前那个直接修改文件的方法屏蔽了,无论如何,通过命令行修改在MySQL 8.0上是可以的。

    下面开始吧。

  • 以管理员身份打开cmd,切换到MySQL的bin目录
  • 关闭MySQL服务器
1
net stop mysql
  • 跳过输入密码的步骤(注意:文件名字与路径要与自己的吻合)
1
mysqld --defaults-file="D:\MySQL\my.ini" --console --skip-grant-tables
  • 如果出现类似截图圈起来的语句则说明成功

  • 重启服务器

1
net start mysql
  • 登录MySQL服务器
1
mysql -uroot -p
输入密码之后就能登录成功了。(数字1跟字母l很像很像)
  • 到这一步差不多就能完成了,但是当我输入
1
show databases;

    MySQL给我的反馈是:

1
You must reset your password using ALTER USER statement before executing this statement.

    我的猜测应该是MySQL认为安装时提供的随机密码不安全,让用户重置密码。
    网上找了一下,然后找到的现成办法
    参考文章:https://dev.mysql.com/doc/ref...

  • 密码永不过期的

    1
    ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码' PASSWORD EXPIRE NEVER;
  • 密码有限期的

    1
    ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码' PASSWORD EXPIRE;

         然后重新登录一下服务器就能正常的操作了。

    本文首发于cartoon的博客

    转载请注明出处:https://cartoonyu.github.io/cartoon-blog

    这是我的第一篇博文,请大家多多指教!

    大概一个月之前,在跟朋友合作开发一个APP的过程中,我们发现到一个问题:图片的存储。因为数据库没有图片这种数据类型,当用户上传的图片需要存储的时候,我们无法将其直接放进数据库中。

    在经历了几天的探索,结合郭神的《第二行代码》调用摄像头拍照以及从相册中选择图片这两小节,我们发现了Android里面的一个图片类:Bitmap。最终发现,利用Bitmap及其相关的工具类即可实现图片的存储以及显示。

    主要用到的工具类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Base64;

import java.io.ByteArrayOutputStream;

/**
* Created by cartoon on 2017/12/9.
*/

public class StringAndBitmap {
//图片与String之间的转换,便于将图片存储在数据库中
private Bitmap bitmap;
private String string;
public Bitmap stringToBitmap(String string){
//数据库中的String类型转换成Bitmap
if(string!=null){
byte[] bytes= Base64.decode(string,Base64.DEFAULT);
bitmap= BitmapFactory.decodeByteArray(bytes,0,bytes.length);
return bitmap;
}
else {
return null;
}
}
public String bitmapToString(Bitmap bitmap){
//用户在活动中上传的图片转换成String进行存储
if(bitmap!=null){
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();// 转为byte数组
string=Base64.encodeToString(bytes,Base64.DEFAULT);
return string;
}
else{
return "";
}
}
}

    下面已经获取到数据库中已经存储了的图片的String语句string,只需要在需要显示图片的组件中调用关于显示Bitmap的方法即可。

1
2
imageView.setImageBitmap(stringAndBitmap.stringToBitmap(string);
//这里的imageView为页面组件绑定的ID,string为从数据库获取到图片的string形态

    而存储用户上传的图片则需要这样即可。

1
2
3
bitmap=((BitmapDrawable)imageView.getDrawable()).getBitmap();
string=stringAndBitmap.bitmapToString(bitmap);

    经过一些数据库的操作,即可以把用户上传的图片存入到数据库中。

    因为数据库部分不是我负责的,所以我的建议是数据库中的类型选择BLOB(MySQL),因为已经实现过是可行的。

     以上就是之前开发的一点小技巧,也是经过痛才领会出来的。我们还没有测试过资源的消耗以及延时的情况,但确实是可以存储图片到数据库中的。

    如果你们有任何对这篇博文的建议或者意见的话,欢迎私信或者在下方评论。最重要的是可以帮助到像我们一样的入门者。