分享

jdbc程序编写步骤和原理

 以怪力乱神 2019-01-15

首先要加载数据库相应的驱动,以mysql为例

下载mysqljava驱动,例如 mysql-connector-java-8.0.1

这就是mysql的驱动,把它放到项目当中建立依赖,就可以使用相关API操作mysql数据库了

 

先来一个简单的使用示例(并不规范)

public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1.注册驱动
Class.forName("com.mysql.jdbc.Driver");// 推荐方式

// 2.建立连接
String url = "jdbc:mysql://localhost:3306/jdbc";
String user = "root";
String password = "";
Connection conn = DriverManager.getConnection(url, user, password);

// 3.创建语句
Statement st = conn.createStatement();

// 4.执行语句
ResultSet rs = st.executeQuery("select * from user");

// 5.处理结果
while (rs.next()) {
System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t"
+ rs.getObject(3) + "\t" + rs.getObject(4));
}

// 6.释放资源
rs.close();
st.close();
conn.close();

}

从现在开始正式介绍jdbc

 

1.注册驱动(介绍三种方式)

 

由于只有先通过DriverManager注册驱动,才能获得数据库连接,所以第一步要先注册驱动

注册驱动的关键就是

DriverManager.registerDriver(所使用的数据库对应的驱动类);

推荐方式

Class.forName("com.mysql.jdbc.Driver");

这种方式为什么能注册驱动呢?因为这行代码表示类加载器加载com.mysql.jdbc.Driver这个类,而加载这个了这类就要执行这个类的静态代码块,我们看这个类的静态代码块就会一目了然

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}

static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}

我们可以看到静态代码块中执行了注册驱动的代码

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

 

这段代码其实注册了两次驱动,registerDriver方法本身就是注册驱动的关键代码,而方法中new的新对象又是Driver对象,Driver类一旦加载其静态代码块又注册一次驱动。因此产生了垃圾驱动,所以不推荐使用这种方式。(而且其实仅仅new出对象也注册了驱动,不需要使用registerDriver方法

 

System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");

 

这种方式为什么能像第一种方式一样注册驱动呢?因为DriverManager类会初始化,而在初始化的过程中会查询系统属性,如下

private static void loadInitialDrivers() {
String drivers;
try {
drivers = AccessController.doPrivileged(new PrivilegedAction<String>() {
public String run() {
return System.getProperty("jdbc.drivers");
}
});
} catch (Exception ex) {
drivers = null;
}
//...
}

这种方式可以同时注册多个驱动,只需要在setProperty方法的第二个参数中添加就好,多个驱动之间用冒号隔开。

  

 

 

2.建立连接

 

需要数据库url,用户名和密码才能建立连接

 

示例

String url="jdbc:mysql://localhost:3306/tdb?useSSL=false";
String userName="loubth";
String password="loubth";
Connection conn= DriverManager.getConnection(url,userName,password);

注意urllocalhost是默认主机名,3306是默认端口,如果你也是使用默认主机名和端口的话可以省略这部分让url写成String url = "jdbc:mysql:///jdbc";(注意jdbc是数据库名字不是非要写jdbc



url格式

JDBC:子协议://主机名:端口/数据库名?属性名=属性值&...

 

3.创建语句

 

示例

Statement statement=conn.createStatement();

Statement 对象用来承接sql语句

  

4.执行语句

 

示例

ResultSet resultSet=statement.executeQuery("SELECT * FROM tt");

调用executeQuery方法执行sql语句获得结果集

 

5.处理结果

 

示例

while(resultSet.next()){
System.out.println(resultSet.getObject(1)+":"+resultSet.getObject(2));
}

rs.next()代表移动到结果集的下一条记录

rs.getObject(1)获得第一项

 

6.释放资源

 

从后往前依次释放资源(数据库连接要尽量晚建立早释放,减小数据库压力)

 

resultSet.close();
statement.close();
conn.close();

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多