当前位置:首页 » 编程语言 » sql查询返回对象

sql查询返回对象

发布时间: 2023-05-18 05:24:26

A. 事物对象属性sql code的返回值有哪些,分别表示什么

首先导入命名空间: using System.Data; using System.Data.SqlClient; 下面是我写的一个方法,返回的是DataSet对象,执行传过来的sql语句并将结果绑定到DataSet中,这样你在访问的时候就可以直接访问DataSet对象中的数据。 public static DataSet GetDataSet(string sqlStr) { using (SqlConnection con = new SqlConnection(connectionString)) { try { DataSet ds = new DataSet(); SqlDataAdapter sda = new SqlDataAdapter(sqlStr, con); sda.Fill(ds); return ds; } catch (Exception ee) { throw new Exception(ee.Message); } } } 我们访问DataSet对象中的数据: foreach(DataRow row in ds.Tables[0].Rows) { //通过row["列的索引"].ToString()或者是通过row["列名"]来访问DataSet中的数据 //这个ds就是你通过上面的方法返回的对象 } 除了键笑樱上面的这种方法呢,你也可以将数据绑定到SqlDataReader对升物象中,但是呢SqlDataReader对象必须保持数据库是始终连接的,适用于那些最新更稿丛新的操作,而DataSet绑定后可以断开连接,而DataSet对象就像是一个小型的数据库保存在内存中,用的时候可以直接用。

B. sql语句。 联合查询返回的结果集怎么用对象接收。 说明两个表无关联关系。比如:select a,

你是说程序后台代码接受吧? 如果是,可以采用DataSet 或者 DataTable 接受就可以了拦晌,然后根简猛锋据你的需要对 DS or DT 进行处知禅理就OK了。

C. 原生sql查询怎样返回page对象

最近由于需求变更,客户需要在原来的查询基础上加上一个判断条件,但是这个判断条件所在的实体跟原来的查询实体没有直接关联。为了不影响原来的查询结果,改为用原生SQL,使用left join来关联查询。为了不改变对查询结果的处理逻辑,将查询结果封装成原来的对象进行操作。具体操作方法如下:
1.基于JPA规范的程序:
Query query = entityManager.createNativeQuery("select id, name, age from t_user");
query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(clazz));
// 其中clazz为封装对象的class
List rows = query.getResultList();
2.基于Session的程序:
sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS").setResultTransformer(Transformers.aliasToBean(clazz));
这两种方法需要注意的是查询的字段的别名需要跟clazz的属性对应。

D. ExecuteQuery(sql)的返回值

返回包含给定查询所生成数悔如世据的 ResultSet 对象;永远碧肢不能为 null,橡带如果没有查询到信息,返回一个next()为false的ResultSet 对象

E. 如何直接执行SQL语句

1、ExecuteQuery方法

看命名,我们很容易联想到ADO.NET里熟悉的Command的ExecuteNonQuery方法,但是VS的智能提示告诉我们这个方法返回的是一个泛型集合,应该“所思非所得”。下面通过一个简单方法,验证我们的猜想(数据库设计可以参考这一篇):

/// <summary>
/// 直接执行sql语句,获取总人数
/// </summary>
/// <returns></returns>
publicint GetTotalCount()
{
string strSql = "SELECT COUNT(0) FROM Person(NOLOCK)";
var query = dataContext.ExecuteQuery<int>(strSql);
int result = query.First<int>();
Console.WriteLine();
Console.WriteLine("total count:{0}", result);
return result;
}

调试的时候,通过IntelliTrace跟踪到:

毫无疑问,上面的图片说明最初的想法是不正确的,”ADO.NET:执行Reader…”云云,让我们更加坚信它实际执行的应该是ExecuteReader方法。当然最简单的方法是直接查看它的方法说明:

// 摘要:
// 直接对数据库执行 SQL 查询并返回对象。
//
// 参数:
// query:
// 要执行的 SQL 查询。
//
// parameters:
// 要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,
则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果某参数为
// null,则该参数会转换为 DBNull.Value。
//
// 类型参数:
// TResult:
// 返回的集合中的元素的类型。
//
// 返回结果:
// 由查询返回的对象的集合。
public IEnumerable<TResult> ExecuteQuery<TResult>(string query, paramsobject[] parameters);

ExecuteQuery方法还有一个非泛型方法:

//
// 摘要:
// 直接对数据库执行 SQL 查询。
//
// 参数:
// elementType:
//

要返回的 System.Collections.Generic.IEnumerable<T>
的类型。使查询结果中的列与对象中的字段或属性相匹配的算法如下所示:如果字段或属性映射到特定列名称,则结果集中应包含该列名称。如果未映射字段或属性,则结果集中应包含其名称与该字段或属性相同的列。通过先查找区分大小写的匹配来执行比较。如果未找到匹配项,则会继续搜索不区分大小写的匹配项。如果同时满足下列所有条件,则该查询应当返回(除延迟加载的对象外的)对象的所有跟踪的字段和属性:T

// 是由 System.Data.Linq.DataContext 显式跟踪的实体。
System.Data.Linq.DataContext.ObjectTrackingEnabled
// 为 true。实体具有主键。否则会引发异常。
//
// query:
// 要执行的 SQL 查询。
//
// parameters:
// 要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,
则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果某参数为
// null,则该参数会转换为 DBNull.Value。
//
// 返回结果:
// 由查询返回的对象的 System.Collections.Generic.IEnumerable<T> 集合。
public IEnumerable ExecuteQuery(Type elementType, string query, paramsobject[] parameters);

看它的参数需要多传递一个elementType,明显不如泛型方法简洁。

2、ExecuteCommand方法

同样道理,这个方法立刻让我们联想到(世界没有联想,生活将会怎样?),联想到,等等,不知联想到什么。然后我们看一下方法使用说明:

//
// 摘要:
// 直接对数据库执行 SQL 命令。
//
// 参数:
// command:
// 要执行的 SQL 命令。
//
// parameters:
// 要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,
则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果任一参数为
// null,则该参数会转换为 DBNull.Value。
//
// 返回结果:
// 一个 int,表示所执行命令修改的行数。
publicint ExecuteCommand(string command, paramsobject[] parameters);

到这里,看它的返回类型为int,表示执行命令修改的行数,这次很容易想到ExecuteNonQuery方法。对不对呢?通过下面的代码证明我们的设想:

/// <summary>
/// 直接执行sql语句 根据用户Id更新体重
/// </summary>
/// <param name="id">用户Id</param>
/// <param name="destWeight">更新后的体重</param>
/// <returns></returns>
publicint ModifyWeightById(int id, double destWeight)
{
string strSql = string.Format("UPDATE Person SET Weight={0} WHERE Id={1}", destWeight, id);
int result = dataContext.ExecuteCommand(strSql);
Console.WriteLine();
Console.WriteLine("affect num:{0}", result);
return result;
}

调试过程中,通过IntelliTrace可以很清楚地捕获:“ADO.NET:执行NonQuery…”基本可以断言我们的设想是正确的。

3、防止sql注入

1和2中,执行sql语句的两个方法都有一个params 类型的参数,我们又会想到ADO.NET非常重要的sql语句的参数化防止sql注入问题。下面通过一个方法,看看linq2sql可不可以防止sql注入。

(1)、直接执行拼接的sql语句(有风险)

/// <summary>
/// 直接执行sql语句 根据用户Id更新FirstName
/// </summary>
/// <param name="id">用户Id</param>
/// <param name="destName">更新后的FirstName</param>
/// <returns></returns>
publicint ModifyNameById(int id, string destName)
{
string strSql = string.Format("UPDATE Person SET FirstName='{0}' WHERE Id={1}", destName, id);
//这么拼接有风险
int result = dataContext.ExecuteCommand(strSql);
Console.WriteLine();
Console.WriteLine("affect num:{0}", result);
return result;
}

然后,在客户端这样调用这个方法:

int result = ServiceFactory.CreatePersonService().ModifyNameById(10, "'Anders'");
//更新id为10的人的FirstName

F. mybatis的sql查询返回数据类型有哪些

在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。

3.1 当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时
候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。

G. MyBatis框架中,SQl语句的返回值问题

可以直接返回对象 你配置一下别名 例 <typeAlias class="***" alias="myObject" />
然后你在 mybatis的sql文件中 更改查询的返回值类型 也就是resultType=“myObject” 就可以了,
例:
<select id="myselect" resultType="myObject">
select * from myObject_table
</select>
如果是list Mybatis会自动处理的。

H. mybatis是如何将sql执行结果封装为目标对象并返回的都有哪些映射形式

第一种是使用<resultMap>标签,逐一定义列名和对象属性名之间的映射关系。

第二种是使用sql列的别名功能,将列别名书写为对象属性名,

有了列名与属性名的映射关系后,Mybatis通过反射创建对象,同时使用反射给对象的吵庆斗属性逐一赋值并返回,那升磨些找不到映射关系的属性,差哗是无法完成赋值的。

I. java 获取SQL查询语句返回的结果

step1:构造连接
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db","root","123");

step2:构造语句
String sql = "select username,password from t_user where username=?";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, "zhangshan"); //给SQL的"?"(问号)传值。

step3:执行查询
ResultSet rs = stmt.executeQuery(); //rs就是SQL查询锋昌语句返回的结果集

step4:处理结果(java 获取SQL查询语句返回的结果)
List list = new ArrayList();
//遍历结果集,这样写就可以了,就是一个循环,有多少条记录,这里就会循环多少次,
//一次就是一条记录,想象一下就像一个表的一条记录
//在这里可以做查询出来的数据处理,可以封装成对象之类的(就是把值给它)
if(rs.next()) { //遍历结果集,这样写就可以衫基搭了
User u = new User();
String username = rs.getString("username");
String address = rs.getString("password ");
u.setUsername(username);
u.setAddress(address);
list.add(u);
}
//上面这个例子意思是,把每一条记录封装成了一个User对象,然后这或拿些User对象都放存入到了一个list

step4:关闭连接等

J. hibernate使用createSQLQuery连表查询获取的结果集如何返回1个对象

使用VO .addEntity(VO.class)
Vo中放你需要的属性

热点内容
如何选择最佳配置 发布:2025-07-16 01:56:44 浏览:603
mad加密 发布:2025-07-16 01:52:12 浏览:424
linux64位内存 发布:2025-07-16 01:02:36 浏览:960
压缩衣尺码表 发布:2025-07-16 00:47:33 浏览:640
安卓恢复了出厂怎么找回照片 发布:2025-07-16 00:43:56 浏览:933
为什么说服务器已停止响应 发布:2025-07-16 00:29:36 浏览:392
python判断字符串是否为空 发布:2025-07-16 00:21:47 浏览:210
安卓转苹果用什么软件 发布:2025-07-16 00:21:45 浏览:628
安卓官服如何登ios 发布:2025-07-16 00:21:32 浏览:624
天龙抢店脚本 发布:2025-07-16 00:14:47 浏览:958