JDBC:(java database Connection) java数据库连接。
JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。
JDBC连接步骤:
1.先导入jar包,把jar放入到工程下并 add Libar ay
2.加载驱动 Class.forName("com.mysql.jdbc.Driver");
3.获取连接对象 Connection connection=DriverManger.getConnection(url,user,password);
4.获取执行sql语句的对象: Statement
解决方案 : 使用PrepareStatement来进行sql的预编译
2.常见的JDBC组件
JDBC 的 API 提供了以下接口和类:
DriverManager :这个类管理一系列数据库驱动程序。匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序。识别 JDBC 下某个子协议的第一驱动程序将被用于建立数据库连接。
Driver : 这个接口处理与数据库服务器的通信。你将很少直接与驱动程序互动。相反,你使用 DriverManager 中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息。
Connection : 此接口具有接触数据库的所有方法。该连接对象表示通信上下文,即,所有与数据库的通信仅通过这个连接对象进行。
Statement : 使用创建于这个接口的对象将 SQL 语句提交到数据库。除了执行存储过程以外,一些派生的接口也接受参数。
ResultSet : 在你使用语句对象执行 SQL 查询后,这些对象保存从数据获得的数据。它作为一个迭代器,让您可以通过它的数据来移动。
SQLException : 这个类处理发生在数据库应用程序的任何错误。
3.代码演示
下面是我的代码举例:
1.首先要创建一个后缀为 properties 的文件,(注意必须要写在src路径下) 写入硬编码,目的是为了程序日后有变动的话直接在这个文件中更改,源代码保持不动。
url=jdbc:mysql://localhost:3306/abc? serverTimezone=Asia/Shanghai user=root password=123@qwe drivername=com.mysql.cj.jdbc.Driver //都是以键值对的形式,(注意:这里面不需要在每段代码结尾加 ; ) //url = jdbc:mysql://路径(端口)/库名?serverTimezone(时区)=Asia(亚洲)/Shanghai //user=(mysql账号) //password=(mysql密码) //drivername(这个可以自行定义)=com.mysql.cj.jdbc.Driver(这个路径是导入jar包的路径)
2.创建实体类 包名命名为 entiy(实体)
1 public class User3 { 2 private Integer id; 3 private String name; 4 private String password; 5 6 public Integer getId() { 7 return id; 8 } 9 10 public void setId(Integer id) { 11 this.id = id; 12 } 13 14 public String getName() { 15 return name; 16 } 17 18 public void setName(String name) { 19 this.name = name; 20 } 21 22 public String getPassword() { 23 return password; 24 } 25 26 public void setPassword(String password) { 27 this.password = password; 28 } 29 30 @Override 31 public String toString() { 32 return "User3{" + 33 "id=" + id + 34 ", name='" + name + '\'' + 35 ", password='" + password + '\'' + 36 '}'; 37 } 38 }
3.建立util包,里面建立BaseDao类
-类作用主要用于将UserDao3类中的重复代码进行提取,提高效率;实现代码简洁。
1 public Connection connection; 2 public PreparedStatement ps; 3 public ResultSet resultSet; 4 5 private static String url; 6 private static String user; 7 private static String password; 8 private static String drivername; 9 10 static{ 11 try { 12 //先建立输入流 创建properrties对象 加载资源流 13 InputStream resourceAsStream = BaseDao3.class.getResourceAsStream("/db2.properties"); 14 Properties properties = new Properties(); 15 properties.load(resourceAsStream); 16 //导入数据 17 url = properties.get("url").toString(); 18 user = properties.get("user").toString(); 19 password = properties.get("password").toString(); 20 drivername=properties.get("drivername").toString(); 21 //加载驱动(驱动只需要加载一次就可以了) 22 Class.forName(drivername); 23 24 } catch (Exception e) { 25 e.printStackTrace(); 26 } 27 28 } 29 30 public void getconnection(){ //建立连接方法 31 try { 32 connection = DriverManager.getConnection(url,user,password); 33 } catch (Exception throwables) { 34 throwables.printStackTrace(); 35 } 36 } 37 38 public int change(String sql,Object... arg){ //增删改方法 39 try { 40 getconnection(); 41 ps=connection.prepareStatement(sql);//预编译 42 for(int index=0;index<arg.length;index++){ 43 ps.setObject(index+1,arg[index]); 44 } 45 int row =ps.executeUpdate(); //执行更新 46 return row; 47 } catch (Exception throwables) { 48 throwables.printStackTrace(); 49 }finally{ 50 closeAll(); 51 } 52 return 0; 53 } 54 55 56 public void closeAll() { //关闭连接, 从内往外关闭 57 try { 58 if (resultSet != null) { resultSet.close(); } 59 if (ps != null) { ps.close(); } 60 if (connection != null) { connection.close(); } 61 }catch(Exception e){ 62 e.printStackTrace(); 63 } 64 }
4.创建实体类后紧跟要创建实体类Dao, 上面我的实体类名为 user3 那么Dao类名就可以为 user3Dao
Dao方法用来建立连接mysql数据库,实现程序连接数据库功能。
里面写入方法,需求(增删改查)
public class UserDao3 extends BaseDao3 { //继承刚才写好的BaseDao父类
//添加数据
public int insert(User3 user3){
String a="insert into user (id,name,password) values (?,?,?)";
return change(a,user3.getId(),user3.getName(),user3.getPassword());
}
//使用list遍历表中数据
public List<User3> select(){
List<User3> list =new ArrayList<>();
try {
getconnection();
String a ="select * from user";
ps=connection.prepareStatement(a);
resultSet = ps.executeQuery();
while(resultSet.next()){
User3 user3 =new User3();
user3.setId(resultSet.getInt(1));
user3.setName(resultSet.getString(2));
user3.setPassword(resultSet.getString(3));
list.add(user3);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return list;
}
public int update(User3 user3){ //修改数据库表中数据
String a ="update user set password=? where id=?";
return change(a,user3.getPassword(),user3.getId());
}
public int delete(User3 user3){ //删除表中数据
String a = "delete from user where id=?";
return change(a,user3.getId());
}
}