JDBC简介
JDBC(Java Database Connectivity) Java数据库连接,他是用于一套执行SQL语句的Java API。应用程序可以通过这套API连接关系型数据库并使用sql语句操作数据库。
JDBC API位于java.sql
包下,该包定义了一系列数据库的接口和包。
Driver接口
Driver接口是JDBC驱动程序必须实现的接口,该接口提供给数据库厂商使用。该接口主要适用于调用数据库驱动程序,所以驱动程序必须加载到项目的classpath
中。
DriverManager类
DriverManager类用于注册JDBC驱动并配置连接信息,如数据库用户,密码等配置。
Connection接口
Connection接口代表Java程序与数据连接,只有获取连接对象后才能访问数据库,并操作数据库表。
Statement接口
Statement接口用于执行sql语句,并返回一个结果对象。
PreparedStatement接口
PreparedStatement接口执行动态sql语句和文件类型上传。使用?
作为占位符代替参数,通过setXX()
方法为sql语句赋值。
ResultSet接口
ResultSet接口用于保存JDBC执行的sql语句的结果集,该结果集封装在一个逻辑表格中。ResultSet接口中提供了一个游标(或指针)next()
在遍历逻辑表格。在初始化之前游标在第一行之前,调用next()
后到第一行。当下一行没有数据返回false。使用while
循环更适合ResultSet
实现JDBC程序
加载并注册驱动
DriverManager.registerDriver(Driver driver);
//或
Class.forName("DriverName");
com.mysql.cj.jdbc.Driver
通过驱动创建数据链接
Connection connection=DriverManager.getConnection(url,username,password);
jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
test是数据库名
localhost是主机地址,如果是远程的改为ip地址
3306是mysql默认端口号
通过数据库连接操作对象
//创建Staetment
Statement statement=connection.createStatement();
//创建PrepareStatement
Statement statement=connection.createStatement();
通过操作对象返回结果集
ResultSet resultSet=statement.executeQuery(sql);
以上对象都是在java.sql
包下的。
核心步骤:
Class.forName("com.mysql.cj.jdbc.Driver");
String url="";
String username="";
String password="";
Connection connection=DriverManager.getConnection(url,username,password);
Statement statement=connection.createStatement();
String sql="";
ResultSet resultSet=statement.executeQuery(sql);
while (resultSet.next()){
//...
}
完整案例
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import cms.example.domain.*;
public class App {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Statement statement=null;
Connection connection=null;
ResultSet resultSet=null;
ArrayList<User> list=new ArrayList<User>();
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/smbms?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true";
String username="root";
String password="root";
connection=DriverManager.getConnection(url,username,password);
statement=connection.createStatement();
String sql="select userCode,userPassword from smbms_user";
resultSet=statement.executeQuery(sql);
while (resultSet.next()){
String user=resultSet.getString("userCode");
String pass=resultSet.getString("userPassword");
//System.out.println(user+pass);
User user1=new User();
user1.setUsername(user);
user1.setPassword(pass);
list.add(user1);
//System.out.println(user1);
}
//System.out.println(list);
}
}
User.java:
public class User{
private String username;
private String password;
//setter && getter
// toString
}
ResultSet
接口的next()
对应数据库的数据项(即一行数据),接口提供的getXXX()
方法是获取数据项的某个字段,getXXX()
的数量和类型与sql
语句对应。增删改不需要。
通过
getXXX()
方法获取的是一个个零散的字段(字符串)引用,需要将这些字段封装为一个Java Bean
对象如User
。将sql中查询的两个字段userCode,userPassword
通过ResultSet的getString()
获取并通过User
的setter
方法赋值。这样查询的字段都封装为一个User对象,就可以通过该对象来访问数据了。
动态sql
Statement
对象只能执行静态sql语句(完整的sql语句),而实际会遇到动态sql即需要将数据填充到sql上。PreparedStatement
提供了对动态sql的支持。
在sql语句中通过?
作占位符,通过PreparedStatement
接口提供的setXXX()
方法给?
赋值。甚至可以通过输入输出流来上传多媒体文件。
//静态对象直接调用
...
PreparedStatement preparedStatement=null;
...
String sql="INSERT INTO user(username,password) VALUES(?,?)";
ResultSet resultSet=preparedStatement.executeQuery(sql);
preparedStatement.setString(1,"admin");
preparedStatement.setStrong(2,"000000");
//前面是索引,后面是数据
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156297.html