目录
1.创建数据源对象,数据源对象就描述了要访问的数据库是什么,在哪?
全称:Java Database Connectivity(Java数据库连接),是由标准库提供的一套API,使得Java可以通过这些接口实现与数据库的连接,为多种关系数据库提供同一访问。
JDBC在使用的时候,需要下载并导入对应的数据库的驱动包(以下使用Java代码来操作MySQL),建议大家去官网(
)找到对应的jar包,以下为官网链接
Maven Repository: Search/Browse/Explore (mvnrepository.com)
1.创建一个与.idea同级的包,起个名字叫:“lib”~;
2. 将jar包拷贝到lib中
3.右击lib标记成存放库文件(jar包)的目录,然后,IDEA就可以识别目录中的jar包
这里可以看到jar包可以展开了,说明IDEA可以对其进行识别
以上就是准备过程~
- //来自标准库JDBC的接口
- import javax.sql.DataSource;
- //来自MySQL的驱动包(jar包)
- import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
-
-
- DataSource dataSource = new MysqlDataSource();
解释和分析:DataSource描述了在哪里能找到数据库数据,其实也可以使用DriverManager,但是更推荐DataSource,因为DriverManager每次getConnection都需要重新建立连接,而DataSource是内置连接池,类似String的字符串常量池,连接复用,提高效率
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false");
解释和分析:
jdbc:mysql是协议名称;
//127.0.0.1是IP地址,描述了网络上一个主机的位置,127.0.0.1是一个特殊的地址,无论IP是什么,都可以用127.0.0.1表示自己;
3306是端口号,用来区分主机上的不同应用程序,在安装数据库时,其中一个环节就是配置端口号,默认就是3306;
user是要访问的数据库的名字(通过create database创建的);
characterEncoding=utf8是刻划断使用的字符集,要和服务器那边一致,所以这里使用utf8;
useSSL=false这里表示不加密;
- ((MysqlDataSource)dataSource).setUser("root");
- ((MysqlDataSource)dataSource).setPassword("123456");
解释和分析:输入登录用户名,和密码,用户名一般同一是root,这时MySQL自带的,密码就是安装数据库时设置的密码
- //建立连接,注意这里要抛异常
- Connection connection = dataSource.getConnection();
解释和分析:和数据库服务器连接,再进行后续操作
- //通过用户输入来改变数据库中的值a
- Scanner scanner = new Scanner(System.in);
- System.out.println("请输入员工ID:");
- int ID = scanner.nextInt();
- System.out.println("请输入员工姓名:");
- String name = scanner.next();
- //执行构造的sql语句
- // ? 是一个占位符,只是占个位置,后面会被替换成其他的东西
- String sql = "insert into staff values(?, ?)";
- PreparedStatement statement = connection.prepareStatement(sql);
- //1 2 数字表示占位符下标,默认从1开始,set方法是一个系列:setXXX(XXX表示类型)
- statement.setInt(1, ID);
- statement.setString(2, name);
- System.out.println(statement);
解释和分析:通过用户输入数据来确定插入的值,注意这里最好不要用字符串拼接的方式:1.代码很乱;2.容易引发SQL注入漏洞——被黑客攻击
- //执行sql,方法有两种:
- //executeUpdate 对应插入删除修改语句. 返回值表示这次 SQL 操作影响到的行数.
- //executeQuery 对应查询语句. 返回值则是返回的临时表数据.
- int n = statement.executeUpdate();
- System.out.println("n = " + n);
- //最后关闭释放相关资源(注意,先创建的后释放,后创建的先释放)
- statement.close();
- connection.close();
解释和分析:
注意要先创建的后释放,后创建的先释放!
问题:为什么要释放?new一个对象要消耗空间资源,为什么以前没有释放过?
那个是Java内置的GC机制,帮咱释放了,但只是能回收对象,也不是万能的;
1.数据库Statement和PreparedStatement有什么联系和区别?
联系:PreparedStatement继承自Statement,都是接口;
区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高;
2.数据库连接有哪些方式?分别有什么区别
1.通过DriverManager(驱动管理类)的静态方法获取;
2.通过DataSource(数据源)对象获取;
区别:DriverManager每次getConnection都需要重新建立连接,而DataSource是内置连接池,类似String的字符串常量池,连接复用,提高效率;
这里基于JCBC写的代码本质上是一个MySQL客户端,未来工作中大部分的数据库操作,都是通过代码来完成的;实际开发中,很少会直接使用JDBC,代码比较啰嗦,实际开发中会用到一些库/框架 简化这里的数据库操作(MyBatis),各种库和框架本质上又是对JDBC进行的封装;