在java中,数据库存取技术可分为如下几类:
- JDBC直接访问数据库
- JDO技术(Java Data Object)
- 第三方O/R工具,如Hibernate、Mybatis等
JDBC是JAVA访问数据库的基石,JDO、Hibernate等知识更好的封装了JDBC
JDBC(Java Database Connectivity) Java和数据库的连接技术
JDBC是一个独立于特定数据库管理系统(DBMS)、通用的SQL数据库存取和操作的公共接口(一组API)
作用:
- 定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便的访问数据库资源
- JDBC为访问不同的数据库提供了一种统一的标准,为开发者屏蔽了一些细节问题
- JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定是数据库系统的特点过多的了解,从而大大简化和加快了开发过程
通过案例演示JDBC的使用
JDBC的简单使用步骤
前提:准备mysql的驱动包,加载到项目中
在项目中建立libs文件夹,将mysql-connector-java-5.1.37-bin.jar文件复制到libs目录下,右击build path — add to build path
- 加载驱动
- 获取连接
- 执行增删改查操作
- 关闭连接
public class TestConnection {
public static void main(String[] args) throws SQLException{
//1. 加载驱动
DriverManager.registerDriver(new Driver());
//2. 获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/girls","root","2401");
System.out.println("连接成功");
//3. 执行增删改查
//3.1 编写SQL语句
String sql = "delete from beauty where id = 9";
//3.2 获取执行sql语句的命令对象
Statement statement = connection.createStatement();
//3.3 使用命令对象指向SQL语句
int update = statement.executeUpdate(sql);
//3.4 处理执行结果
System.out.println(update>0?"success":"failure");
//4. 关闭连接
statement.close();
connection.close();
}
}
1. 注册驱动
类的加载时机
- new 对象
- 加载子类
- 调用类中的静态成员
- 通过反射
使用 new 对象 的方式加载类的不足:
- 属于编译期加载,如果编译期间该类不存在,则直接报编译错误,也就是依赖性太强
- 导致Driver对象创建了两遍,效率较低
采用反射的方式加载类
- 属于运行期间加载,大大降低了类的依赖性
- Driver对象仅仅创建了一遍,效率较高
//1. 加载驱动
//使用 new 对象 的方式加载类,属于老方法,不推荐使用
DriverManager.registerDriver(new Driver());
//采用反射的方式加载类
Class.forName("com.mysql.jdbc.Driver");
2. 获取连接
将信息放在properties配置文件中
name=root
password=2401
url=jdbc:mysql://localhost:3306/girls
driver=com.mysql.jdbc.Driver
//2. 获取连接
//方式一:
DriverManager.getConnection("jdbc:mysql://localhost:3306/girls","root","2401");
//方式二:
DriverManager.getConnection("jdbc:mysql://localhost:3306/girls?user=root&password=2401");
//方式三:
//在src下新建一个properties配置文件,将一些信息放在其中
//通过properties对象保存配置文件中的信息
Properties info = new Properties();
info.load(new FileInputStream("src\\jdbc.properties"));
String user = info.getProperty("name");
String password = info.getProperty("password");
String driver = info.getProperty("driver");
String url = info.getProperty("url");
Connection connection = DriverManager.getConnection(url,user,password);
System.out.println("连接成功");
3. 执行增删改查
//查
String sql = "select id,name,sex from beauty";
//增
String sql = "insert into beauty values(null,'小龙女','女','2000-1-1','110',null,3)";
//删
String sql = "delete from beauty where id=13";
//改
String sql = "update beauty set name='迪丽热巴' where id=4";
//获取执行sql的命令对象
Statement statement = connection.createStatement();
//执行sql语句
//方式一:执行任何sql语句,增删改返回false,查如果查询到结果集,返回true,否则,返回false,因为结果非常不具体,所以不常用
boolean execute = statement.execute(sql);
//方式二:执行增删改查语句,返回受影响的行数
//增删改
int update = statement.executeUpdate(sql);
//查
//执行查询语句,返回一个结果
ResultSet set = statement.executeQuery(sql);
while(set.next()) {
int id = set.getInt(1);
String name = set.getString(2);
String sex = set.getString(3);
System.out.println(id+"\t"+name+"\t"+sex+"\t");
}
set.getxx获取有两种方法:
方式一:
getxx(列的索引)
例如:
int id = set.getInt(1);
String name = set.getString(2);
String sex = set.getString(3);
注意:这里的列的索引是sql语句查询出的表的列索引,不是原表列的索引。
例如String sql = "select name,id,sex from beauty";
,这里name列的索引值为1,id列的索引值为2
方式二:
getxx(别名)
例如:
int id = set.getInt("id");
String name = set.getString("name");
String sex = set.getString("sex");
如果我们并不知道数据类型,可以使用:
getObject(列的索引 | 别名)
4. 关闭连接
//关闭连接,释放资源,避免连接处过多,导致数据库崩溃
statement.close();
connection.close();
set.close();