JDBC的工具类
JDBC的工具类
为了避免上图中大量代码每次重复去写,且只有sql和结果在变,其他都不变。所以要提取工具类。
首先,要建如下几个包和文件:
step1:在src包下,建一个lesson2包
step2:在lesson2包下,弄一个package,名为utils包,utils包专注于写SQL
step3:把配置信息专门写在一个文件里,在src包下,弄一个文件(File),名为db.properities
2. 在文件(File) db.properties 中写配置信息
文件在src里面导入,如截图所示:
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true
username = root
password = 123456
效果图如下:
3. utils包中的工具类,读取db.properities中写配置信息
step1:在utils包下建工具类:JdbcUtils
package com.wang.lesson2.utils;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JdbcUtils {
private static String driver = null;
private static String url = null;
private static String username = null;
private static String password = null;
static {
try {
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(in);
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
//驱动只用加载一次
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
//释放连接资源
public static void release(Connection conn, Statement st, ResultSet rs){
if(rs!=null){
try {
rs.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
}
效果如图:
4. 用上述工具类,测试增删改查(同时,用statement对象的两个方法,一个是: st.executeUpdate(sql); 另一个是: st.executeQuery(sql); )
4.1-4.3,也就是增、删、改,都是用 st.executeUpdate(sql); 返回值是改变的行数。
4.4 也就是查,用的是 st.executeQuery(sql); 返回值是查询结果集合。
step1:在lesson2建立Java Class,名为:TestInsert。
step2:在TestInsert中,写如下代码:
package com.wang.lesson2;
import com.wang.lesson2.utils.JdbcUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestInsert {
public static void main(String[] args) throws SQLException {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
st = conn.createStatement();
//下面双引号中,是在SQLyog中写的增加信息的SQL语句后,直接复制过来的。
String sql = "INSERT INTO `users` (id,`NAME`,`PASSWORD`,`email`,`birthday`)\n" +
"VALUES(4,'BeiHang','123456','bh@sina.com','2020-02-29')";
//上面SQL对象有了后,增删改全用executeUpdate()语句实现。
int i = st.executeUpdate(sql); //返回结果是受影响的行数
if (i>0)
{
System.out.println("插入新数据成功!");
}
}catch (SQLException e){
e.printStackTrace();
}finally {
//释放资源
JdbcUtils.release(conn,st,rs);
}
}
}
效果图如下:
4.2 删除信息(delete)
4.1中的全部都不用改变,只改变下图中圈起来的sql语句即可:
在TestInsert中,写如下代码:
package com.wang.lesson2;
import com.wang.lesson2.utils.JdbcUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestInsert {
public static void main(String[] args) throws SQLException {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
st = conn.createStatement();
//下面双引号中,是在SQLyog中写的增加信息的SQL语句后,直接复制过来的。
String sql = "DELETE FROM users WHERE `id` = '4'";
//上面SQL对象有了后,增删改全用executeUpdate()语句实现。
int i = st.executeUpdate(sql); //返回结果是受影响的行数
if (i>0)
{
System.out.println("删除新数据成功!");
}
}catch (SQLException e){
e.printStackTrace();
}finally {
//释放资源
JdbcUtils.release(conn,st,rs);
}
}
}
效果图如下:
4.1中的全部都不用改变,只改变下图中圈起来的sql语句即可:
在TestInsert中,写如下代码:
package com.wang.lesson2;
import com.wang.lesson2.utils.JdbcUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestInsert {
public static void main(String[] args) throws SQLException {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
st = conn.createStatement();
//下面双引号中,是在SQLyog中写的增加信息的SQL语句后,直接复制过来的。
String sql = "UPDATE users SET `NAME`='BeiHang', `email`='BeiHang@sina.com' WHERE `id`='1'";
//上面SQL对象有了后,增删改全用executeUpdate()语句实现。
int i = st.executeUpdate(sql); //返回结果是受影响的行数
if (i>0)
{
System.out.println("修改数据成功!");
}
}catch (SQLException e){
e.printStackTrace();
}finally {
//释放资源
JdbcUtils.release(conn,st,rs);
}
}
}
效果图如下:
4.1中的全部都不用改变,只改变下图中圈起来的sql语句和statement的方法,即可:
在TestInsert中,写如下代码:
package com.wang.lesson2;
import com.wang.lesson2.utils.JdbcUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestInsert {
public static void main(String[] args) throws SQLException {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
st = conn.createStatement();
//下面双引号中,是在SQLyog中写的增加信息的SQL语句后,直接复制过来的。
String sql = "SELECT * FROM users WHERE `id`=1";
//上面SQL对象有了后,查询用executeQuery()语句实现。
rs = st.executeQuery(sql); //返回结果是查询得到的结果集合
while (rs.next()){
System.out.println(rs.getString("NAME"));
}
}catch (SQLException e){
e.printStackTrace();
}finally {
//释放资源
JdbcUtils.release(conn,st,rs);
}
}
}
效果图如下: