JDBC
什么是jdbc?
jdbc本质 sun公司定义的一套操作所有数据库的规则——换而言之就是 :接口
jdbc基本步骤
1.导入数据库连接jar包(注意一定要与自己使用的数据库版本对应!!)
2.获取驱动
使用的是反射机制的原理获取jar包中的类(注意如果是8.0版本以下的数据库目录中cj)
Class.forName("com.mysql.cj.jdbc.Driver");
3.获取数据库对象
其中localhost为地址,3306为端口号,test是我自己的库(库名用自己的)然后是对应的数据库登录账号和密码
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
4.设计sql语句并获取执行sql语句的对象、
String sql="insert into test.students(id,name,sex)values(10007,'小张','男');";
//获取执行sql语句的对象
Statement stmt= conn.createStatement();
5.执行sql语句
执行sql语句方法:
方法 | 用途 | 返回值类型 |
---|---|---|
executeUpdate() | DML语句 | int |
executeQuery | DQL语句 | ResultSet |
int count=stmt.executeUpdate(sql);
ResultSet res=stmt.executeQuery(sql);
其中DML语句返回的int是指执行本条sql对数据库造成影响的行数。
DQL语句返回的是个set集合,可以通过对应的key获取value
下面是DQL代码示例:
//使用next()方法判断是否有下个内容
while (res.next()){
int a=res.getInt("id");
String b=res.getString("name");
String c=res.getString("sex");
int d =res.getInt("age");
System.out.println(a+"-"+b+"-"+c+"-"+d);
}
6.释放资源
conn.close();
stmt.close();
res.close();
事实这样是很不方便的,每次操作数据库都需要去获取然后连接一系列步骤。可以对此步骤进行改善
对于获取路径,数据库,账号密码。将来可能有不同的路径账号等,每次都需要修改原码是不合理的。希望封装一个jdbc工具类,解决代码的冗余问题。
1.将密码等写入properties文件
需要注意的是,properties文件只能支持key=value的存储格式 每一行没有分号或者句号
2.封装jdbc工具类
//一个工具包 用于抽取jdbc 使用繁琐的代码
public class jdbcTools {
private static String url;
private static String user;
private static String password;
private static String dirver;
//静态代码块 用于获取驱动器,驱动器只需要加载一次即可,所以提取到静态代码块
static {
try {
Properties p=new Properties();
//获取src路径下的文件 Classloader(类加载器)
ClassLoader classLoader=jdbcTools.class.getClassLoader();
//获取配置文件
URL res=classLoader.getResource("jdbctest/jdbc.properties");
String path= res.getPath();
//将配置文件内容读入
p.load(new FileReader(path));
url=p.getProperty("url");
user=p.getProperty("user");
password=p.getProperty("password");
dirver=p.getProperty("driver");
Class.forName(dirver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获取jdbc连接的方法并返回connection对象
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
//用于资源释放
public static void close(Connection conn, Statement stmt){
if(conn!=null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
//释放资源方法的重载
public static void close(Connection conn, Statement stmt, ResultSet res){
if(conn!=null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(res!=null){
try {
res.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}