什么是jdbc?
看一下官方怎么说,JDBC 英文名Java DataBase Connectivity,使用java连接数据库的工具,就是一组使用java代码来执行SQL语句的API。
Jdbc有什么用?
数据库有多种,并且不同数据库操作时的方式和语句可能不太一样,当使用java 代码控制sql 调用时,不可能每一种数据库都弄一套 java 的代码,所以就声明了一个套操作数据库的接口,java程序员只需调用这一套接口即可,具体的接口实现由对应的数据库厂商实现,所以这里就又有了一个新的概念叫做数据库驱动,这个驱动就是不同数据库厂商实现 JDBC 接口的类的一个工具包,当时用jdbc操作数据库时,需要添加对应的数据库驱动包。
如何使用jdbc?
使用jdbc操作数据库有以下几步:
- 添加驱动
- 创建数据库连接
- 通过连接获取操作数据库的对象
- 发送执行sql语句
- 处理结果集
- 关闭jdbc对象
接下来详细的介绍一下
添加驱动并获取数据库连接。不同的数据库对应的驱动包不一样,添加驱动包(添加jar包)之后需要通过驱动去获取一个数据库连接,没什么好说的,直接上代码:
//声明一个配置文件jdbc.properties
#数据库驱动类
driver=com.mysql.jdbc.Driver
#连接数据库
jdbcUrl=jdbc:mysql://127.0.0.1:3306/fqx_webapp
#用户名
user=root
#密码
password=123456
--------------------------------------------------------------
//工具类(基本类)
public class DBUtil {
/**
* 获取配置文件信息
* @return
*/
private static Properties getProperties() {
InputStream inputStream = DBUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
try {
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
/**
* 获取数据库连接 java.sql.Connection的一个实例
* @return
*/
public static Connection getConnection() {
Connection connection = null;
Properties properties = getProperties();
String driver = properties.getProperty("driver");
try {
//加载数据库驱动
Class.forName(driver);
//使用驱动管理器获取数据库连接
connection = DriverManager.getConnection(properties.getProperty("jdbcUrl"), properties);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
/**
* 释放资源
* @param resultSet
* @param statement
* @param connection
*/
public static void close(ResultSet resultSet , Statement statement , Connection connection) {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用java对象数据库进行简单的增、删、改、查操作,代码如下:
public class Test {
public static void main(String[] args) {
Test test = new Test();
// test.insert();
// test.delete();
// test.update();
test.query();
}
//添加
public void insert() {
//获取数据库连接
Connection connection = DBUtil.getConnection();
//编写sql,需要传参数的地方使用 ? 来表示,叫做占位符
String sql = "INSERT INTO USER (uname , password) VALUES (? , ?)";
PreparedStatement prepareStatement = null;
try {
//通过数据库连接获取数据库操作对象
prepareStatement = connection.prepareStatement(sql);
//使用对应的值填充占位符,key是占位符的下标,下标在1开始
prepareStatement.setObject(1, "zhangsan");
prepareStatement.setObject(2, 18);
//发送并sql,返回结果
//增删改可以使用executeUpdate()方法,查询使用executeQuery()方法
int update = prepareStatement.executeUpdate();
System.out.println("是否添加成功:"+update);
} catch (SQLException e) {
e.printStackTrace();
} finally {
//关闭资源
DBUtil.close(null, prepareStatement, connection);
}
}
//删除
public void delete() {
Connection connection = DBUtil.getConnection();
String sql = "DELETE FROM USER WHERE ID = ?";
PreparedStatement prepareStatement = null;
try {
prepareStatement = connection.prepareStatement(sql);
prepareStatement.setObject(1, 3);
int update = prepareStatement.executeUpdate();
System.out.println("是否删除成功:"+update);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(null, prepareStatement, connection);
}
}
//修改
public void update() {
Connection connection = DBUtil.getConnection();
String sql = "UPDATE USER SET UNAME = ? WHERE ID = ?";
PreparedStatement prepareStatement = null;
try {
prepareStatement = connection.prepareStatement(sql);
prepareStatement.setObject(1, "wangwu");
prepareStatement.setObject(2 , 2);
int update = prepareStatement.executeUpdate();
System.out.println("是否修改成功:"+update);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(null, prepareStatement, connection);
}
}
//查询
public void query() {
Connection connection = DBUtil.getConnection();
String sql = "SELECT ID,UNAME,PASSWORD FROM USER";
PreparedStatement prepareStatement = null;
ResultSet resultSet = null;
try {
prepareStatement = connection.prepareStatement(sql);
//获取到结果集
resultSet = prepareStatement.executeQuery();
List<Map<String, Object>> list = new ArrayList<>();
//返回的相当于一张表,表中有一个指针,当调用resultSet.next()方法时,指针就往后移一次
while(resultSet.next()){
Map<String, Object> map = new HashMap<>();
//根据对应的字段名获取结果几种的值
map.put("ID", resultSet.getObject("ID"));
map.put("UNAME", resultSet.getObject("UNAME"));
map.put("PASSWORD", resultSet.getObject("PASSWORD"));
list.add(map);
}
System.out.println("查询出的信息:"+list);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(resultSet, prepareStatement, connection);
}
}
}