string sql = "sql命令insertinto into写入外部变量怎么写,如下代码请帮忙看错在哪里了

用 Groovy 进行 JDBC 编程
此内容是该系列 # 部分中的第 # 部分: 实战 Groovyhttp://www.ibm.com/developerworks/cn/library/?series_title_by=**auto**敬请期待该系列的后续内容。此内容是该系列的一部分:实战 Groovy敬请期待该系列的后续内容。
实战 Groovy系列的前几期中,您已经了解了 Groovy 的一些非常优美的特性。在
中,学习了如何用 Groovy 对普通的 Java(TM) 代码进行更简单、更迅速的单元测试。在
中,看到了 Groovy 能够给 Ant 构建带来的表现能力。这一次您会发现 Groovy 的另一个实际应用,即如何用它迅速地构建基于 SQL 的报告应用程序。
脚本语言对于迅速地构建报告应用程序来说是典型的优秀工具,但是构建这类应用程序对于 Groovy 来说特别容易。Groovy 轻量级的语法可以消除 Java 语言的 JDBC 的一些繁冗之处,但是它真正的威力来自闭包,闭包很优雅地把资源管理的责任从客户机转移到框架本身,因此更容易举重若轻。在本月的文章中,我先从 GroovySql 的概述开始,然后通过构建一个简单的数据报告应用程序,向您演示如何将它们投入工作。为了从讨论中得到最大收获,您应当熟悉 Java 平台上的 JDBC 编程。您可能还想回顾
,因为它们在这里扮演了重要的角色。但是,本月关注的重点概念是迭代(iteration),因为迭代器在 Groovy 对 JDBC 的增强中扮演着重要角色。所以,我将从 Groovy 中迭代器的概述开始。
进入迭代器迭代是各种编程环境中最常见、最有用的技术。
迭代器是某种代码助手,可以让您迅速地访问任何集合或容器中的数据,每次一个数据。Groovy 把迭代器变成隐含的,使用起来更简单,从而改善了 Java 语言的迭代器概念。在清单 1 中,您可以看到使用 Java 语言打印
String集合的每个元素需要做的工作。
清单 1. 普通 Java 代码中的迭代器 import java.util.ArrayL
import java.util.C
import java.util.I
public class JavaIteratorExample {
public static void main(String[] args) {
Collection coll = new ArrayList();
coll.add("JMS");
coll.add("EJB");
coll.add("JMX");
for(Iterator iter = coll.iterator(); iter.hasNext();){
System.out.println(iter.next());
}在清单 2 中,您可以看到 Groovy 如何简化了我的工作。在这里,我跳过了
Iterator接口,直接在集合上使用类似迭代器的方法。而且,
Groovy 的迭代器方法接受闭包,每个迭代中都会调用闭包。清单 2 显示了前面基于 Java 语言的示例用 Groovy 转换后的样子。
清单 2. Groovy 中的迭代器 class IteratorExample1{
static void main(args) {
coll = ["JMS", "EJB", "JMX"]
coll.each{ item | println item }
}您可以看到,与典型的 Java 代码不同,Groovy 在允许我传递进我需要的行为的同时,控制了特定于迭代的代码。使用这个控制,Groovy 干净漂亮地把资源管理的责任从我手上转移到它自己身上。让 Groovy 负责资源管理是极为强大的。它还使编程工作更加容易,从而也就更迅速。GroovySql 简介Groovy 的 SQL 魔力在于一个叫做 GroovySql 的精致的 API。使用闭包和迭代器,GroovySql 干净漂亮地把 JDBC 的资源管理职责从开发人员转移到 Groovy 框架。这么做之后,就消除了 JDBC 编程的繁琐,从而使您可以把注意力放在查询和查询结果上。如果您忘记了普通的 Java JDBC 编程有多麻烦,我会很高兴提醒您!在清单 3 中,您可以看到用 Java 语言进行的一个简单的 JDBC 编程示例。清单 3. 普通 Java 的 JDBC 编程 import java.sql.C
import java.sql.DriverM
import java.sql.ResultS
import java.sql.SQLE
import java.sql.S
public class JDBCExample1 {
public static void main(String[] args) {
Connection con =
Statement stmt =
ResultSet rs =
Class.forName("org.gjt.mm.mysql.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/words",
"words", "words");
stmt = con.createStatement();
rs = stmt.executeQuery("select * from word");
while (rs.next()) {
System.out.println("word id: " + rs.getLong(1) +
" spelling: " + rs.getString(2) +
" part of speech: " + rs.getString(3));
}catch(SQLException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
try{rs.close();}catch(Exception e){}
try{stmt.close();}catch(Exception e){}
try{con.close();}catch(Exception e){}
}哇。清单 3 包含近 40 行代码,就是为了查看表中的内容!如果用 GroovySql,您猜要用多少行?如果您猜超过 10 行,那么您就错了。请看清单 4 中,Groovy 替我处理底层资源,从而非常漂亮地让我把注意力集中在手边的任务 —— 执行一个简单的查询。清单 4. 欢迎使用 GroovySql ! import groovy.sql.Sql
class GroovySqlExample1{
static void main(args) {
sql = Sql.newInstance("jdbc:mysql://localhost:3306/words", "words",
"words", "org.gjt.mm.mysql.Driver")
sql.eachRow("select * from word"){ row |
println row.word_id + " " + row.spelling + " " + row.part_of_speech
}真不错。只用了几行,我就编码出与清单 3 相同的行为,不用关闭
Connection,也不用关闭
ResultSet,或者在 JDBC 编程中可以找到的任何其他熟悉的重要特性。这是多么激动人心的事情啊,并且还是如此容易。现在让我来仔细介绍我是如何做到的。
执行简单的查询在
的第一行中,我创建了 Groovy 的
Sql类的实例,用它来连接指定的数据库。在这个例子中,我创建了
Sql实例,指向在我机器上运行的 MySQL 数据库。到现在为止都非常基本,对么?真正重要的是一下部分,迭代器和闭包一两下就显示出了它们的威力。
eachRow方法当成传进来的查询生成的结果上的迭代器。在底层,您可以看到返回了 JDBC
ResultSet对象,它的内容被传递进
for循环。所以,每个迭代都要执行我传递进去的闭包。如果在数据库中找到的
word表只有三行,那么闭包就会执行三次 —— 打印出
spelling和
part_of_speech的值。
如果将等式中我指定的变量
row去掉,而使用 Groovy 的一个隐含变量
it(它恰好就是迭代器的实例),代码可以进一步简化。如果我这样做,那么前面的代码就可以写成清单 5 所示的这样:
清单 5. GroovySql 中的
import groovy.sql.Sql
class GroovySqlExample1{
static void main(args) {
sql = Sql.newInstance("jdbc:mysql://localhost:3306/words", "words",
"words", "org.gjt.mm.mysql.Driver")
sql.eachRow("select * from word"){ println it.spelling +
" ${it.part_of_speech}"}
}在这个代码中,我可以删除
row变量,用
it代替。而且,我还能在
String语句中引用
it变量,就像我在
${it.part_of_speech}中所做的那样。
执行更复杂的查询前面的例子相当简单,但是 GroovySql 在处理更复杂的数据操纵查询(例如
delete查询)时,也是非常可靠的。 对于这些查询,您没有必要用迭代器,所以 Groovy 的
Sql对象另外提供了
executeUpdate方法。这些方法让人想起普通的 JDBC
statement类,它也有
executeUpdate方法。
在清单 6 中,您看到一个简单的
insert,它再次以
${}语法使用变量替换。这个代码只是向
word表插入一个新行。
清单 6. 用 GroovySql 进行插入 wid = 999
spelling = "Nefarious"
pospeech = "Adjective"
sql.execute("insert into word (word_id, spelling, part_of_speech)
values (${wid}, ${spelling}, ${pospeech})")Groovy 还提供
execute方法的一个重载版本,它接收一列值,这些值与查询中发现的
?元素对应。在清单 7 中,我简单地查询了
word表中的某个行。在底层,GroovySql 创建了普通 Java 语言
java.sql.PreparedStatement的一个实例。
清单 7. 用 GroovySql 创建 PreparedStatement 的实例 val = sql.execute("select * from word where word_id = ?", [5])更新的方式基本相同,也使用
executeUpdate方法。还请注意,在清单 8 中
executeUpdate方法接收一列值,与查询中的
?元素对应。
清单 8. 用 GroovySql 进行更新 nid = 5
spelling = "Nefarious"
sql.executeUpdate("update word set word_id = ? where spelling = ?", [nid, spelling])删除实际上与插入相同,当然,语法不同,如清单 9 所示。清单 9. 用 GroovySql 进行删除 sql.execute("delete from word where word_id = ?" , [5])简化数据操纵任何想简化 JDBC 编程的 API 或工具最好有一些好的数据操纵特性,在这一节中,我要向您再介绍三个。数据集 (DataSet)构建于 GroovySql 简单性的基础之上,GroovySql 支持
DataSet类型的概念,这基本上是数据库表的对象表示。使用
DataSet,您可以在行中遍历,也可以添加新行。实际上,用数据集是方便地表示表格的公共数据集合的方式。
但是,目前 GroovySql
DataSet类型的不足之处是它们没有代表关系;它们只是与数据库表的一对一映射。在清单 10 中,我创建了一个来自
清单 10. 用 GroovySql 创建数据集 import groovy.sql.Sql
class GroovyDatasetsExample1{
static void main(args) {
sql = Sql.newInstance("jdbc:mysql://localhost:3306/words", "words",
"words", "org.gjt.mm.mysql.Driver")
words = sql.dataSet("word")
words.each{ word |
println word.word_id + " " + word.spelling
words.add(word_id:"9999", spelling:"clerisy", part_of_speech:"Noun")
}您可以看到,GroovySql 的
DataSet类型可以容易地用
each方法对表的内容进行遍历,容易地用
add方法添加新行,
add方法接受一个
map表示需要的数据。
使用存储过程和负索引存储过程调用和负索引(negative indexing)可能是数据操纵的重要方面。GroovySql 使存储过程调用简单得就像在
Sql类上使用
call方法一样。对于负索引, GroovySql 提供了自己增强的
ResultSet类型,它工作起来非常像 Groovy 中的
collections。例如,如果您想获取结果集中的最后一个项目,您可以像清单 11 所示的那样做:
清单 11. 用 GroovySql 进行负索引 sql.eachRow("select * from word"){ grs |
println "-1
= " + grs.getAt(-1) //prints spelling
println "2
= " + grs.getAt(2) //prints spelling
}您在清单 11 中可以看到,提取结果集的最后一个元素非常容易,只要用 -1 作索引就可以。如果想试试,我也可以用索引 2 访问同一元素。这些例子非常简单,但是它们能够让您很好地感觉到 GroovySql 的威力。我现在要用一个演示目前讨论的所有特性的实际例子来结束本月的课程。编写一个简单的报告应用程序报告应用程序通常要从数据库拖出信息。在典型的业务环境中,可能会要求您编写一个报告应用程序,通知销售团队当前的 Web 销售情况,或者让开发团队对系统某些方面(例如系统的数据库)的性能进行日常检测。为了继续这个简单的例子,假设您刚刚部署了一个企业范围的 Web 应用程序。当然,因为您在编写代码时还(用 Groovy)编写了充足的单元测试,所以它运行得毫无问题;但是您还是需要生成有关数据库状态的报告,以便调优。您想知道客户是如何使用应用程序的,这样才能发现性能问题并解决问题。通常,时间约束限制了您在这类应用程序中能够使用的提示信息的数量。但是您新得到的 GroovySql 知识可以让您轻而易举地完成这个应用程序,从而有时间添加更多您想要的特性。
细节在这个例子中,您的目标数据库是 MySQL,它恰好支持用查询发现状态信息这一概念。以下是您有兴趣的状态信息:运行时间。处理的全部查询数量。特定查询的比例,例如
用 GroovySql 从 MySQL 数据库得到这个信息太容易了。由于您正在为开发团队构建状态信息,所以您可能只是从一个简单的命令行报告开始,但是您可以在后面的迭代中把报告放在 Web 上。这个报告例子的用例看起来可能像这样:1.连接到我们的应用程序的活动数据库。2.发布
show status查询并捕获:
a. 运行时间b. 全部查询数c. 全部
3.使用这些数据点,计算:a. 每分钟查询数b. 全部
insert查询百分比
update查询百分比
select查询百分比
在清单 12 中,您可以看到最终结果:一个将会报告所需数据库统计信息的应用程序。代码开始的几行获得到生产数据库的连接,接着是一系列
show status查询,让您计算每分钟的查询数,并按类型把它们分开。请注意像
uptime这样的变量如何在定义的时候就创建。
清单 12. 用 GroovySql 进行数据库状态报告import groovy.sql.Sql
class DBStatusReport{
static void main(args) {
sql = Sql.newInstance("jdbc:mysql://yourserver.anywhere/tiger", "scott",
"tiger", "org.gjt.mm.mysql.Driver")
sql.eachRow("show status"){ status |
if(status.variable_name == "Uptime"){
}else if (status.variable_name == "Questions"){
questions =
println "Uptime for Database: " + uptime
println "Number of Queries: " + questions
println "Queries per Minute = "
+ Integer.valueOf(questions)/Integer.valueOf(uptime)
sql.eachRow("show status like 'Com_%'"){ status |
if(status.variable_name == "Com_insert"){
insertnum =
Integer.valueOf(status[1])
}else if (status.variable_name == "Com_select"){
selectnum =
Integer.valueOf(status[1])
}else if (status.variable_name == "Com_update"){
updatenum =
Integer.valueOf(status[1])
println "% Queries Inserts = " + 100 * (insertnum / Integer.valueOf(uptime))
println "% Queries Selects = " + 100 * (selectnum / Integer.valueOf(uptime))
println "% Queries Updates = " + 100 * (updatenum / Integer.valueOf(uptime))
实战 Groovy本月的这一期文章中,您看到了 GroovySql 如何简化 JDBC 编程。这个干净漂亮的 API 把闭包和迭代器与
Groovy 轻松的语法结合在一起,有助于在 Java 平台上进行快速数据库应用程序开发。最强大的是,GroovySql 把资源管理任务从开发人员转移到底层的 Groovy 框架,这使您可以把精力集中在更加重要的查询和查询结果上。但是不要只记住我这句话。下次如果您被要求处理 JDBC 的麻烦事,那时可以试试小小的 GroovySql 魔力。然后给我发封电子邮件告诉我您的体会。
实战 Groovy下一月的文章中,我要介绍 Groovy 模板框架的细节。您会发现,用这个更加聪明的框架创建应用程序的视图组件简直就是小菜一碟。
相关主题您可以参阅本文在 developerWorks 全球站点上的
不要错过 Andrew 的
系列的每一期。
Andrew 的作品“
”(developerWorks,2004 年 8 月),是介绍 Groovy 的系列文章。
请参阅以下 developerWorks 文章,学习更多 JDBC/SQL 编程的内容:
是专门针对 Groovy 的 Web 站点。
可以找到数百篇有关 Java 各个方面的技术文章。
的以 Java 为重点的免费教程的完整列表。
添加或订阅评论,请先或。
有新评论时提醒我
static.content.url=http://www.ibm.com/developerworks/js/artrating/SITE_ID=10Zone=Java technology, Information ManagementArticleID=58195ArticleTitle=实战 Groovy: 用 Groovy 进行 JDBC 编程publish-date=在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
$query = "insert into books values
('".$isbn."', '".$author."', '".$title."', '".$price."')";
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这就要从双引号和单引号的作用讲起:
双引号里面的字段会经过编译器解释然后再当作HTML代码输出,但是单引号里面的不需要解释,直接输出。例如:
$abc='I love u';
//结果是:I love u
echo '$abc'
//结果是:$abc
echo "$abc"
//结果是:I love u
所以在对数据库里面的SQL语句赋值的时候也要用在双引号里面SQL="select a,b,c from ..."
但是SQL语句中会有单引号把字段名引出来
例如:select * from table where user='abc';
这里的SQL语句可以直接写成SQL="select * from table where user='abc'"
但是如果象下面:
$user='abc';
SQL1="select * from table where user=' ".$user." '
";对比一下
SQL2="select * from table where user='
我把单引号和双引号之间多加了点空格,希望你能看的清楚一点。
也就是把'abc' 替换为 '".$user."'都是在一个单引号里面的。只是把整个SQL字符串分割了。
SQL1可以分解为以下3个部分
1:"select * from table where user=' "
字符串之间用 . 来连接
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。动态SQL中 insert into select 字段值是变量时,变量是字符会出错:列名无效
set @sql='insert into table1 (test1,test2,test3) select test01,test02,'+ @test03 +' from table2'
exec (@sql)
当@test03 是数字时,能正常执行,当@test03 是数字加字符时,字符会被截断,当@test03 是字符串时,会出现列名无效。其中所有变量都是nvarchar类型。表中的字段都是varchar。
变量用三个引号时,也能正常执行,如:
set @sql='insert into table1 (test1,test2,test3) select test01,test02,'''+ @test03 +''' from table2'
但是当后面有where子句,并且where子句:
set @sql='insert into table1 (test1,test2,test3) select test01,test02,'''+ @test03 +''' from table2 where test01+'' ''+test02&(select max(test1) from table1'
这时候就不能执行了。条件就是test01+空格+test02的值要大于test1
test1,test2,test3是table1中的字段
test01,test02,test03是table2中的字段
这是什么原因?bug??
win;sql2005sp3,以上代码在sql2005中调试的,请各位达人指教,谢谢!
set @sql='insert into table1 (test1,test2,test3) select test01,test02,'''+ @test03 +''' from table2 where test01'+' '+'test02&(select max(test1) from table1)'
字符串中的单引号用2个单引号表示
已标记为答案
set @sql='insert into table1 (test1,test2,test3) select test01,test02,'''+ @test03 +''' from table2 where test01'+' '+'test02&(select max(test1) from table1)'
字符串中的单引号用2个单引号表示
已标记为答案
字符串要用单引号引起来,所以是你的语句没拼对, 不是BUG
参考1楼的示例
楼主要是能把当后面加Where子句后不能执行报的错贴出来就好办多了,
当后面有Where子句的时候,楼主的语句只有一个明显的问题,就是最后少了一个括号,其它基本对的
set @sql='insert into table1 (test1,test2,test3) select test01,test02,'''+ @test03 +''' from table2 where test01+'' ''+test02&(select max(test1) from table1)'
还有可能存在问题的地方就是test01+ ' ' +test02的时候,能确认一下这两个字段都是字符相关类型的么?
@sql1 = 'INSERT INTO Event2010.dbo.['+@tablename+'] (EventDateTime,EventType,EventCategory,EventID,EventSource,EventUser,EventComputer,EventDescription,ComputerSN,EventName)select EventDate+'+''' '''+'+EventTime,EventType,EventCategory,EventID,EventSource,EventUser,EventComputer,EventDescription,''' + @tablename + ''',''' + @EventName + '''from Event2010.dbo.EventTmp where cast(EventDate+'+''' '''+'+EventTime as datetime) & (select max(EventDateTime) from Event2010.dbo.[99WDMT6])'
在第一次相加的时候是正确的,EventDateTime是datetetime类型,EventDate和EventTime是字符,转换正确,但是在where里面,同样的写法就不行啦,没办法录入数据,去掉where字句就可以了
请查看一下这篇文章http://hi.baidu.com/jinwb/blog/item/ed65ba728da5df.html
动态变量在SQL2000中应该使用三个单引号 所以你的代码:'+ @test03 +'& 应改为'''+@test03+'''
顺便提示下:在SQL05中像你以前那样可以
&@test03 是table2的一个列名,还是变量值当然常量?
如果是传值那直接都加上引号,即使Table1当前列是数值,也可以隐式转换More: blog.csdn.net/happyflystonePHP+MySQL数据库教程 列表
相关参考课程MySQL Insert Into 添加数据INSERT INTO
INSERT INTO 语法用于向数据表中添加数据记录。
INSERT INTO tb_name VALUES (value1, value2,...)
该语法表示向表中所有的字段按顺序都插入数据记录。
但更多情况下是向指定的列添加记录:
INSERT INTO tb_name (column1, column2,...) VALUES (value1, value2,...)
下面的例子向 user 表添加一条记录:
$conn = @mysql_connect(&localhost&,&root&,&root123&);
if (!$conn){
die(&连接数据库失败:& . mysql_error());
mysql_select_db(&test&, $conn);
mysql_query(&set names 'gbk'&);
//为避免中文乱码做入库编码转换
//mysql_query(&set names 'utf8'&); //PHP 文件为 utf-8 格式时使用
$password = md5(&123456&);
//原始密码 12345 经过加密后得到加密后密码
$regdate = time();
//得到时间戳
$sql = &INSERT INTO user(username, password, email, regdate)VALUES('小王', '$password',
'', $regdate)&;
//exit($sql);
//退出程序并打印 SQL 语句,用于调试
if(!mysql_query($sql,$conn)){
echo &添加数据失败:&.mysql_error();
echo &添加数据成功!&;
如果是表单提交的数据,那么在数据处理页面可以使用 $_POST 或 $_GET 接收表单数据而将数据写入数据表。关于表单数据具体可见《》。
为了避免数据记录因为编码问题无法写入数据表或写入乱码,所以在执行 mysql_query() 之前,进行了编码转换
存储密码为实际密码经过 MD5 加密,MD5 加密不可逆,如要验证密码,只需将用户输入的密码经 MD5 加密后与数据库密码比对即可
在 SQL 语句中,我们使用单引号''来表示文本字符属性
为了调试数据写入数据表中出现的异常,增加了退出程序并打印 SQL 语句的功能,在需要调试的时候可去掉语句前面的注释,使之生效而便于调试
5idev.com(我爱开发网) — 提供最好的 、、、 及sql语句中单引号,双引号的处理方法
转载 &更新时间:日 17:02:23 & 作者:
关于Insert字符串 很多同学都在(单引号,双引号)这个方面发生了问题,其实主要是因为数据类型和变量在作怪。
下面我们就分别讲述,虽然说的是Insert语句, 但是Select、Update、Delete语句都是一样的。 假如有下述表格:&&&&&&&&& mytabe&&&&&&&&& 字段1&&& username&&&& 字符串型(姓名)&&&&&&&&& 字段2&&& age&&&&&&&&& 数字型(年龄)&&&&&&&&& 字段3&&& birthday&&&&& 日期型(生日)&&&&&&&&& 字段4&&& marry&&&&&&& 布尔型(是否结婚,结婚为True,未结婚为False)&&&&&&&&& 字段5&&& leixing&&&&&& 字符串型(类型)&&&&&&&&& 1.&&&& 插入字符串型& 假如要插入一个名为张红的人,因为是字符串,所以Insert语句中名字两边要加单撇号,如:&&&&&&&&& strsql=“Insert into mytable(username) values(‘张红')”&&&&&&& 如果现在姓名是一个变量thename,则写成&&&&&&&&& strsql=”Insert into mytable(username) values(‘” & thename & “')”&&&& 这里Insert into mytable(username) values(‘是张红前面的部分,thename是字符串变量,') 是张红后面的部分。将thename变量替换成张红,再用&将三段连接起来,就变成了 strsql=“Insert into mytable(username) values(‘张红')”。如果要插入两个字段,如姓名为“张红”,类型为“学生”&&&&&&&& strsql=“Insert into mytable(username,leixing) values(‘张红','学生')”&&&&&&&& 如果现在姓名是一个变量thename,类型也是一个变量thetype,则写成:&&&&&&&&& strsql=”Insert into mytable(username,leixing) values(‘” & thename & “','” & thetype & “')”&&&&&&& 和第一个例子一样,将thename和thetype替换后,再用连接符,就连接成和上面一样的字符串了。&&&&&&&&& 2.&&&& 插入数字型&&&&&& 假如插入一个年龄为12的记录,要注意数字不用加单撇号:&&&&&&&& strsql=“Insert into mytable(age) values(12)”&&&&&&&&& 如果现在年龄是一个变量theage,则为:&&&&&&&& strsql=“Insert into mytable(age) values(“ & theage & “)”&&&&&&&&& 这里Insert into mytable(age) values(是12前面的部分,theage是年龄变量,)是12后面部分。 将theage替换,再用&连接符将三部分连接起来,就变为了和上面一样的字符。&&&&&&& 3.&&&& 插入日期型&&& 日期型和字符串型类似,但是要将单撇号替换为#号。(不过,access数据库中用单撇号也可以)&&& strsql=“Insert into mytable(birthday) values(##)”&&&&&&& 如果换成日期变量thedate&&&&&&&&& strsql=“Insert into mytable(birthday) values(#” & thedate & “#)”&&&&&& 4.&&&& 插入布尔型&& 布尔型和数字型类似:只不过只有两个值 True和False,如:&&&&&&&&& strsql=“Insert into mytable(marry) values(True)”&&&&&&&& 如果换成布尔变量themarry&&&&&& strsql=“Insert into mytable(birthday) values(” & themarry& “)”&&&&&&& 5.&&&& 综合示例&&&&&&& 插入一个姓名为张红,年龄为12的记录&&&&&&&& strsql=“Insert into mytable(username,age) values(‘张红',12)”&&&&&&&& 仔细注意上式:因为姓名是字符串,所以张红两边加了单撇号;年龄是数字,所以没有加单撇号。&&&&& 如果换成字符串变量thename和数字变量theage,则变为:&&&&&&& strsql=“Insert into mytable(username,age) values(‘” & thename & “',” & theage & “)”&&&& 注意上式,总之,替换变量,再连接后要完成和上边一样的字符串。&&&&&& 6.&&&& 小窍门&&&&& && 有一位同学摸索出了一个小窍门,要把下面的语句题换成变量的写法:&&&& && strsql=“Insert into mytable(username) values(‘张红')”&&&&&&&& && 第一步:先把张红抹去,在原位置加两个引号&&&&&&& && strsql=“Insert into mytable(username) values(‘”&& “')”&&&&&&&& && 第二步:在中间添加两个连接符&&&&&&&&& && strsql=“Insert into mytable(username) values(‘” & & “')”&&&&&&& && 第三步:把变量写在两个连接符之间&&&&&&&&& && strsql=“Insert into mytable(username) values(‘” & thename & “')” -
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 sql语句 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信