初识java-JDBC

JDBC


一、前言

在日常生活中一般使用代码来操作数据库,MySQL会给主流的语言提供各种API(现成的函数/类),MySQL是由C/C++实现的,其他语言要操作数据库就要间接访问,数据库服务器是本体,通过代码写的程序,调用MySQL的API实现的是一个客户端,相当于服务器提供的客户端。即就要按照MySQL服务器的要求,构造出响应的网络请求就行了。
通过代码访问MySQL就是实现一个MySQL客户端(只要能按照人家MySQL的约定的网络请求格式来构造请求)

二、通过JAVA操作MySQL (JDBC)

1.先得到MySQL的API

在这些地方都能得到:
1.官方网站
2.Maven Repository
3.github主页
步骤:
1.在Maven Repository中找到MySQL的包,下载.jar包
初识java-JDBC
2.把.jar包导入项目中
初识java-JDBC
导入进去,记得点击确定,右键目录找到 Add as Library ,检查自己的包是否导入
点击File 之后找到 Project Structure 再点Libraries
初识java-JDBC
这样就是导入成功了

2.具体流程

1.先和数据库建立连接

(1)先创建一个数据源

DataSource dataSource=new MysqlDataSource();

(2)给数据源设置属性,数据源就是告诉代码数据库服务器在哪里。

((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/homework?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("123456");

端口号后面的是要连接的数据库的名字
(3)通过getConnection()方法来建立连接, 选择Connection 时一定要选 java.sql后缀的

Connection connection=dataSource.getConnection();

2.拼装SQL语句

1.先写一条SQL语句

String sql="insert into purchase values (1,2,3,5)";

2.实际上我们需要的是一个“语句对象” ,需要使用 PreparedStatement来构造

PreparedStatement statement=connection.prepareStatement(sql);

3.执行SQL语句

根据所执行的SQL语句不同,选择不同的语句执行
如果所执行的语句是insert, delete,update语句使用executeUpdate()
如果当前语句是select使用executeQuery()
分类依据就是是否更新,增删改都是更新过的,有更新就选Update
查询没有更新,查询语句就选Query,查询语句不仅仅返回结果正确与否,还要返回查询出的结果。
这是根据插入语句写的,插入,删除,修改语句返回结果1,即成功,返回结果0就是失败了

int ret=statement.executeUpdate();
System.out.println("ret="+ret);

而如果语句是查询语句Select和其他三种都是不同的,需要获取到当前纪录

 ResultSet resultSet=statement.executeQuery();
        while(resultSet.next()){
            //获取到当前纪录,(当前行的每一列)
            int order_id=resultSet.getInt("order_id");
            int customer_id=resultSet.getInt("customer_id");
            int goods_id=resultSet.getInt("goods_id");
            int nums=resultSet.getInt("nums");
            System.out.println(order_id+", "+customer_id+", "+goods_id+", "+nums);
        }

并且返回的结果中带有数据库的信息。

4.释放申请的资源

statement.close();
connection.close();
 resultSet.close();

释放顺序和执行顺序相反

这种和数据库建立连接的方式就是一次只能插入一条数据,是和数据库连接,将数据写死了
我们应该动态建立和数据库的连接就将sql语句中需要插入的部分,写成?占位符,使用statement.set(类型)来给?赋值

总结

服务器可能会收到很多的请求.针对每一个请求,都可以创建Connection,PreparedStatement,ResultSet 对象,但是这些请求之间彼此共用一个 DataSource
如果当前服务器收到的请求很多,那么也一定有很多Connection,PreparedStatement,ResultSet 对象,但是建立Connection对象的开销,远远比其他两个大,因为是要建立连接,所有我们使用.getConnection()方法时并不是每次调用时都创建新的连接对象,就是在数据库连接池中寻找,如果找到了,就不用建立新的连接
可以写一个懒汉式单例来减少创建对象

public class DBUtil {
    //通过这个类,保证DataSourse 是一个唯一的实例
    //其中static 是表明当前是类成员
    private static DataSource dataSource=null;
    public static DataSource getDataSource(){
        if(dataSource==null){
            dataSource=new MysqlDataSource();
            ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/homework?characterEncoding=utf8&useSSL=false");
            ((MysqlDataSource) dataSource).setUser("root");
            ((MysqlDataSource) dataSource).setPassword("123456");
            
        }
        return dataSource;
    }
}
上一篇:Spring常用的注解(绝对童叟无欺)


下一篇:Spring认证~利用Profile配置不同的运行环境