【JDBC】Java操作数据库

JDBC连接数据库

一、JDBC

​ 概念:JDBC(Java DataBase Connectivity) 是一种Java数据库连接计数,能实现Java程序对各种数据库的访问。有一组使用Java语言编写的类和接口组成,称为JDBC API
在这里插入图片描述

作用:
​ 1)建立与数据库之间的访问连接
​ 2)将编写好的SQL语句发送到数据库执行
​ 3)对数据库返回的结果进行处理

二、使用JDBC访问数据库

1、几个重要的JDBC API

​ 1)DriverManager类:负责依据数据库的不同,管理JDBC驱动
​ 2)Connection(连接)接口:负责连接数据库并担任传送数据的任务
​ 3)Statement接口:有Connection产生,负责执行SQL语句
​ 4)ResultSet 接口:负责保存Statement 执行后所产生的执行结果

​ 2、访问数据库的步骤:
1.加载驱动Class.forName();
2.创建连接 Connection conn = DriverManager.getConnection(url,user,pwd);
3.创建Statement执行SQL语句 Statement stmt = conn.createStatement();
4.返回ResultSet查询结果 ResultSet rs = stmt.execute(sql);
5.释放资源 .close();
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//使用DriverManager类获取数据库连接
//配置url地址,jdbc:mysql://主机:端口/数据库
String url = "jdbc:mysql://localhost:3306/kgcnews";
Connection connection = DriverManager.getConnection(url,"root","root");
//执行SQL语句
Statement stmt = connection.createStatement();
String sql = "select * from news_detail";
ResultSet rs = stmt.executeQuery(sql); //结果集保存到ResultSet
while(rs.next){  	//获取查询的各个字段
   String id = rs.getInt(1);	//数字表示按顺序第几个字段
   String title = rs.getString("title");//具体某列的值
   System.out.println("id:"+id+",\t title:"+title)
}
//使用结束关闭资源,注意要判空
	rs.close();
	stmt.close();
	connection.close();

​ 读取配置文件的方式
  改配置文件要比改Java代码方便
​ 创建jdbc.peoperties配置文件,将数据库的信息写入配置文件

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/kgcnews
jdbc.user = root
jdbc.password = root

加载配置文件

public static void loadProperties() {
    	//读取文件内容
        InputStream is = JDBCUtil.class.getResourceAsStream("jdbc.properties");
       	//创建peoperties对象
    	Properties prop = new Properties();
        try {
            prop.load(is); //从字节输入流中读取键值对
            //根据键获取对应的值
            String driver = prop.getProperty("jdbc.driver");
            String url = prop.getProperty("jdbc.url");
            String user = prop.getProperty("jdbc.user");
            String password = prop.getProperty("jdbc.password");
            //后面为具体的用JDBC连接数据库步骤
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
3、操作数据库

​对数据库进行增删改查操作
Statement 与prepareStatement
  Staement 由方法 createStatement() 创建,该对象用于发送简单的SQL语句
  prepareStatement 由方法 prepareStatement() 创建,该对象用于发送带有一个或者多个输入参数的SQL语句
​  SQL语句使用 '?'作为占位符
  用setXxx()方法设置数据
例:

	Connection conn=null;
    Statement stmt = null;
    ResultSet rs = null;

 Statement进行插入操作

			public void insert() {
        try {
            stmt =conn.createStatement();
            String sql = "insert  into news_detail values (3,1,'测试','测试结果数据放在这里',null,null,'admin',now(),null );";
           //执行插入语句
            stmt.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 Statement进行删除操作

public void delete(int id ){
        try {
            stmt =conn.createStatement();
            //删除的sql语句
            String sql = "delete from news_detail where id="+id;
            //执行删除语句
            stmt.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 Statement进行更新操作

 public void update() {
        try {
            stmt = conn.createStatement();
            String sql = "update news_detail set title ='测试新参数' where id=3";
            stmt.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 Statement进行查询操作

public void queryAll(String str){
        //要执行的动作
        try {
        	//创建statement对象
            stmt = conn.createStatement();
            String sql = "select * from news_detail"+str;
            //执行查询语句,结果集保存到ResultSet中
            rs = stmt.executeQuery(sql);
            while (rs.next()) {
                int id = rs.getInt(1);
                String title = rs.getString("title");
                System.out.println("id:"+id+",title:"+title);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 prepareStatement进行操作
   和Statement可以多有 ’ ?'和setXxx()赋值的区别,后续操作与Statement操作类似,后面只贴了一个insert的操作

PrepareStatement psmt =null;
public void insertUser(int id,String name,String pwd,String email,int userType) {
        try {
            String sql = "insert into news_user values(?,?,?,?,?)";
            
            PrepareStatement pstm = conn.prepareStatement(sql);
            
            //用set方式给插入的值赋值,1-4对应上面的sql语句
            pstm.setInt(1, id);
            pstm.setString(2, name);
            pstm.setString(3, pwd);
            pstm.setString(4, email);
            pstm.setInt(5, userType);
            //执行SQL语句
            pstm.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
4、execute、executeQuery、executeUpdate区别
  • execute:
      执行SQL语句,返回的是boolean值,表示查询的结果集(ResultSet接受)是否返回了
    在这里插入图片描述

  • executeQuery:
      只能执行查询的SQL语句,返回的是一个ResultSet结果集
    在这里插入图片描述

  • executeUpdate:
      执行的是insert,update,delete的SQL语句,返回的是一个int型整数值,表示受到影响的行数;
    在这里插入图片描述
    5、statment 和preparestatment区别
    错误以及不足之处请指正,谢谢!

发布了27 篇原创文章 · 获赞 19 · 访问量 1305

猜你喜欢

转载自blog.csdn.net/weixin_42804692/article/details/102592467