实训--day04jdbc

实训第四天:JDBC

昨天寝室没网,都没发。

1:jdbc操作数据库步骤:
1)加载驱动
Class.forName("com.mysql.jdbc.Drive");
2)创建数据库连接
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/warehouse?useUnicode=true&characterEncoding=UTF-8","root"," ");
3)编写sql语句
String sql="select * from users";
4)创建执行对象
Statement sta=conn.createStatement();
5)执行sql语句,返回结果集对象
ResultSet rs=sta.executeQuery(sql);
6)遍历结果集,获取查询结果
while(rs.next())
7)关闭数据库连接
conn.close();


2:其实就相面的步骤来讲,sql语句只直接给出的,所有查询细节多在里面,是非常不安全的
所以要引入一个预处理语句,preparedStatement,称之为预编译。
预编译:作用就是防止sql语句的注入,保证数据的安全性。
其次就是虽然预处理语句虽然在第一次执行的时候比较耗费资源,但是如果那个语句要多次执行的话,预处理语句是恨与优势的。
采用预编译的步骤和采用一般的statement的步骤区别:
1)之前我们进行查询等操作的时候,直接写完查询条件,使用预编译就在条件出使用占位符。
2)在创建完执行对象之后还有有一个数据绑定的操作,对之前使用了占位符的sql语句进行一个设置值的处理。
采用预编译语句的具体步骤:
1)加载驱动
Class.forName("com.mysql.jdbc.Drive");
2)创建数据库连接
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/warehouse?useUnicode=true&characterEncoding=UTF-8","root"," ");
3)编写sql语句
String sql="select * from users where id=?";
4)创建执行对象,此对象是PreparedStatement,用于防止sql注入的 预编译
PreparedStatement ps=conn.prepareStatement(sql);
5)数据绑定,赋值处理
ps.setInt(1, i);
6)执行对象,返回结果集
ResultSet rs=ps.executeQuery();
7)根据条件取出结果集里面的内容
if(rs.next())
8)关闭数据库连接
conn.close();


3:使用类加载器加载配置文件。
一般连接数据库的基本操作要使用的参数都是放在配置文件jdbc.properties中的。
加载配置文件的步骤:
1)获得该类的类对象并获得类加载器classLoader
ClassLoader cl=类名.class.getClassLoader();
2) 获得输入流:文件必须放置在src目录下
InputStream is = cl.getResourceAsStream("文件");
3)创建properties对象
Properties prop=new Properties();
4)把配置文件所在的输入流加载进prop对象,这个操作是必备的,如果没有则不能进行后续的获取配置文件里面的内容
prop.load(is);
5)获取配置文件里面的内容。
prop.getProperty("keyName");

jdbc功能封装:

配置文件:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1/warehouse?useUnicode=true&characterEncoding=UTF-8
jdbc.user=root
jdbc.password=
jdbc基本功能封装类:

package com.xishiyou.jdbc.test;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;

import com.xishiyou.jdbc.demo.JDBCDemo2;

public class JDBCUtils 
{
	ResultSet rs=null;
	Connection conn=null;
	PreparedStatement statement;
	public JDBCUtils()
	{
		InputStream is=JDBCDemo2.class.getClassLoader().getResourceAsStream("jdbc.properties");
		if(is==null)
		{
			is=JDBCDemo2.class.getClassLoader().getResourceAsStream("jdbc.properties");
		}
		Properties prop=new Properties();
		try 
		{
			prop.load(is);
		}
		catch (IOException e) 
		{
			e.printStackTrace();
		}
		try
		{
			Class.forName(prop.getProperty("jdbc.driver"));
			conn = DriverManager.getConnection(prop.getProperty("jdbc.url"),prop.getProperty("jdbc.user"),prop.getProperty("jdbc.password"));
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}

	}
	public int executeUpdate(String sql,List<Object> values) throws SQLException
	{
		try 
		{
			//执行sql语句
			statement =conn.prepareStatement(sql);
			//数据绑定
			for(int i=1;i<values.size();i++)
			{
				statement.setObject(i, values.get(i - 1));
			}
		}
		catch (SQLException e) 
		{
			throw e;
		}
		return statement.executeUpdate();
	}
	
	public ResultSet executeQuery(String sql,List<Object> values) throws SQLException
	{
		try
		{
			statement =conn.prepareStatement(sql);
			if(statement!=null)
			{
				//数据绑定
				for(int i=1;i<values.size();i++)
				{
					statement.setObject(i, values.get(i-1));
				}
			}
		}
		catch (SQLException e) 
		{
			throw e;
		}
		return statement.executeQuery();
	}
	
	public void close() throws SQLException
	{
		if(conn!=null)
		{
			conn.close();
		}
		if(statement!=null)
		{
			statement.close();
		}
		if(rs!=null)
		{
			rs.close();
		}
	}

}

测试类:

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class Test 
{
	public static void main(String[] args) throws Exception
	{
		JDBCUtils demo2=new JDBCUtils();
		String sql="select * from users";
		List<Object> values=new ArrayList<>();
		ResultSet rs=demo2.executeQuery(sql, values);
		while(rs.next())
		{
			System.out.print(rs.getString(1)+":");
			System.out.println(rs.getString(2));
		}
		demo2.close();
	}

}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值