JDBC
2018-07-25 本文已影响0人
菜鸟要逆袭
JDBC概述
JDBC(Java Data Base Connectivity)java数据库连接,是一种用于执行SQL 语句的接口,可以为多种关系数据库提供统一的访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范
JDBC开发步骤(以mysql数据库为例)
- 1 使用Statement
/*0.导入数据库对应的jar包*/
public class JDBCDemo{
public static void main(String[] args){
//1.注册驱动:利用反射技术,将驱动加入到内容中
//使用java.sql.DriverManager类的静态方法registerDriver(Driver driver)会重复注册两次驱动,造成资源浪费,所以利用反射技术,直接注册。其中Driver是一个接口,在之前导入的jar包中
Class.forName(com.mysql.jdbc.Driver);
//2.获得数据库连接
//使用DriverManager类的静态方法getConnection(String url,String user,String password)
//方法返回值是Connection接口的实现类
//url(数据库地址):jdbc:数据库://连接主机IP:端口号//数据库名字
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "3306";
Connection conn = DriverManager.getConnection(url,username,password);
//3.获得语句执行平台,通过数据库连接对象conn,获取到SQL语句的执行者对象
//conn调用createStatement(),将SQL语句发送到数据库
//该方法返回的是Statement接口的实现类对象
Statement stat = conn.createStatement();
//4.执行SQL语句
//通过SQL执行者对象调用方法executeUpdate(String SQL)执行数据库中的SQL语句,可执行insert/delete/update语句
//该方法返回的是int类型数据,表示成功操作数据行数
int row = stat.executeUpdate("insert into users(id,name) values(1,'张三')");
Sop(row);
//通过执行SQL执行者对象调用方法executeQuery(String SQL)
ResultSet rs = stat.executeQuery("select from users");
//5.处理结果集(查询时)
//ResultSet接口方法next(),若返回true则有结果集,反之无
while(rs.next()){
//获取每列数据,使用的是ResultSet接口的getXX(String columnName)方法
Sop("id:"+rs.getInt("id"));
Sop("name:"+rs.getString("name"));
}
//6.释放资源
stat.close();
conn.close();
}
}
- 2 使用PrepareStatement
/*PrepareStatement是Statement接口的子接口,可以进行SQL预编译存储,多次高效的执行SQL语句,并且可以防止SQL注入攻击*/
public class JDBCDemo{
public static void main(String[] args){
Class.forName(com.mysql.jdbc.Driver);
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "3306";
Connection conn = DriverManager.getConnection(url,username,password);
//写好预编译sql语句,其中"?"表示占位符
String sql = "select * from users where id = ? and name=?";
PrepareStatement pst = conn.prepareStatement(sql);
//调用预编译sql执行对象的set()方法,设置占位符对应的参数
pst.setObject(1,1);
pst.setObject(2,"张三");
ResultSet rs = pst.executeQuery("select from users");
while(rs.next()){
Sop("id:"+rs.getInt("id"));
Sop("name:"+rs.getString("name"));
}
rs.close();
stat.close();
conn.close();
}
}
JDBC操作的封装
根据之前对JDBC的了解并使用之后,发现其中很多操作是可以进行封装的。所以接下来介绍一个自己封装的JDBC工具类(JDBCUtils),通过使用该封装对象进行数据库操作,可以高代码复用率以及提高一定的工作效率
database.properties:
/*
将JDBC的可替换配置信息存于database.propertis文件中
在web项目中,该文件最好放在src根目录下,或者将该文件放在另一个服务器中
*/
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=3306
DBUtils.java
public class JDBCConfig {
private static Connection con ;
private static String driverClass;
private static String url;
private static String username;
private static String password;
static{
try{
readConfig();
Class.forName(driverClass);
con = DriverManager.getConnection(url, username, password);
}catch(Exception ex){
throw new RuntimeException("数据库连接失败");
}
}
private static void readConfig()throws Exception{
//使用类加载器
InputStream in = JDBCConfig.class.getClassLoader().getResourceAsStream("database.properties");
Properties pro = new Properties();
pro.load(in);
driverClass=pro.getProperty("driverClass");
url = pro.getProperty("url");
username = pro.getProperty("username");
password = pro.getProperty("password");
}
public static Connection getConnection(){
return con;
}
}