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();
}
}