JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。说白了,它用于直接调用 SQL 命令。 主要步骤: 1.加载JDBC驱动程序 2.建立于数据库的连接
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。说白了,它用于直接调用 SQL 命令。
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JdbcUtils {
// 数据库的登陆账号密码
private final String USERNAME = "root";
private final String PASSWORD = "123456";
// JDBC驱动程序
private final String DRIVER = "com.mysql.jdbc.Driver";
// 数据库地址
private final String URL = "jdbc:mysql://localhost:3306/test";
// 三个重要类的对象
private Connection connection;
private PreparedStatement ps;
private ResultSet resultSet;
public JdbcUtils() {
try {
// 步骤1:加载驱动程序
Class.forName(DRIVER);
// 步骤2:建立连接,这里的处理是当实例化这个工具类对象时就完成这两个步骤
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
// 封装的update函数
public int update(String sql, List
②TestMain类
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class TestMain {
public static void main(String[] args) {
// TODO 自动生成的方法存根
JdbcUtils jdbcUtils = new JdbcUtils();
/*执行一:新建表*/
// String sql0 =
// "create table userinfo(id int primary key auto_increment, username varchar(64), password varchar(64))";
// try {
// jdbcUtils.update(sql0, null);
// } catch (SQLException e) {
// // TODO 自动生成的 catch 块
// e.printStackTrace();
// }
/*执行二:增加一条记录*/
// String sql = "insert into userinfo (username,password) values(?,?)";
// List params = new ArrayList();
// params.add("jack");
// params.add("123456");
// try {
// jdbcUtils.update(sql, params);
// } catch (SQLException e) {
// // TODO 自动生成的 catch 块
// e.printStackTrace();
// }
/*执行三:修改一条记录*/
// String sql1 = "update userinfo set username = ? where id = ?";
// List param1 = new ArrayList();
// param1.add("tommy");
// param1.add(2);
// try {
// jdbcUtils.update(sql1, param1);
// } catch (SQLException e) {
// // TODO 自动生成的 catch 块
// e.printStackTrace();
// }
/*执行四:删除一条记录*/
// String sql2 = "delete from userinfo where username = 'tommy'";
// try {
// jdbcUtils.update(sql2, null);
// } catch (SQLException e) {
// // TODO 自动生成的 catch 块
// e.printStackTrace();
// }
/*执行五:查询所有记录*/
// String sql3 = "select * from userinfo";
// try {
// List
执行步骤一:创建一个新的表(以下说的执行步骤没有说明的话都是指单独执行,其他步骤都注释掉)
执行步骤二:创建一个表,有三个字段,id是主键
连续执行步骤三两次:增加两条记录
执行步骤四:将第二条记录修改
执行步骤五:删除第二条记录
执行步骤六:查询到一条记录
再次执行步骤一和步骤五:查询到多条记录
实例二:应用反射机制来实现查询数据库记录
①新建一个和数据库字段匹配的类UserInfo<喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:sql;">public class UserInfo {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserInfo [id=" + id + ", username=" + username + ", password="
+ password + "]";
}
}
②在JdbcUtils类中添加一个应用反射机制的数据库查询函数
public List queryRef(String sql, List params, Class cls)
throws Exception {
List list = new ArrayList<>();
ps = connection.prepareStatement(sql);
if (params != null && !params.isEmpty()) {
for (int i = 0; i < params.size(); i++)
ps.setObject(i + 1, params.get(i));
}
resultSet = ps.executeQuery();
ResultSetMetaData metaData = resultSet.getMetaData();
int col_len = metaData.getColumnCount();
while (resultSet.next()) {
// 存在记录时,实例化一个对象
T record = cls.newInstance();
for (int i = 0; i < col_len; i++) {
String col_name = metaData.getColumnName(i + 1);
Object col_value = resultSet.getObject(col_name);
// 将列对应的值赋给对象的相应字段
Field field = cls.getDeclaredField(col_name);
field.setAccessible(true);
field.set(record, col_value);
}
// 将这条记录添加到List中
list.add(record);
}
return list;
}
③TestMain类,添加一个执行操作
/*执行六:反射机制查询记录*/
String sqlQuery = "select * from userinfo";
try {
List list = jdbcUtils.queryRef(sqlQuery, null,
UserInfo.class);
System.out.println(list);
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} finally {
jdbcUtils.release();
}