JDBC的使用

一、JDBC:Java Database Connecor

java语言连接数据库技术
实现:Java代码操作数据库
实现方式:java提供接口,由各大数据库厂商来写实现类,
因为每个厂商的数据库底层实现都是不一样的,这也叫接口驱动方式
补充:C#和Java的方式是正好相反,C#是自己写好各大数据库的连接代码

二、JDBC相关的API:四大接口和一个类

DriverManager 驱动管理类
Connection 数据库连接对象
Statement 操作sql语句并携带返回
PreparedStatement 操作sql语句并携带返回
Resultset 结果集——>只有查询的时候才会有

三、JDBC的使用

1.直接添加数据的方式
①导入jar包
②编写代码连接数据库
	1.加载驱动
		Class.forname("com.mysql.jdbc.Driver");
		说明:返回的对象不用我们操作,DriverManager底层会操作这个对象
	
	2.获取Connection对象,导包的时候注意是java.sql包下的
		通过DriverManager.getConnection("")返回Connection对象
		字符串里面放:jdbc:mysql://主机名:端口号/数据库名?user=用户名&password=密码
		&使用Unicode=truefalse&字符集=编码格式
		例子:
		Connection con = 
		DriverManager.getConnection("jdbc:mysql://localhost:3306/myemployees
		?user=root&password=root&useUnicode=true&characterEncoding=utf-8");
		注意:如果没有密码可以不写,但是password=要写
	3.编写SQL语句
		String sql = "语句";		
		注意:用java操作数据库的时候,sql语句必须是对的,
			  所以可以先去SQLyong中写好语句再复制进来,复制的时候不要把分号也复制了
	4.创建Statement st = Connection对象.createStatement();
		注意:Stratment也是java.sql包下的
	5.通过 ResultSet rs = st.executeQuery(sql);得到一个结果集
	6.遍历结果集	--> 这个时候才是返回数据的时候,返回的结果集是索引
		实现:while配合ResultSet对象的next()方法,和iterator的用法是类似的,
				也是先进行判断,然后再进行读取数据,
				然后通过ResultSet对象中的get数据类型("列名")得到相应的数据
	7.关闭资源
		rs.close();		关闭结果集
		st.close();		关闭Statement
		con.close();		关闭连接

代码实现:

    public static void main(String[] args) {
        //第一个程序
        try {
            // 1.加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 2.获得连接对象
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db4?user=root&password=root&useUnicode=true&characterEncoding=utf-8");
            // 3.编写sql语句
            String sql = "SELECT id,ename,salary FROM emp";

            // 4.执行sql语句
            Statement st = con.createStatement();

            // 5.执行sql语句,返回一个结果集
            ResultSet rs = st.executeQuery(sql);

            // 6.遍历rs结果集
            // while配合ResultSet对象的next()方法,和iterator的用法是类似的,
            //				也是先进行判断,然后再进行读取数据,
            //				然后通过ResultSet对象中的get数据类型("列名")得到相应的数据
            System.out.println("id\t\t名字\t\t工资");
            while (rs.next()){
                Integer id = rs.getInt("id");
                String name = rs.getString("ename");
                Double salary = rs.getDouble("salary");

                System.out.println(id + "\t" + name + "\t" + salary);
            }
            // 7.关闭资源
            rs.close();
            st.close();
            con.close();
        } catch (Exception throwables) {
            throwables.printStackTrace();
        }
    }
}	
2.通过控制台修改数据的方式
这种方式更加灵活,第1种方式只能添加一条固定的数据
	说明:①sql语句要用"+要添加的变量+"这样的形式将变量包起来
		   ②修改数据和删除数据是没有结果集返回的
				用st.executeUpdate(String str)方法可以返回一个int类型的值
				如果这个值等于1,就是添加成功了,如果是其他数据那就是添加失败
			③关资源的时候,不用关结果的那个资源,因为它返回的是一个值
		 
代码实现:
public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		System.out.println("输入id:");
   		int id = sc.nextInt();
    		System.out.println("输入姓名:");
    		String name = sc.next();
    		System.out.println("输入性别");
    		String gender = sc.next();
    		System.out.println("输入工资:");
    		String salary = sc.next();
    		System.out.println("输入加入日期:");
    		String date = sc.next();
    		System.out.println("输入部门id:");
    		int did = sc.nextInt();
    		try {
       		 Class.forName("com.mysql.jdbc.Driver");
        		Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3?user=root&password=root&useUnicode=true&characterEncoding=utf-8");
        	String sql = "INSERT INTO emp VALUES("+id+",'"+name+"','"+gender+"',"+salary+",'"+date+"',"+did+")";
       	Statement st = con.createStatement();
        	int index = st.executeUpdate(sql);
        	if (index == 1){
            	System.out.println("添加成功");
        	}else{
            System.out.println("添加失败");
        	}
        	st.close();
        	con.close();
    		} catch (Exception throwables) {
        		throwables.printStackTrace();
   		}
	}
3.通过PreparedStatement对象用控制台的方式
	说明:PreparedStatement(	PS)Statement(Sm)接口的子接口
	它们两者的区别?
		①PS在写sql语句的时候可以用占位符 ? 代替变量,然后再来填充占位符的值,St是"+变量+"
		②PS在执行之前,有一个预编译的动作,使得SQL语句执行效率搞,St不是
		③PS在创建对象的时候就需要传一个sql语句的参数,St是创建之后调用方法的时候再传的
	填充数据:PS.set类型(占位符的位置,变量名)
				从左到右,索引从1开始		
		例子:PS.set(1,“id”);
	注意:占位符 ? 不要用双引号引起来,程序会以为是个字符串
	结论:以后一律使用PS
	
	代码实现:
	
	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		System.out.println("输入id:");
    		int id = sc.nextInt();
    		System.out.println("输入姓名:");
    		String name = sc.next();
    		System.out.println("输入性别");
    		String gender = sc.next();
    		System.out.println("输入工资:");
    		Double salary = sc.nextDouble();
    		try {
        		Class.forName("com.mysql.jdbc.Driver");
        		Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3?user=root&password=root&useUnicode=true&characterEncoding=utf-8");
        		String sql = "INSERT INTO emps VALUES (2,?,?,?);";
        		PreparedStatement ps = con.prepareStatement(sql);   // 创建对象的时候通过传参传入sql
        		ps.setString(1,name);       // 填充数据
        		ps.setString(2,gender);
       			ps.setDouble(3,salary);
        		long index = ps.executeLargeUpdate();
        		if (index == 1){
            		System.out.println("添加成功");
        		}else{
            		System.out.println("添加失败");
        		}
        		ps.close();
        		con.close();
    		} catch (Exception throwables) {
        		throwables.printStackTrace();
   			}
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值