在介绍动态SQL前我们先看看什么是静态SQL
静态SQL
静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的。静态 SQL 语句的编译是在应用程序运行前进行的,编译的结果会存储在数据库内部。而后程序运行时,数据库将直接执行编译好的 SQL 语句,降低运行时的开销。
动态SQL
动态 SQL 语句是在应用程序运行时被编译和执行的,例如,使用 DB2 的交互式工具 CLP 访问数据库时,用户输入的 SQL 语句是不确定的,因此 SQL 语句只能被动态地编译。动态 SQL 的应用较多,常见的 CLI 和 JDBC 应用程序都使用动态 SQL。
动态SQL作用
动态SQL执行方法
使用EXEC(EXECUTE的缩写)命令和使用SP_EXECUTERSQL。
EXEC命令执行
语法
注:EXECUTE 命令有两个用途,一个是用来执行存储过程,另一个是执行动态SQL
不带参数示例
在变量@SQL中保存了一个字符串,该字符串中包含一条查询语句,再用EXEC调用保存在变量中的批处理代码,我们可以这样写SQL:
EXEC ('SELECT * FROM Customers')
结果如下:
与我们直接执行SELECT * FROM Customers一样。
带参数示例
还是上面的示例,我们换一种写法
DECLARE @SQL AS VARCHAR(100)
DECLARE @Column AS VARCHAR(20)
SET @Column = '姓名'
SET @SQL = 'SELECT ' + @Column + ' FROM Customers'
EXEC (@SQL)
结果如下:
SP_EXECUTERSQL执行
语法
注意:SP_EXECUTERSQL是继EXEC后另一种执行动态SQL的方法。使用这个存储过程更加安全和灵活,因为它支持输入和输出参数。注意的是,与EXEC不同的是,SP_EXECUTERSQL只支持使用Unicode字符串作为其输入的批处理代码。
示例
构造了一个对Customers表进行查询的批处理代码,在其查询过滤条件中使用一个输入参数@CusID
DECLARE @SQL AS NVARCHAR(100)
SET @SQL=N'SELECT * FROM Customers
WHERE 客户ID=@CusID'
EXEC SP_EXECUTESQL
@STMT=@SQL,
@PARMS=N'@CusID AS INT',
@CusID=1
结果如下:
代码中将输入参数取值指定为1,但即使采用不同的值在运行这段代码,代码字符串仍然保存相同。这样就可以增加重用以前缓存过的执行计划的机会
首先创建连接
就创建个Cnnection对象,然后把驱动加上,还有帐号密码什么的!我没连过sql数据库,不知道驱动,你可以在网上搜一下。
给你一个我连接mysql数据库的例子
public Connection Getdata(){//这是连接数据库的一个方法,还可以配置连接池。
Connection con=null
try {
Class.forName("com.mysql.jdbc.Driver")//加驱动
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/data","root","qq")//数据库路径、端口、库名、数据库用户名和密码
} catch (ClassNotFoundException e) {
e.printStackTrace()
} catch (SQLException e) {
e.printStackTrace()
}
return con
}
public void delete(int id){//对数据库进行 *** 作的方法,先调用上面写好的连接!
Connection con=Getdata()
Statement st
try {
st=con.createStatement()
st.executeUpdate("delete from kaoshi where id="+id)
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
}
在conf的自动加载,开启database自动加载,配置好数据库账号密码等,然后在控制器中如下:$userInfo = $this->db->get('user')//user为user表名
或者
$query = "select * from user"
$this->db->query($query)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)