JDBC学习

1 什么是JDBC
jdbc的全称是(Java Data Base Connectivity,java数据库连接),其主要是由一些类和接口构成的API,它是J2SE的一部分,由java.sql,javax.sql包组成。是一种用于执行SQL语句的Java API,可以为多种关系数据库提供同一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,根据这种基准可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
2 怎么使用JDBC
这里写图片描述
JDBC链接数据库的主要步骤:
1 注册驱动
2 创建链接
3 创建能够执行sql语句的statement等对象
4 执行语句
5 处理结果
6 释放资源

注册驱动的方式有三种:
Class.forName(“com.mysql.jdbc.Driver”);——将驱动类com.mysql.jdbc.Driver加载到虚拟机中。推荐这种方式,不会对具体的驱动类产生依赖。
DriverManager.registerDriver(com.mysql.jdbc.Driver);——会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。
System.setProperty(“jdbc.drivers”, “driver1:driver2”);——虽然不会对具体的驱动类产生依赖,但注册不太方便,所以很少使用。
建立连接:
Connection conn = DriverManager.getConnection(url, user, password);
url格式:
JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…
user,password可以用“属性名=属性值”方式告诉数据库。
其他参数如:useUnicode=true&characterEncoding=GBK(用于控制数据库与应用程序之间的编码,防乱码)
释放资源
释放ResultSet, Statement,Connection。(一般都是进行close)
数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机(?)。Connection的使用原则是尽量晚创建,尽量早的释放。

还有很重要的是数据库的事务
举个例子

public void addStudent(String studentName, int studentAge, String studentPhone) throws Exception
{
    Connection connection = DBConnection.mysqlConnection;
    PreparedStatement ps = connection.prepareStatement("insert into student values(null,?,?,?)");
    ps.setString(1, studentName);
    ps.setInt(2, studentAge);
    ps.setString(3, studentPhone);
    if (ps.executeUpdate() > 0)
        System.out.println("添加学生信息成功");
    else
        System.out.println("添加学生信息失败");    
}



public static void main(String[] args) throws Exception
{
    StudentManager.getInstance().addStudent("Betty", 17, "55555555");
}

运行就不运行了,反正最后结果是”添加学生信息成功”,数据库里面多了一条数据。注意一下:

1、增删改用的是executeUpdate()方法,因为增删改认为都是对数据库的更新

2、查询用的是executeQuery()方法,看名字就知道了”Query”,查询嘛

可能有人注意到一个问题,就是Java代码在insert后并没有对事物进行commit,数据就添加进数据库了,也能查出来,这是为什么呢?因为JDK的Connection设置了事物的自动提交。如果在addStudent(…)方法里面这么写:

Connection connection = DBConnection.mysqlConnection;
connection.setAutoCommit(false);

这时就需要我们手动提交:

public void addStudent(String studentName, int studentAge, String studentPhone) throws Exception
{
    Connection connection = DBConnection.mysqlConnection;
    connection.setAutoCommit(false);
    PreparedStatement ps = connection.prepareStatement("insert into student values(null,?,?,?)");
    ps.setString(1, studentName);
    ps.setInt(2, studentAge);
    ps.setString(3, studentPhone);
    try
    {
        ps.executeUpdate();
        connection.commit();
    } 
    catch (Exception e)
    {
        e.printStackTrace();
        connection.rollback();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章