工具JDBCTools
package com.rimi.tools;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JDBCTools2 {
private static String url;
private static String user;
private static String password;
private static String dirvername;
// 工具类: 1. 不能直接创建对象, 2. 所有的方法都是静态的
private JDBCTools2(){}
// 静态代码块:只有类第一次加载的时候才会执行
static {
// 将数据先重文件中读取出来
Properties pro = new Properties();
try {
// 第一种方式
//FileInputStream in = new FileInputStream(“src/jdbc.properties”);
// 通过类加载器的方法获取src编译后在系统中的文件
// 固定写法: 注意,这个方法只能获取src根目录的文件
InputStream in = JDBCTools2.class.getClassLoader().getResourceAsStream(“jdbc.properties”);
pro.load(in);
dirvername = pro.getProperty(“dirvername”);
url = pro.getProperty(“url”);
user = pro.getProperty(“user”);
password = pro.getProperty(“password”);
// 注册驱动:告诉系统我使用的是什么数据库
Class.forName(dirvername);
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
}
// 定义静态的一个返回数据库连接对象的方法
public static Connection getConnection(){
// 读取文件数据?问题?
try {
// 获取数据库连接对象,返回给调用者
return DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 关闭数据库资源的方法
* @param conn 连接对象
* @param st sql操作对象
*/
public static void closeDB(Connection conn, Statement st){
try {
if (st != null){
st.close();
System.out.println("关闭资源");
}
if (conn != null){
conn.close();
System.out.println("关闭资源");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 关闭数据库资源的方法
* @param conn 连接对象
* @param st sql操作对象
* @param rs 结果集
*/
public static void closeDB(Connection conn, Statement st, ResultSet rs){
try {
if (rs != null){
rs.close();
System.out.println("关闭资源");
}
}catch (SQLException e){
e.printStackTrace();
}
// 调用重载的两个参数的函数来关闭另外两个对象
closeDB(conn,st);
}
}
主方法main
package com.rimi;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
/*
属性集: 就是一个map接口下的一个实现类
特点: 1. 键和值都是字符串类,不能保存其他类型
2. 是专门用来配合流进行字符文件的读取
*/
public class PropertiesDemo {
public static void main(String[] args) throws Exception {
Properties pro = new Properties();
// 读取文件数据
FileInputStream in = new FileInputStream("user.properties");
pro.load(in);
System.out.println(pro);
// demo01();
// demo02();
}
private static void demo01() throws IOException {
Properties pro = new Properties();
// 添加数据
pro.setProperty("xiaom","123456");
pro.setProperty("小明2","666");
pro.setProperty("小明3","8888");
// 创建一个保持数据的流对象
FileOutputStream out = new FileOutputStream("user.properties");
// 使用属性集的store方法保存数据到文件中
pro.store(out,"");
System.out.println("数据保持成功");
out.close();
}
}
主方法main
package com.rimi;
import com.rimi.tools.JDBCTools;
import com.rimi.tools.JDBCTools2;
import java.math.BigDecimal;
import java.sql.;
import java.util.Arrays;
import java.util.Scanner;
/
执行sql语句的操作: 增、删、改 都是一个方法: executeUpdate(sql)
查询的方法为: executeQuery(sql);
*/
//取消警报@
@SuppressWarnings(“all”)
public class JDBCDemo01 {
public static void main(String[] args) {
demo06();
}
// 使用2.0版:通过配置文件加载jdbc的配置参数
private static void demo06() {
Connection conn = JDBCTools2.getConnection();
System.out.println(conn);
}
// 使用第一种工具类实现
private static void demo05() {
// 通过工具类直接获取连接对象
Connection conn = JDBCTools.getConnection();
Statement st = null;
try {
st = conn.createStatement();
String sql = "insert into user values(null,'xiaoha','123456')";
int row = st.executeUpdate(sql);
System.out.println(row);
} catch (SQLException e) {
e.printStackTrace();
}finally {
// 调用的工具类封装的关闭函数来关闭资源
JDBCTools.closeDB(conn,st);
}
}
/**
* 查询数据
*/
private static void demo04() {
// 提升变量作用域
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql:///2019gy?useSSL=false";
conn = DriverManager.getConnection(url, "root", "root");
st = conn.createStatement();
// 查询需要使用query方法
// 返回的是一个结果集对象,需要使用对象自己的方式获取每个字段的内容
rs = st.executeQuery("select * from student");
// 获取数据的方法有两种: 1 直接使用字段对应的序号来获取数据(第一个字段对应1,后面依次加一)
// 2. 直接使用字段名称获取对应的数据
// 获取数据之前,必须先执行next方法,功能就是判断当前是否有数据
while (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
String gender = rs.getString("gender");
// BigDecimal score = rs.getBigDecimal(4);
double score = rs.getDouble(“score”);
String cName = rs.getString(“className”);
System.out.printf("%d,%s,%s,%f,%s\n",id,name,gender,score,cName);
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}finally {
try {
if (rs != null){
rs.close();
System.out.println("关闭资源");
}
if (st != null){
st.close();
System.out.println("关闭资源");
}
if (conn != null){
conn.close();
System.out.println("关闭资源");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 删除数据
private static void demo03() {
try {
Class.forName("com.mysql.jdbc.Driver");
/*
jdbc:mysql:// 是连接mysql数据库的固定写法
localhost:3306/ 要连接的数据库服务器 地址:端口 ,当前使用的是本地的服务器,默认可以省略 , / 不能省
2019gy 是你当前要使用的数据库名称
?useSSL=false 固定写法,用来声明当前数据库没有使用安全验证
优化后可以写成 jdbc:mysql:///数据库名称?useSSL=false 会变化的就剩数据库名称了
*/
String url = "jdbc:mysql://localhost:3306/2019gy?useSSL=false";
Connection conn = DriverManager.getConnection(url, "root", "root");
Statement st = conn.createStatement();
String sql = "delete from user";
// 执行sql语句
int row = st.executeUpdate(sql);
System.out.println(row);
// 关闭
st.close();
conn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
// 插入数据
private static void demo02() {
// 1. 注册驱动
try {
Class.forName("com.mysql.jdbc.Driver");
// 获取与数据库服务器的连接对象
String url = "jdbc:mysql:///2019gy?useSSL=false";
Connection conn = DriverManager.getConnection(url, "root", "root");
// 创建sql操作对象
Statement st = conn.createStatement();
// 添加数据
int row = st.executeUpdate("insert into user values(null,'xiaoxiao','66666')");
System.out.println(row);
st.close();
conn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
// 更新数据的方法
private static void demo01() {
// 1. 注册驱动(5.1以后可以省略)
try {
Class.forName("com.mysql.jdbc.Driver");
// 2. 获取数据库的连接对象,通过驱动管理类DriverManager
// String url = "jdbc:mysql://localhost:3306/2019gy?useSSL=false";
// localhost:3306可以省略不写,但是注意 / 不能少
String url = "jdbc:mysql:///2019gy?useSSL=false";
Connection conn = DriverManager.getConnection(url,"root","root");
System.out.println(conn);
// 3. 通过连接对象创建sql操作对象
Statement st = conn.createStatement();
// 3.1 执行sql语句的操作: 增、删、改 都是一个方法: executeUpdate(sql)
// 返回值就是受影响的行数
int row = st.executeUpdate("update student set score=88.8 where id=14");
// 4. 处理结果
System.out.println(row);
// 5. 关闭数据库连接资源
st.close();
conn.close();
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}