sql 语句中的问号学习笔记

我看到的一个实例

 

 代码如下 复制代码
String sql = "SELECT userid,name FROM tuser WHERE userid=? AND password=?" ;
  pstmt = conn.prepareStatement(sql) ;
  pstmt.setString(1,userid) ; // 这里设置了第一个?的值
  pstmt.setString(2,password) ; // 这里设置了第二个?的值

等你“setString”完所有的?后,你的sql就构造好了。

好了,如果说还是不懂我又找到一篇相关文章

参考资料一:

 代码如下 复制代码

select * from table where username='syy913'

username='syy913'

后面是个字符串。在数据库里面采用的是当引号。有句口诀叫单单双双加加。

单是用在数据库里面的,双是用在外部编程语言里面的,在c# java等语言是用的双引号标识的字符串。

 代码如下 复制代码

string sql=”select * from table”;这就标识一个字符串。

string sql=”select * from table”+”where id>0″;2个字符串连接

下面的

 代码如下 复制代码

string sql=”select * from table where id>0″+”and name=?”;

这个问号表示 要传参数。 要在执行这个sql前就必须把参数给他,上面的name是字符型的。你在看这样写什么意思。

 代码如下 复制代码

string nn=”kill”

string sql=”select * from table where id>0 and name=?”;

由于?代表的是一个字符串。

们把nn输出来看 他是不到“”这个的。

那么就应该'nn'到数据库去,即

 代码如下 复制代码

string sql=”select * from table where id>0 and name='nn'”;

就可以了,为什么还要里面+个双引号呢?

 代码如下 复制代码

string sql=”select * from table where id>0 and name='”+nn+”‘”;

就把nn当一个变量给他了。

参考资料二:

这 个sql语句如果包含参数的话,可以用问号(”?”)来为参数进行占位,而不需要立即为参数赋值,而在语句执行之前,必须通过适当的set***()来 为问号处的参数赋值。New ParseInfo()中,包含了参数的sql语句就会被分解为多段,放在staticSql中,以便需要设置参数时定位参数的位置。假如sql语句为 “select * from adv where id = ? and name = ?”的话,那么staticSql中的元素就是3个,staticSql[3]={ ”select * from adv where id = ”, ” and name = ” , ””}。注意数组中最后一个元素,在这个例子中是””,因为我的例子里面最后一个就是”?”,如果sql语句是这样的“select * from adv where id = ? and name = ? order by id”的话,staticSql就变成是这样的{ ”select * from adv where id = ”, ” and name = ” , ” order by id”}。

无关参考三: (mysql 手册 c api 预处理语句)

25.2.7.4. mysql_stmt_bind_param()

my_bool mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)

描述

mysql_stmt_bind_param()用于为SQL语句中的参数标记符绑定数据,以传递给mysql_stmt_prepare()。它使用MYSQL_BIND结构来提供数据。“bind”是MYSQL_BIND结构的某一数组的地址。按照客户端库的预期,对于查询中出现的每个“?”参数标记符,数组中均包含1个元素。

假定你准备了下述语句:

 代码如下 复制代码

INSERT INTO mytbl VALUES(?,?,?)绑定参数时,MYSQL_BIND结构的数组包含3个元素,并能声明如下:

MYSQL_BIND bind[3];

时间: 2024-09-30 18:00:27

sql 语句中的问号学习笔记的相关文章

c++-如何利用C++来解析SQL语句中的select语句?

问题描述 如何利用C++来解析SQL语句中的select语句? SELECT * FROM stu WHERE ((Name = "Jack") AND ((Age > 18) OR (Height > 170))) 这是一条SQL语句,怎么用C++解析它,并从内存数据中输出结果?求大神给点思路即可.... 解决方案 你是要解析?还是要执行? 如果要执行SQL语句,需要学习ADO编程,可以百度一下vc ado编程. 解决方案二: 有c++和数据库对接的各种库的,mysql的

解析SQL语句中Replace INTO与INSERT INTO的不同之处

本篇文章是对SQL语句中Replace INTO与INSERT INTO的不同之处进行了详细的分析介绍,需要的朋友参考下   REPLACE的运行与INSERT很相似.只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除. 注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义.该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行. 所有列

解析sql语句中left

以下是对在sql语句中left_join.inner_join中的on与where的区别进行了详细的分析介绍,需要的朋友可以参考下   table a(id, type): id     type ---------------------------------- 1      1         2      1          3      2          table b(id, class): id    class -------------------------------

sql 语句中in的用法总结

问题描述 sql 语句中in的用法总结 sql 语句中 in的用法都有什么?在网上说有两种但是只见有一种用法,另一种用法是什么? 解决方案 sql语句Group By用法一则SQL语句中的NOT IN 的优化sql语句判断 case when用法(二) 解决方案二: http://blog.csdn.net/naruto517308294/article/details/8650507 解决方案三: 就一种吧http://www.w3schools.com/sql/sql_in.asp 解决方案

SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别  SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值. 如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL. 如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值. 如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入

ireport使用中文的问题(不是乱码,是不认sql语句中的中文)!

问题描述 我在建新的report模板时,使用向导的方式创建,默认的sql语句中如果包含中文,则不能正常显示结果,也没有报错.比如sql语句为"select name,age from user where name = '张三'",则在预览报表的时候,显示不出任何内容,但是在数据库中确实是存在内容的.有没有人遇到同样的问题呢....困扰很久了,帮帮忙! 解决方案 select name,age from user where name = '张三' hibernate3查询参数为中文时

网吧计费-SQL 语句中周六到周日的表达

问题描述 SQL 语句中周六到周日的表达 在做一个网吧收费系统,需要更新网吧收费数据:把周六到周日的收费改到平常的一半,每小时计算.如下图这样写提醒数据库类型转换失败,求教 解决方案 SELECT * FROM your_table WHERE ((DATEPART(dw, date_created) + @@DATEFIRST) % 7) IN (0, 1) 解决方案二: 楼主你确定update语句这么写? 不应该是 update record set fee = fee/2 where be

sql 语句中字符类型的转换问题,在线等!!!急!!!

问题描述 sql 语句中字符类型的转换问题,在线等!!!急!!! select 'http//'+ID+'.html' as LINK from A ID的字符类型是bigint的,出现错误提示:"从数据类型 varchar 转换为 bigint 时出错."求解决语法!!! 解决方案 select 'http//'+convert(varchar(20)ID)+'.html' as LINK from A 解决方案二: select 'http//'+cast t(ID as varc

求sql语句中带有条件的查询

问题描述 求sql语句中带有条件的查询 我现在有一张users表,有字段uid,uname,address,phone1,phone2,phone3: 我想在这张表中这样查: 主要查phone1,但是如果有一条数据的phone1位空的话,就查phone2,如果phone1,phone2都为空就查phone3,这样的SQL语句要怎么写呢,求大神帮忙解答???? 解决方案 select case when phone1 is null then ( case when phone2 is null