JDBC:用java语言就能操作数据库的增删改查、存储过程、事务的处理等,是java语言和广泛的数据库间独立于数据库的连接标准的Java API。
数据库users包含的字段有Id(int)、data(varchar)、create_date(Timestamp),主要用来熟悉date类型数据的获取和转换过程。
1.工具类DatabaseUtils.java
实现加载驱动、获取连接、释放连接资源
private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/users?characterEncoding=UTF-8";
private static final String USERNAME = "root";
private static final String PASSWORD = "123";
private static final String SQL = "SELECT * FROM ";//数据库的操作
//静态代码块
static {
try {
//1.加载驱动,固定写法
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
System.out.println("can not load jdbc driver");
}
}
//获取数据库连接
public static Connection getConnection() {
Connection conn = null;
try {
//2.URL和用户信息
//3.连接成功,返回数据库对象Connection
//Connection代表数据库,数据库层面:设置自动提交conn.setAutoCommit(false);,事务提交conn.commit();,事务回滚conn.rollback();
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
//LOGGER.error("get connection failure", e);
}
return conn;
}
//关闭数据库连接
public static void closeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2.访问MySQL数据库类VisitMySQL.java
主要功能实现CRUD
// 连接对象
private Connection conn;
// 传递sql语句
private Statement stt;
// 结果集(用stt去执行SQL,可能存在结果,查看返回结果)
private ResultSet set;
// 查询
public void Select() {
try {
// 获取连接
conn = DatabaseUtil.getConnection();
if (conn == null)
return;
// 定义sql语句
String Sql = "select * from users";
// 4.执行sql语句,获得SQL的对象Statement(具体的执行类,执行SQL)
stt = conn.createStatement();
//查询用stt.executeQuery(),增删改用stt.executeUpdate()
// 返回结果集
set = stt.executeQuery(Sql);
// 获取数据
while (set.next()) {
System.out.println("Id:" + set.getString(1) + "\t data:" + set.getString(2) + "\t create_date:"+ set.getString(3) );
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
try {
//倒叙释放资源
set.close();
stt.close();
conn.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
// 使用PreparedStatement接口的executeUpdate()方法向数据库添加一条数据
public void Add() {
try {
// 获取连接
conn = DatabaseUtil.getConnection();
if (conn == null)
return;
// 获取用户输入
Scanner input = new Scanner(System.in);
System.out.print("input the Id:");
int Id = input.nextInt();
System.out.print("input the new data:");
String data = input.next();
System.out.print("input the create_date:");
//转换String类型为Date类型
String create_dates = input.next();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");//为什么"yyyy-MM-dd HH:mm:ss"就不行,报错java.text.ParseException:Unparseable date 12:22:22
Date create_date = dateFormat.parse(create_dates);
// 定义sql语句
String AddSQL = "INSERT INTO users VALUES (?,?,?);";
// 创建一个PreparedStatement对象
PreparedStatement ps = conn.prepareStatement(AddSQL);
// 向sql语句的第1-3个问号添加数据
ps.setInt(1, Id);
ps.setString(2, data);
// java时间转为sql时间
ps.setDate(3, new java.sql.Date(create_date.getTime()));
// 执行sql语句
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
// 使用Statement接口的executeUpdate()方法实现从数据库删除数据
public void Delete() {
try {
// 获取连接
conn = DatabaseUtil.getConnection();
if (conn == null)
return;
// 提示用户输入要删除的用户
System.out.print("input the Id to be deleted:");
Scanner input = new Scanner(System.in);
int Id = input.nextInt();
// 定义sql语句
String deleteSql = "DELETE FROM users WHERE Id=" + Id + ";";
// 获取Statement对象
stt = conn.createStatement();
// 执行sql语句
stt.executeUpdate(deleteSql);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
try {
stt.close();
conn.close();
} catch (Exception e2) {
}
}
}
// 使用PreparedStatement接口中的executeUpdate()方法实现修改数据
public void Update() throws ParseException {
try {
// 获取连接
conn = DatabaseUtil.getConnection();
if (conn == null)
return;
// 用户输入要修改的账户
System.out.print("input the Id to be updated:");
Scanner input = new Scanner(System.in);
int Id = input.nextInt();
System.out.print("input the new data:");
String data = input.next();
System.out.print("input the create_date:");
// 转变String类型为Date类型的方法
String create_dates = input.next();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");// why "yyyy-MM-dd HH:mm:ss"cannot ?
Date create_date = dateFormat.parse(create_dates);
String UpdateSql = "UPDATE users SET data=?,
create_date=? WHERE Id =?";
// 创建Statement对象
PreparedStatement ps = conn.prepareStatement(UpdateSql);
// 向sql语句的第1-3个问号修改数据
ps.setString(1, data);
ps.setDate(2, new java.sql.Date(create_date.getTime()));
ps.setInt(3, Id);
// 执行sql语句
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 释放资源
try {
conn.close();
} catch (Exception e2) {
}
}
}
Add()方法中:
向第三个?添加数据时报错:java.util.Date cannot be cast to java.sql.Date
页面接受的Date是java.util.Date,数据库中需要用java.sql.Date,所以需要转换
原错误语句:ps.setDate(3,(java.sql.Date)create_date);错误原因:不能直接转换
修改后语句:ps.setDate(3, new java.sql.Date(create_date.getTime()));
MySQL的JDBC连接:(10条消息) MySQL的JDBC连接_hcwdd的博客-CSDN博客_jdbc连接mysql