① ORM是否必要
ORM可以防止注入作為附加功能,sql也可以帶來反注入機制。ORM的主要作用是將資料庫域的對象映射到面向對象的域中,因為開發人員更熟悉它們。
開發人員在開發時更傾向於用對象的方式思考
通過ORM,抽象被構造並輸入到應用程序代碼中,這樣就可以在代碼中直接實現許多必要的約束,這有助於正確性。② Java中的at com.jfinal.plugin.activerecord.Db.query錯誤,怎麼解決呀!
樓主,,,,,圖片中,第1行就告訴了你錯誤的原因,,,,,第3行是你自己的代碼中的錯誤的行。
③ Ralis連接遠程資料庫,提示ActiveRecord::ConnectionNotEstablished ,本地pl/sql可以訪問遠程資料庫
你是區域網內可以遠程連接,廣域網使用外網ip不可以連接嗎?
路由器上要映射ip地址和資料庫埠
④ 初學ruby on rails,ActiveRecord::StatementInvalid in UsersController#show 不能生成正確的sql語句
從你給的信息看不出任何問題,需要你貼出資料庫的配置,以及model的定義
⑤ Yii的ActiveRecord是自動產生SQL語句嗎
不太理解你想問什麼。通常框架中的資料庫操作都是DB對象負責的,也就是通常來說其它對象只會創建一個能用來產生SQL語句的結構體,然後DB對象會分析這個結構體然後轉換為sql並執行。
至於Yii的ActiveRecord,你可以理解為是將資料庫表中的記錄對象化了。即每個ActiveRecord實例對應了指定的數據表中的特定行(包括新建的行),它封裝了save, delete方法,但是具體的save,delete操作還是轉交給db對象實際完成的。
⑥ pgSql里運行sql語句沒錯,但在JFinal報錯
PostgreSQL的PL/pgSQL語言是支持動態SQL語句的(說execute immediate的是ECPG所支持的)。但是,要記得重要的一點: 是在PL/pgSQL語言中支持。而PL/pgSQL語言一個塊結構的語言,它以begin ... end為塊的開始與結束標識。這也就是說,要執行動態SQL語句,就必須放到begin ... end塊中,而不要想實現一個單獨的動態SQL語句。在SQL Server中,倒是可以輕松的實現,我們可以直接執行一個這樣的動態SQL:
1execute sp_executesql N'select 1 as val'
而在PostgreSQL中,就不要有此想法了。當然,SQL Server的這種動態SQL語句的執行方法也有其局限與不便的地方。
在PL/pgSQL中,執行動態SQL的格式如下(摘錄自說明文檔):
1EXECUTE command-string [ INTO [STRICT] target ] [ USING expression [, ... ] ];
其中,
command-string就是要執行的動態SQL語句(一定要記住:這里是SQL語句,不是PL/pgSQL語句,像raise notice就不能使用);
INTO子句是把SQL查詢到的值賦給INTO指定的變數;
USING子句是前面的command-string中替代變數($1, $2, ...)的賦值;
示例:
123456789do $$declarev_c1 integer;v_c2 integer;beginexecute 'select count(*) as c1, count(*) as c2 from (select 1 as idx union select 11 as idx union select 21 as idx) s where idx > $1' into v_c1, v_c2using 10;raise notice '%, %', v_c1, v_c2;
⑦ jFinal怎樣連接sqlserver
1.修改配置文件
jdbc.url= jdbc:sqlserver://localhost;databaseName=jfinal_demo
jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.user=sa
jdbc.pwd=123456
devMode = true
2.配置插件
publicvoidconfigPlugin(Pluginsme){
//配置C3p0資料庫連接池插件
C3p0Pluginc3p0Plugin=newC3p0Plugin(getProperty("jdbc.url"),getProperty("jdbc.user"),getProperty("jdbc.pwd").trim(),getProperty("jdbc.driver"));
me.add(c3p0Plugin);
//配置ActiveRecord插件
ActiveRecordPluginarp=newActiveRecordPlugin(c3p0Plugin);
arp.setDialect(newAnsiSqlDialect());
me.add(arp);
arp.addMapping("blog",Blog.class);
}
⑧ yii2 yii\db\ActiveRecord find() 和 findBySql()返回結果不同
Customer::findBySql('SELECT * FROM customer')->all()->count();
試試這個
⑨ activerecord 中如何將視圖映射為類
(1)需要引用的程序集:
Castle.ActiveRecord.dll
Castle.Model.dll
Nullables.dll
NHibernate.dll
Castle.DynamicProxy.dll (Curious? Check DynamicProxy)
Nullables.NHibernate.dll
log4net.dll
Iesi.Collections.dll
(2)一個簡單的控制台工程
(3)資料庫
CREATE TABLE Blogs (
blog_id int IDENTITY(1, 1) PRIMARY KEY,
blog_name varchar(50),
blog_author varchar(50))
CREATE TABLE Posts (
post_id int IDENTITY(1, 1) PRIMARY KEY,
post_title varchar(50),
post_contents text,
post_category varchar(50),
post_blogid int FOREIGN KEY REFERENCES Blogs (blog_id),
post_created datetime,
post_published bit
)
2、編寫Blog 類
首先讓我們編寫一個繼承於ActiveRecordBase的類Blog 。
public class Blog : ActiveRecordBase
{
}
接下來你必須使用ActiveRecordAttribute來讓Blog 類知道對應資料庫的哪個表。注意這件事情,類的名稱是Blog ,而數據表的名稱是Blogs,如果這兩者相同,這個地方可以不特別指定類對應的數據表。
[ActiveRecord("Blogs")]
public class Blog : ActiveRecordBase
{
}
接下來讓我們為類添加屬性並指定主鍵吧:
[ActiveRecord("Blogs")]
public class Blog : ActiveRecordBase
{
private int _id;
[PrimaryKey(PrimaryKeyType.Native, "blog_id")]
public int Id
{
get { return _id; }
set { _id = value; }
}
}
在這個例子中,主鍵需要對應到數據表中的blog_id欄位。與上面相同,如果數據表中主鍵名稱和屬性名稱相同的話,這個地方也不需要特別指定對應關系,這會使事情更加簡單,例如,如果主鍵的欄位名稱也是Id,下面這樣就可以了:
[PrimaryKey]
public int Id
{
get { return _id; }
set { _id = value; }
}
最後讓我們來看完成映射關系的類:
using System;
using System.Collections.Generic;
using System.Text;
using Castle.ActiveRecord;
namespace ActiveRecord
{
[ActiveRecord("Blogs")]
public class Blog : ActiveRecordBase
{
private int _id;
private String _name;
private String _author;
[PrimaryKey(PrimaryKeyType.Identity, "blog_id")]
public int Id
{
get { return _id; }
set { _id = value; }
}
[Property("blog_name")]
public String Name
{
get { return _name; }
set { _name = value; }
}
[Property("blog_author")]
public String Author
{
get { return _author; }
set { _author = value; }
}
/**//// <summary>
/// 刪除所有
/// </summary>
public static void DeleteAll()
{
DeleteAll( typeof(Blog) );
}
/**//// <summary>
/// 查詢所有
/// </summary>
/// <returns></returns>
public static Blog[] FindAll()
{
return (Blog[])FindAll(typeof(Blog));
}
/**//// <summary>
/// 根據Id查詢
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static Blog Find(int id)
{
return (Blog)FindByPrimaryKey(typeof(Blog), id);
}
}
}
我們把類映射到了數據表、欄位和主鍵,代碼非常直白。在開始測試之前,我們還必須提供一些配置信息,這些信息包含了資料庫聯接的一些設置,我們可以使用AppDomain Config文件來保存這些信息,也可以使用硬編碼的方式:
<code>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="activerecord"
type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord"/>
</configSections>
<activerecord>
<config>
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.connection.connection_string" value="UID=sa;Password=yourpass;Initial Catalog=test;Data Source=." />
</config>
</activerecord>
</configuration>
</code>
或者:
InPlaceConfigurationSource source = new InPlaceConfigurationSource();
Hashtable properties = new Hashtable();
properties.Add("hibernate.connection.driver_class", "NHibernate.Driver.SqlClientDriver");
properties.Add("hibernate.dialect", "NHibernate.Dialect.MsSql2000Dialect");
properties.Add("hibernate.connection.provider", "NHibernate.Connection.DriverConnectionProvider");
properties.Add("hibernate.connection.connection_string", "UID=sa;Password=;Initial Catalog=test;Data Source=.");
source.Add(typeof(ActiveRecordBase), properties);
ActiveRecordStarter.Initialize(source, typeof(Blog));
在這個例子中,我們可以象下面這樣初始化:
IConfigurationSource source = System.Configuration.ConfigurationSettings.GetConfig("activerecord") as IConfigurationSource;
ActiveRecordStarter.Initialize(source, typeof(Blog));
現在你能夠象下面這樣運行程序了:
//刪除所有
Blog.DeleteAll();
//添加
Blog blog = new Blog();
blog.Name = "ttinfo";
blog.Author="ttinfo2";
blog.Save(); // or blog.Create();
//按照id查詢
Int id=1;
Blog blog= Blog.Find(id);
……
⑩ ruby activerecord有連接池嗎
ORM 與抽象滲漏法則
ORM (Object-relationalmapping ) 是一種對映設關系型數據與對象數據的程序技術。面向對象和從數學理論發展出來的關系資料庫,有著顯著的區別,而 ORM 正是解決這個不匹配問題所產生的工具。它可以讓你使用面向對象語法來操作關系資料庫,非常容易使用、撰碼十分有效率,不需要撰寫繁瑣的SQL語法,同時也增加了程序代碼維護性。
不過,有些熟悉 SQL 語法的程序設計師反對使用這樣的機制,因為直接撰寫 SQL 可以確保操作資料庫的執行效率,畢竟有些時候 ORM 產生出來的 SQL效率不是最佳解,而你卻不一定有經驗能夠意識到什麼時候需要擔心或處理這個問題。