最近编写一个“一本糊涂账”的Java项目,连接mysql数据库进行数据更新和相应的软件界面开发。
其中涉及到了很多MySQL的使用,在这里做一个记录
Java使用mysql的库 JDBC
在Oracle主页下载,是免费的。
项目指导中提供的是 mysql-connector-java-5.0.8-bin.jar
但是在进行开发的过程中,出现了版本功能不一致的现象。
更新版本的jdbc库 mysql-connector-java-8.0.16.jar
jdbc-8.0中的相关driver类com.mysql.cj.jdbc.Driver,但jdbc-5.0中的相关类是com.mysql.jdbc.Driver
1
2
3
4
5
6
7程序代码:
String url = String.format("jdbc:mysql://%s:%d/%s?characterEncoding=%s", ip, port, database, encoding);
return DriverManager.getConnection(url,loginName,password);
出现报错:
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
这个表示我们安装的mysql版本与jdbc driver不匹配。所以要更新到jdbc-8.0。jdbc库
String sql;
(1) 执行sql命令:1
2
3
4
5
6
7
8
9try(Connection connection = DBUtil.getConnection();
Statement s = connection.createStatement();){
s.execute(); //执行命令
ResultSet rs = s.getGeneratedKeys(); //获得当前的rs
} catch (Exception e){
e.printStackTrace();
}(2) 执行sql参数命令:
1
2
3
4
5
6
7PreparedStatement ps = connection.preparedStatement(sql, Statement.RETURN_GENERATED_KEYS); //这里设置Statement.RETURN_GENERATED_KEYS
ps.setString(1, value);
ps.setString(2, value);
ps.execute();
ResultSet rs = ps.getGeneratedKeys();(3) 如何判断ResultSet是否返回数据集
1
判断rs.next()。如果rs.next()存在,则返回数据集结果存在。
(4) 获取返回resultset的id
1
2
3
4
5
6
7
8
9
10
11
12
13
14有两种方式,但是其中一种并不稳定
首先设置实体类
class table_name{
public int id;
public String key;
public String Value;
}
if(rs.next()){
//下边两个获取id的方式否可以,1表示id是表内的第一行,这个需要与db中的一样。
//但“id”并不稳定,有时候会出现找不到column的报错,目前还没发现是为什么
int id = rs.getInt(1);
int id = rs.getInt("id");
}mysql命令
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
40
41mysql > 命令行
**添加数据库**
create database_name
**添加表**
create table config(
id int auto_increment, # id列 int类型 auto_increment 设置自增加
key_ varchar(255),
value varchar(255),
primary key (id) # 设置id为主键
) ENGINE=InnoDB DEFAULT CHARSET=utf8; #InnoDB表示数据库关闭后数据仍然保存
create table record(
id int auto_increment,
spend int, #本次花费
cid int, #对应category中的分类,外键,指向category的主键
comment varchar(255), #备注
date Date, #本次记录发生的时间
primary key(id),
constraint fk_record_category foreign key (cid) references category(id) #设置外键约束
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
**使用数据库**
use database_name
**添加命令 (null表示空出来的id)**
insert into table_name value (null, value1, value2, ...)
insert into table_name (field1, field2, ...) value (value1, value2, ...)
**删除命令**
delete from table_name where id = delete_id
**更新命令**
update config set key_=?, value=?, where id=?
**查询命令**
select * from config where id=?
select * from config order by id desc limit ?,?
# order by id desc 按照id降序来进行排序
# limit ?,? 返回从?到?的记录
select count(*) from config #返回记录总数