需要用到的jar包:mysql-connector-java-5.1.43-bin.jar
1.把连接数据库需要的信息,都保存在一个文件中,这个文件是一个properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/javaee1707?useSSL=true
user=root
password=123456
-
代码实现
public class JDBCUtil {
private static String url = null;
private static String user = null;
private static String password = null;
private static String driverClass = null;
private static InputStream in = null;//利用静态代码块的特征,在类文件加载到内存的时候,就会执行在静态代码块里面的代码
static {
try {
//1. 读取配置文件信息 读取properties文件
Properties props = new Properties();//如果一个properties文件加载到内存中,需要借助于IO流 in = new FileInputStream("./src/db.properties"); //2. 利用Properties里面的load方法加载文件 props.load(in); //3. 可以通过Properties类对象,获取到想要的数据 url = props.getProperty("url"); user = props.getProperty("user"); password = props.getProperty("password"); driverClass = props.getProperty("driver"); //4. 加载类文件 Class.forName(driverClass); } catch (IOException | ClassNotFoundException e) { // TODO: handle exception e.printStackTrace(); System.out.println("驱动加载失败"); } finally { //关闭文件连接 if (in != null) { try { in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
}
/**
获取数据库连接对象
-
@return
*/
public static Connection getConnection() {
Connection conn = null;try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}return conn;
}
/**
- 关闭数据库连接,释放Statement
- @param conn 数据库连接对象
- @param st Statement对象
*/
public static void close(Connection conn, Statement st) {
try {
if (st != null) {
st.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
//糖衣炮弹
throw new RuntimeException(e);
}
}
//关闭带有结果集的查询语句资源
public static void close(Connection conn, Statement st, ResultSet set) {
try {
if (st != null) {
st.close();
}
if (set != null) {
set.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
//糖衣炮弹
throw new RuntimeException(e);
}
}
}
3.通过自定义JDBC工具类来连接数据库
public class Demo2 {
//创建表格
@Test
public void createTable() {
Statement st = null;
//1. 通过已经封装好的JDBC工具类,获取到数据库的连接对象
Connection conn = JDBCUtil.getConnection();
try {
//2. 获取Statement,SQL语句运输者,将SQL语句运输到MySQL里面,让MySQL运行
st = conn.createStatement();
//3. 准备SQL语句
String sql = "create table WOW(heroID int not null primary key auto_increment,heroName char(30))";
//4. 通过Statement执行SQL语句
int count = st.executeUpdate(sql);
//5. 查看创建的结果
System.out.println("影响的行数:" + count);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 使用Statement执行DML语句
@Test
public void testInsert() {
Statement st = null;
//1. 建立数据库连接
Connection conn = JDBCUtil.getConnection();
try {
//2. 获取到Statement
st = conn.createStatement();
//3. 准备SQL语句
String sql = "insert into WOW(heroName) values('萨满')";
//4. 通过Statement执行SQL语句
int count = st.executeUpdate(sql);
//5. 影响的行数
System.out.println("count = " + count);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//conn是连接数据库的资源,st是应用程序到MySQL直接的SQL语句运输者
//这两个都算是资源,所以都需要关闭
try {
if (st != null) {
st.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
/ /使用Statement查询数据库中数据
@Test
public void testSelect() {
Connection conn = null;
Statement st = null;
ResultSet set = null; //查询语句返回的结果集对象
try {
//1. 获取数据库连接对象
conn = JDBCUtil.getConnection();
//2. 获取Statement
st = conn.createStatement();
//3. 准备SQL语句
String sql = "select * from WOW";
//4. 执行SQL语句 【获取查询结果集】
set = st.executeQuery(sql);
//5. Result next() getXXX(String 字段名) XXX表示不同的数据类型,
//根据当前的代码需求 使用不同的数据类型
while (set.next()) {
int heroID = set.getInt("heroID");
String heroName = set.getString("heroName");
System.out.println(heroID + ":" + heroName);
}
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
} finally {
JDBCUtil.close(conn, st, set);
}
}
}