首页 > 代码库 > JDBC学习第一站之Statement与PreparedStatement

JDBC学习第一站之Statement与PreparedStatement

Statement:

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

<span style="white-space:pre">	</span>// 通过类的名字,把类(元数据对象)加载到内存中
<span style="white-space:pre">	</span>Class.forName("com.mysql.jdbc.Driver");

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

<span style="white-space:pre">	</span>Connection conn = DriverManager.getConnection(
	<span style="white-space:pre">	</span>"jdbc:mysql://localhost:3306/score", "root", "123456");
然后创建一个Statement对象

<span style="white-space:pre">	</span>Statement stm = conn.createStatement();

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

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

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

<span style="white-space:pre">	</span>//输出结果
	while(rst.next()) {// 游标下移一行
		System.out.println(rst.getString("Sid") + "\t" + rst.getString("Sname"));
	}	

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

<span style="white-space:pre">			</span><pre name="code" class="java"><span style="white-space:pre">		</span>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语句执行的性能
提高了安全性