这篇文章是本人学习JDBC过程的笔记记录,这里将其整理出来,供大家学习使用,本着简单易用的原则,本文章不进行过多的理论介绍,相关的知识还请大家查阅官方文档。同时由于是对JDBC的使用介绍,所以关于数据库方面的内容也不进行过多介绍。
JDBC介绍
Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标[1]。JDBC是面向关系型数据库的。 — 维基百科
JDBC的作用
简单的来说,为了在Java中使用SQL,或者说, 为了使用Java来操作SQL,这里就需要某一些桥梁(由于数据库客户端类型众多,Java无法做到匹配所有的数据库)来连接Java与数据库,JDBC就是这样的一个桥梁。准确地来说,JDBC是这样的一个标准,由对应的数据库提供商实现,并且提供对应的实现工具,如 mysql-connector-java-5.1.40-bin.jar
是MySQL实现的一个JDBC连接池工具,当然还有Oracle的实现,SQL Server的实现等。
JDBC的基本使用
所需工具
- MySQL
- MySQL JDBC 连接池
mysql-connector-java-5.1.40-bin.jar
这个可以在MySQL官网中下载得到。 - Eclipse/MyEclipse
先前准备
1 为了操作数据库,这里我们使用MySQL建立一个简单的数据表进行操作,相关的SQL语句如下
create database jdbctest;
use jdbctest;
create table user(
id int primary key,
name varchar(10),
age int(2)
);
insert into user(id, name, age) values(001, 'Andrew', 22);
insert into user(id, name, age) values(002, 'John', 33);
2 建立一个Java项目 LearningJDBC,并且将MySQL连接池添加到路径中
连接操作
1 注册驱动
try {
Class.forName("com.mysql.jdbc.Driver"); // 加载驱动
} catch (ClassNotFoundException e) {
System.out.println("无法加载驱动");
e.printStackTrace();
}
2 获得连接
String url = "jdbc:mysql://localhost:3306/jdbctest";
String username = "root";
String password = "huanfeng";
Connection conn = null;
Statement statement = null;
try {
conn = DriverManager.getConnection(url, username, password); //获得连接
} catch (SQLException e) {
System.out.println("无法连接数据库");
e.printStackTrace();
}
上面的url的格式为 jdbc:数据库类型:数据库地址:端口/对应的库
这样,我们就成功连接到了对应的数据库,并且成功获得其连接Connection
,下面,我们来对其进行常见的增删改查操作。
查询操作
statement = conn.createStatement();
int id = 001;
String sql = "Select * from user where id = " +id;
ResultSet result = statement.executeQuery(sql);
while(result.next()){
System.out.println(result.getString("name"));
}
result.close();
上面我们是使用Statement,对应的采用SQL拼接的方式来拼接SQL语句,这种方式是很容易造成SQL注入的,也就是说,使用这种方式比较不安全,于是就有了另外的工具 PreparedStatement ,具体操作如下
PreparedStatement statement = null; //使用PreparedStatement
try {
conn = DriverManager.getConnection(url, username, password); //获得连接
int id = 001;
// 使用 ?作为占位符
String sql = "Select * from user where id = ? ";
statement = conn.prepareStatement(sql);
statement.setInt(1, id); //注意,从1开始
ResultSet result = statement.executeQuery();
while(result.next()){
System.out.println(result.getString("name"));
}
PreparedStatement 相对于Statement的安全性在于,PreparedStatement 采用预编译的方式对SQL语句进行预编译,采用这种方式可以很好的防止SQL注入。
插入操作
int id = 003;
String name = "test";
int age = 23;
String sql = "insert into user(id, name, age) values(?, ?, ?)";
statement = conn.prepareStatement(sql);
statement.setInt(1, id);
statement.setString(2, name);
statement.setInt(3, age);
int result = statement.executeUpdate();// 插入、删除、更新都是使用executeUpdate()方法;
更新操作
int id = 003;
String name = "hello";
String sql = "update user set name = ? where id = ?";
statement = conn.prepareStatement(sql);
statement.setString(1, name);
statement.setInt(2, id);
int result = statement.executeUpdate();
删除操作
int id = 003;
String sql = "delete from user where id = ?";
statement = conn.prepareStatement(sql);
statement.setInt(1, id);
int result = statement.executeUpdate();
System.out.println(result);
以上就是JDBC的简单操作,未完待续