JDBC基础

一:JDBC简介

JDBC是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组Java语言编写的类和接口组成。


二:JDBC连接数据库的步骤

0:导入JDBC相关jar包

1:加载驱动程序

2:获取Connection连接对象

3:准备Sql语句

4:发送Sql语句PrepareStatement ,并分析执行结果ResultSet

5:关闭资源

三:步骤细节

1加载驱动程序:

mySQL数据库:

 Class.forName(“com.mysql.jdbc.Driver”);

Oracle数据库:

Class.forName(“oracle.jdbc.OracleDriver”);

 

2获得连接对象

mySQL数据库:

 conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");

曾经,我连接时出现过的这个问题:

mySQL 警告WARN: Establishing SSL connection without server's identity verification is not recommended.

 

解决办法改下连接字符串,格式如下:

 conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false","root", "123456");

 

Oracle数据库便携版:

 conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hr", "123");


3准备sql语句

sql语句根据有无参数可以分为,有参数sql语句和无参数sql语句。

 

其中有参数的sql语句绑定参数的写法有两种方式:

1)字符串拼接

2)?占位符的方式

 

这两种方法各有优缺点

1)字符串拼接   

Srting id=”123”;

String sql =”Select * from t_user where  id=’”+id+”’”;

   缺点:容易被Sql注入破坏sql结构。

2)?占位符的方式

Srting id=”123”;

String sql =”Select * from t_user where  id=?”;

prsm.setString(1, id);//绑定参数

   缺点:无法绑定特定列,完成特定功能。如动态按照表的某列进行排序。

4:发送Sql语句

 prsm=conn.prepareStatement(sql);

 

prsm.executeUpdate();返回影响行数,用于增删改。

 

5:ResultSet

ResultSet rs=prsm.executeQuery();//返回传入sql语句的查询结果(与数据库中的表列的数据没关系)  用于查询数据

While(rs.next())

{

String id=rs.getString(1);

String id=rs.getString(“id”);

//参数可以传入sql语句查询结果列的编号【从1开始】或列名(与查询sql语句的列名保持一致。)

}


6:关闭资源(原则:先打开的资源,后关闭。)


四:连接实例

	public static void main(String[] args) throws Exception {
		
		Connection conn=null;
		PreparedStatement prsm=null;
		ResultSet rs=null;
		Product p=null;
		try{		
			Class.forName("oracle.jdbc.OracleDriver");
			conn=JDBCUtil.getConnection();
			String sql="select * from shop_product";
			prsm=conn.prepareStatement(sql);
			rs=prsm.executeQuery();
			p=new Product();
			while(rs.next()){
				p.setId(rs.getInt(1)); 
				p.setName(rs.getString(2));
				p.setPrice(rs.getInt(3));
				p.setPath(rs.getString(4));
				p.setDiscription( rs.getString(5));
				System.out.println(p);
			}
		
		}finally{
			JDBCUtil.relise(rs, prsm, conn);
		}
		
	}

五:对JDBC的简单封装


public class JDBCUtil {
	private static final Properties prop=new Properties();
	
	static{
		InputStream is=null;
		try {
			 is=new FileInputStream("bin//jdbc.properties");
			prop.load(is);
			String className=prop.getProperty("className");
			Class.forName(className);			
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally{
			try {
				if(is!=null)
					is.close();
				} catch (IOException e) {			
					e.printStackTrace();
				}
		}
	}
	
	public static Connection getConnection (){
		try{
			String url=prop.getProperty("url");
			String user=prop.getProperty("user");
			String password=prop.getProperty("password");			
			return DriverManager.getConnection(url, user, password);
		}catch(Exception e){
			e.printStackTrace();
		}
		
		return null;
	}
	
	public static void relise(ResultSet rs,PreparedStatement prsm,Connection conn){
		try{
			if(rs!=null)
				rs.close();
			if(prsm!=null)
				prsm.close();
			if(conn!=null)
				conn.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
properties文件的配置

猜你喜欢

转载自blog.csdn.net/sugar_map/article/details/79858810