2011-08-08 51 views
2

是否存在可以創建sql語句的java庫?我不是在尋找一些奇特的東西,只是在「字符串操作」級別:我只是使用jdbc(與Preparestatements和Resultsets),但我不太喜歡傳遞包含SQL代碼的大字符串...Java庫中寫入sql語句?

我需要的是一個「簡單」Select類(或類似的東西);在我心裏我真正想要的是能夠做到

SQLStatement stat = Select("*").from("table").where("condition and condition").orderby("something"); 
ResultSet rs = Connection.getResultSet(stat.toString()); 
/* equals to "select * from table where condition and condition order by something" */ 

也許我是盲人,但我找不到類似的東西...

很明顯,我想一些方法/類能寫insert S和update S和其他的東西......

我排除的ORM的原因有兩個:

  1. 的DB模式它的「老」,我不能改變它,我不知道如何能夠我調整ORM以遵循我們的模型。我的ORM需要改變模型(也許增加一個基類,也許你需要實現一個接口),並且我的項目中的模型是大的,古老的,脾氣暴躁的
  2. Onestly ,我不太喜歡ORM:對象和集合論只是不會被映射(恕我直言)
+0

爲什麼不使用ORM?因爲有** ['plenty !!!'](http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software#Java)** – Nishant

+0

這個不存在的原因可能是雙重的:a。 )用有意義的方法名替換字符串連接並不是*,這是很大的收穫和b)。你不應該首先使用字符串操作來構建完整的選擇(**特別是**,而不是where條件)。 –

+0

有趣,上週我有同樣的想法! :) –

回答

2

ORM(對象關係映射庫)是線索。

Hibernate是最成熟的一個。

而Hibernate-s Criteria API是面向對象的方式來創建這樣的查詢,如你所願。 Criteria API doc.

+0

+1。 Hibernate'Criteria'允許你編寫如下查詢: 'createCriteria(Stuff.class).add(Restrictions.eq(「property」,propValue))。addOrder(Order.asc(「name」))。list( );' – Vlad

+0

嗯,我正在瀏覽'Criteria'文檔,它*看起來*是我想要的......只是......爲什麼他們不使用類似於SQL的API? –

+0

@Vito:他們*支持HQL,這有點類似於SQL,但是通過編程構建標準具有上面提到的所有優點。 –

1

Hibernate很可能是你要找的。它包含許多高級功能,但SQL語句更直接。

在他們的網站看看:http://www.hibernate.org/

我也建議通過本指南略讀:

https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java

+1

我第二個答案。 Hibernate可能正是你正在尋找的。它將所有數據庫表和關係映射爲Java類,您可以通過方法調用以std java方式方便地使用它們,而不是將大量的sql代碼包含到程序中。 –

0

我不確定是否將Java用於本機應用程序或Web。 如果您使用Java for web,則可以考慮使用Play framework

簡單,Hibernate包含一個非常簡單的實現(當你自己實現Hibernate時更容易)。

1

嘗試SQLBuilder項目。老實說,我沒有用過這個。看着他們的文檔,我認爲它可能適合您的要求。

您還可以嘗試在Sourceforge,Google代碼等中找到類似的API。