JDBC学习第一站之Statement与PreparedStatement

2 篇文章 0 订阅
2 篇文章 0 订阅

Statement:

通过类的名字,把类(元数据对象)加载到内存中,加载驱动,由于是对数据流做操作,一定要加异常处理,后面也是

// 通过类的名字,把类(元数据对象)加载到内存中
Class.forName("com.mysql.jdbc.Driver");

创建一个数据库链接,getConnection方法中的第一个参数是指数据库类型和所操作数据库的名称,第二个参数是指用户名,第三个参数是指password<密码>

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/score", "root", "123456");
然后创建一个Statement对象

Statement stm = conn.createStatement();

一般执行SQL语句就是用,如果是查询则返回的是一张二维关系表,所以用ResultSet对象收集

<//执行增、删、改语句,返回int型,受影响的行数
	stm.executeUpdate(strSql);
	//返回一个ResultSet对象,其实就是一个表或者视图
	rst = stm.executeQuery(strSql);

ResultSet对象集,然后输出结果,如下

//输出结果
	while(rst.next()) {// 游标下移一行
		System.out.println(rst.getString("Sid") + "\t" + rst.getString("Sname"));
	}	

如果对数据库的操作完成了,则需要在finally里面关闭前面创建的对象,对象销毁按照创建的栈来进行

finally {
			//打开是先打开Connection,再打开ResultSet
			//关闭是反的关闭
			if(rst != null) {
				try {
					rst.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(stm != null) {
				try {
					stm.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

总的代码:

package JDBC_Study;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

public class MySqlDemo {

	public static void main(String[] args) {

		String strSql = "select * from student where ssex = '男';";
		//
		Connection conn = null;
		Statement stm = null;
		ResultSet rst = null ;
		
		try {
			// 通过类的名字,把类(元数据对象)加载到内存中
			Class.forName("com.mysql.jdbc.Driver");
			//
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/score", "root", "123456");
			stm = conn.createStatement();
			
			//执行增、删、改语句,返回int型,受影响的行数
			stm.executeUpdate(strSql);
			//返回一个ResultSet对象,其实就是一个表或者视图
			rst = stm.executeQuery(strSql);
			//输出结果
			while(rst.next()) {// 游标下移一行
				System.out.println(rst.getString("Sid") + "\t" + rst.getString("Sname"));
			}			
			
			
			
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//打开是先打开Connection,再打开ResultSet
			//关闭是反的关闭
			if(rst != null) {
				try {
					rst.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(stm != null) {
				try {
					stm.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}


 

PreparedStatement:

package JDBC_Study;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


public class PreparedStatementDemo {

	public static void main(String[] args) {

		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rst = null ;	
	
		String strSql = "select * from student where sid = ?";
				
		try {
			// 通过类的名字,把类(元数据对象)加载到内存中
			Class.forName("com.mysql.jdbc.Driver");
			//
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/score", "root", "123456");

			//执行增、删、改语句,返回int型,受影响的行数
//			pStm.executeUpdate();
			//返回一个ResultSet对象,其实就是一个表或者视图
			stmt = conn.prepareStatement(strSql);
			stmt.setString(1, "100081");
			rst = stmt.executeQuery();
			//输出结果
			while(rst.next()) {// 游标下移一行
				System.out.println(rst.getString("Sid") + "\t" + rst.getString("Sname"));
			}			
					
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//打开是先打开Connection,再打开ResultSet
			//关闭是反的关闭
			if(rst != null) {
				try {
					rst.close();
					
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

Statement 与 PreparedStatement 的优点和缺点:


* PreparedStatement接口继承Statement接口
*PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率  
提高了代码的可读性和可维护性
提高了 SQL 语句执行的性能
提高了安全性







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值