在使用Java连接Mysql数据库之前我们得先下载一个Mysql JDBC驱动程序,为了防止大家迷路,我把链接放下面了
【免费】MysqlJDBC驱动程序资源-CSDN文库
下载完了之后,我们就需要导入Mysql JDBC驱动程序啦~
1.首先我们先创建一个Java文件,比如这里我取的就是Mysql-Connect-Java,然后在项目中创建一个目录,比如这里我取的就是 lib (名字可以随便取,但是不要带有中文/特殊字符)
2.把下载好的 jar 包拷贝到 lib 目录中,这里的拷贝可以直接右键选择jar包复制,然后到Java程序里面选择 lib 这个包右键粘贴,也可以直接在文件夹中进行拷贝,比如我们点击下方的jar包选择复制,然后进入到 lib 文件夹中选择粘贴
3.右键刚才的 lib 目录,点击add as library (目的是告诉idea,这个 lib 目录是一个“库”目录)
4.添加完“库”之后,idea就能自动分析出jar包里面有什么了
OK,以上就是我们的所有准备工作了,下面进入正是的代码环节
创建数据源
1.首先我们得先创建一个数据源对象,这个描述了数据从哪里来,数据库服务器所在的位置
DataSource dataSource = new MysqlDataSource();
这个DataSource是Java标准库,JDBC自带的接口,而后面的MysqlDataSource是来源于刚才导入的 .jar 包
2.给这个对象设置必要的属性
1)数据库服务器在哪里
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java112?CharacterEncoding=utf8&useSSL=false");
下面是对这一长串的代码解释:首先
① jdbc:mysql这个的意思是使用JDBC API来连接Mysql数据库,如果要连接其他的数据库,就把mysql换成你要连接的那个数据库的名字
②127.0.0.1这是一个本机地址,应该你的mysql服务器和Java代码都是在同一个电脑上的,所以可以这样写,如果是在不同主机上,那么就再写别的地址
③3306这个一个端口号,用来区分一个主机上的应用程序的,mysql默认端口号就是3306
④java112这是我的一个数据库名字
⑤CharacterEncoding这个是指定字符编码为 utf8 ,也可以写成utf-8,两者相同
⑥useSSL=false这个是关闭加密
2)访问服务器的账户是啥
((MysqlDataSource) dataSource).setUser("root");
在数据库里面root默认为最高权限的用户,也就是超级管理员 ,当然这个也可以根据你自己的需求来写
3)访问服务器的密码是啥
((MysqlDataSource) dataSource).setPassword("123456");
这个密码就是当初装数据库时候设置的密码
进行到这一步只是完成了针对数据源对象进行初始化,并没有真正和数据库服务器进行任何网络通信,要想完成这一步请往下看
建立网络连接
Connection connection = dataSource.getConnection();
我们输入这一串代码,但是这里面有两个细节需要注意:
1.在输入dataSource.getConnection会报红线,这时候不要慌,把光标移动到报红线的地方,按住Alt+Enter,此时我们可以点击第一个抛出异常也可以选择第二个try-catch一下
2.我们在选择Connection的时候会出现两种,上面一种是JDBC API定义的一个接口,它代表数据库的连接,下面一种是MySQL特定的JDBC驱动程序中提供的一个类,但是在这里必须使用上面那一种,否则会出现问题
这是以上全部代码
DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");//和数据库服务建立网络连接Connection connection = dataSource.getConnection();
到这一步就可以先运行一下,如果正常连接成功是不会报任何错误的,如果哪一步出现问题,那么报错信息也会给出具体提示的
构造sql语句并执行
首先我们可以看到原表的数据是这样的:
下面这段代码演示了通过java代码将数据写入MySQL数据库
String sql = "insert into user values(6,2077,'原神5区')";
PreparedStatement statement = connection.prepareStatement(sql);
int n = statement.executeUpdate();
System.out.println("执行语句:"+n+"条");
PreparedStatement
提供了预编译SQL语句的能力- connection: 这是到数据库的连接对象
- prepareStatement(sql): 这是一个方法调用,作用是使用当前的数据库连接
connection
创建一个PreparedStatement
对象。参数sql
是一个包含占位符的SQL语句字符串
执行完上述语句可以看见数据表中的数据从5条变成了6条
executeUpdate()只针对DDL语句,
执行后会返回一个整数,表示受影响的行数。
- 对于
INSERT
语句,返回值表示插入了多少行数据。 - 对于
UPDATE
语句,返回值表示有多少行数据被更新。 - 对于
DELETE
语句,返回值表示有多少行数据被删除。
对于查询语句我们需要使用另一种,也就是executeQuery()
String sql = "select * from user";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
while(resultSet.next()){System.out.print(resultSet.getInt("id")+" ");System.out.print(resultSet.getInt("amount")+" ");System.out.println(resultSet.getString("accout"));
}
但是上述写法可能会引起“sql注入攻击”,那么我们应该怎样改进呢?可以使用 ?来占位置,后续再替换掉,代码如下
Scanner scanner = new Scanner(System.in);int id = scanner.nextInt();scanner.nextLine();//读取换行符int amount = scanner.nextInt();scanner.nextLine();//读取换行符String accout = scanner.nextLine();String sql = "insert into user values(?,?,?)";PreparedStatement statement = connection.prepareStatement(sql);statement.setInt(1,id);statement.setInt(2,amount);statement.setString(3,accout);int n = statement.executeUpdate();
讲到这里已经可以简单正确的使用 java 代码来操作数据库了,后续还有其他升级版的操作请多关注