如果我通过localhost
或127.0.0.1
访问我的本地MySQL数据库,则会收到错误消息java.sql.SQLSyntaxErrorException: Access denied for user ''@'localhost' to database 'mydb'
。
我也尝试过使用参数&user=crm
。
如果我使用extrernal ip我可以登录没有问题。
我正在使用mysql-connector-java:6.0.5
我错过了什么吗?
private static Connection connect;
public static Connection getDatabaseConnection() {
if (connect == null) {
try {
connect = DriverManager
.getConnection("jdbc:mysql://localhost:3306/mydb?serverTimezone=Europe/Berlin","crm",null);
} catch (SQLException e) {
e.printStackTrace();
}
}
return connect;
}
编辑:添加端口号,即使它没有解决问题
EDIT2:
mysql> select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| crm | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| pma | localhost |
| root | localhost |
+------+-----------+
6 rows in set (0.00 sec)
EDIT3:
如果密码不是null
而不是空String
,则使用用户名。 mayby它的mysql-connector-java:6.0.5
bug
EDIT4:
问题不是mysql-connector-java:6.0.5
,因为如果我使用标准的MySQL cli客户端,我会得到相同的bahavour。我用mysql -u crm
登录数据库,然后得到一个shell。如果我现在尝试更改为mydb
数据库,则会出现以下错误
mysql> use mydb
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mydb'
即使im manualy设置权限我仍然会得到相同的错误
GRANT ALL PRIVILEGES ON `mydb`.* TO 'crm'@'%';
由于某种原因MySQL不喜欢我的不存在的密码
答案 0 :(得分:0)
用户" crm"主机列可能未设置为接受来自localhost的请求。
请运行以下MySQL命令:
从mysql.user选择用户,主机;
检查是否代替主持人"%"是他们与否。 如果没有按照以下命令运行:
更新mysql.user set host ="%" user =" crm&#34 ;;
从mysql.user选择用户,主机;
现在它应该显示"%"。
希望它有所帮助。
答案 1 :(得分:-1)
export function SimpleImage(props) {
const {
src,
width = 200,
height = 200,
rounded,
circle,
status,
onLoad,
onFail,
} = props;
const mainWrapperStyle = style({
backgroundColor: 'white',
backgroundSize: 'contain',
backgroundRepeat: 'none',
boxSizing: 'border-box',
position: 'relative',
width,
height,
});
const roundedStyle = style({
borderRadius: '10%',
overflow: 'hidden',
});
const circularStyle = style({
borderRadius: '50%',
overflow: 'hidden',
});
const defaultImageStyle = style({
opacity: 0,
transisition: 'opacity 150ms ease',
});
const loadedImageStyle = style({
opacity: 1,
});
let imageStyle = defaultImageStyle;
let wrapperStyle = mainWrapperStyle;
if (rounded) {
wrapperStyle = merge(mainWrapperStyle, roundedStyle);
} else if (circle) {
wrapperStyle = merge(mainWrapperStyle, circularStyle);
}
if (status === LOADED) {
imageStyle = merge(defaultImageStyle, loadedImageStyle);
}
const image = (<img
{...imageStyle}
src={src}
width={width}
height={height}
role="presentation"
onLoad={this.onLoad}
onError={this.onFail}
/>);
let statusIndicator = null;
if (this.state.status === LOADING) {
statusIndicator = (<LoadingIndicator />);
} else if (this.state.status === FAILED) {
statusIndicator = (<ErrorIndicator />);
}
return (<div {...wrapperStyle}>
{statusIndicator}
{image}
</div>);
}
const Image = compose(
withState(
'status',
'setStatus',
({ src })=> src? LOADING: PENDING
),
withProps(
({ setStatus }) => ({
onLoad() {
setStatus(LOADED);
},
onFail() {
setStatus(FAILED);
},
reset() {
setStatus(PENDING)
},
resetToLoading() {
setStatus(LOADING)
},
})),
lifecycle({
componentWillReceiveProps(nextProps) {
if(nextProps.src == null){
this.props.reset();
} else if(nextProps.src !== this.props.src) {
this.props.resetToLoading();
}
}
})
)(SimpleImage);
请尝试以上连接。让我知道它是否有效。