sql查詢返回對象
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中放你需要的屬性